Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 817

 
evillive:

Você pode ler a ajuda, está tudo aí, com exemplos.


Obrigado
 

Tive uma idéia para tirar um indicador dos dados do arquivo.

Eu peguei um exemplo do livro didático. Reformulei o roteiro para adequá-lo às minhas necessidades:

int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       shift,Text;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return(0);                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      //--------------------------------------------------------- 7 --
      shift=iBarShift(NULL,0,Dat_DtTm);
      Alert("Время=",TimeToString(Time[shift]),"Text=",Text); 
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
      break;                        // Выход из чтения и рисования
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   return(0);                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

A linha"Alerta" pode ser removida.

A lógica é obter a data no indicador e compará-la com o arquivo e atribuir o valor ao buffer em caso de coincidência.

Mas acho que se começarmos a procurar cada barra desde o início do arquivo, onde os dados já são levados em conta, será bastante caro.

A questão é como fixar as linhas de arquivo processadas no indicador e começar a procurar por elas?

 
Forexman77:

Há um grande arquivo com datas neste formulário "20141231". Para converter a string para o formato dedata e hora, você precisa de pontos"YYYY.MM.DD" entre o ano, mês e número.

Como isso pode ser feito?

string sdt="20141231"
string dt=StringSubstr(sdt,0,4)+"."+StringSubstr(sdt,4,2)+"."+StringSubstr(sdt,6,2)
 
vicmos:

Obrigado, eu já resolvi isso. Converteu o arquivo onde ele foi originalmente separado por vírgulas. Mudou as vírgulas para pontos e depois acrescentou uma segunda coluna, todas com "uniCSVed".

Agora vou saber como fazê-lo de forma programática.

Agora me deparo com outra tarefa titânica: como cumprir o indicador com estes dados? Fiz um roteiro que funciona corretamente.

Mas no indicador, para não ter freios, preciso lembrar de alguma forma a linha em que na última iteração dos dados foi obtida.

 
Forexman77:

Obrigado, eu já resolvi isso. Converteu o arquivo onde ele foi originalmente separado por vírgulas. Mudou as vírgulas para pontos e depois acrescentou uma segunda coluna, todas com "uniCSVed".

Agora vou saber como fazê-lo de forma programática.

Agora me deparo com outra tarefa titânica: como cumprir o indicador com estes dados? Fiz um roteiro que funciona corretamente.

Mas no indicador, para não ter freios, preciso lembrar de alguma forma a linha em que na última iteração dos dados foi obtida.

Provavelmente, isso é possível com FileTell(Retorna a posição atual do ponteiro de arquivo do arquivo aberto correspondente) e FileSeek(Move a posição do ponteiro de arquivo por número especificado de bytes relativamente à posição especificada).
 
evillive:
É provavelmente possível com FileTell (Retorna a posição atual do ponteiro de arquivo do arquivo aberto correspondente) e FileSeek (Move a posição do ponteiro de arquivo pelo número especificado de bytes em relação à posição especificada).

Obrigado! Eu também prestei atenção a estas funções. também oFileIsLineEnding. Pensarei mais sobre como fazer isso.

 
lexdemon:
Como definimos Ticket_first_order?

Atribuir o valor de OrderTicket() a uma variável. Por exemplo: int Ticket= OrderTicket(). E depois use este valor na OrderSelect.

OrderSelect(Ticket,SELECT_BY_TICKET); .

Podemos fazer isso de outra forma. Não vamos definir o bilhete, apenas encontramos o pedido tentando (SELECT_BY_POS).

Nós o obteremos:

 string Symb=Symbol();

for(i=0;i<=OrdersTotal() ;i++)

   if(OrderSelect(i,SELECT_BY_POS)==true)

 {

   if(OrderSymbol()!=Symb)continue;

   if(OrderType()==OP_BUY)

     {

   break;

     }

   }

}

 

  if(OrderOpenPrice()+10*Point<=Ask)

 OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

 

 
CJIeCaPb:

Atribuir o valor de OrderTicket() a uma variável. Por exemplo: int Ticket= OrderTicket(). E depois use este valor na OrderSelect.

OrderSelect(Ticket,SELECT_BY_TICKET); .

Podemos fazer isso de outra forma. Não vamos definir um bilhete, mas apenas encontrar o pedido tentando (SELECT_BY_POS).

Isso vai dar certo:

O método da força bruta está mais próximo da verdade
 

Como este é um tópico para perguntas de principiantes, vou perguntar o meu...

1. Existe um software API para download de cotações? O ideal é um pedido get/post.

2. Se não existe tal coisa para acesso amplo, quais são as plataformas mais fáceis de analisar e podem fornecer acesso em tempo real a citações uma vez por segundo.

3. Você pode escrever automação em qualquer coisa, é claro. Mas eu ainda gostaria de saber quais idiomas e ferramentas são os mais convenientes e populares?

 
Por exemplo, aqui https://iqoption.com/us/options/turbo (se alguém estiver logado ali) é um gráfico em tempo real muito bom. Idealmente eu gostaria de analisá-lo, mas o FireBug não mostra onde o roteiro vai para obter as citações. Há um ponto no gráfico a cada segundo.