Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 174

 
mila.com:

Olá.

Por favor, ajude-me a exibir dados de um arquivo como histograma.

No arquivo "file.txt", uma data corresponde a um número, como este:

29.03.2017. 574391

30.03.2017. 741308

31.03.2017. 614367

Eu obtenho dados de um arquivo e os imprimo, assim:


Histograma por tamanho de barra para que pareça um indicador )

Portanto, você coloca os dados no buffer gráfico, não na impressão. Determinar a data a partir da qual o histograma deve ser tirado e colocar os dados lá.
 
-Aleks-:

Portanto, você coloca os dados no buffer gráfico, não na impressão. Determine a data a partir da qual você deseja que o histograma seja plotado e coloque os dados lá.

Essa é a dificuldade.

Imprimi-o para deixar claro que estou obtendo os dados do arquivo em geral.

Não consigo descobrir como atribuí-las às datas relevantes.

 
mila.com:

Essa é a dificuldade.

Imprimi-o para deixar claro que estou obtendo os dados do arquivo em geral.

Não consigo descobrir como atribuí-las às datas relevantes.

Pegue a data do arquivo, encontre o número da barra a partir da data e traga para dentro dela...
 
Alexey Viktorov:
Pegue a data do arquivo, encontre o número da barra a partir da data e traga para dentro dela...

Como você faz isso exatamente?

Mostre-me, por favor.

 
mila.com:

Como você faz isso exatamente?

Por favor, mostre-me.

Use funções de corda. Em particular

string  StringSubstr(
   string  string_value,     // строка
   int     start_pos,        // с какой позиции начать
   int     length=0          // длина извлекаемой строки
   );

puxar 10 caracteres da posição zero e converter a corda para uma data.

Mas se não houver tempo de abertura de barra na corda, os histogramas não estarão em todas as barras se a executarmos em um gráfico que não seja D1.

Строковые функции - Справочник MQL4
Строковые функции - Справочник MQL4
  • docs.mql4.com
Строковые функции - Справочник MQL4
 

Meus amigos, por favor me ajudem a escrever uma função para calcular o número de barras a partir do bar onde a ordem foi aberta.

Por exemplo: se tivermos uma ordem em aberto na barra 5, a função deve retornar 5.

 
Bek001:

Por favor, ajude-me a escrever uma função para calcular o número de barras a partir da barra onde o pedido foi aberto.

Por exemplo: se tivermos uma ordem em aberto na barra 5, a função deve retornar 5.

int shift=iBarShift(NULL,PERIOD_СURRENT,OrderOpenTime());
 
Alexey Viktorov:

Use funções de corda. Em particular

puxar 10 caracteres da posição zero e converter a corda para uma data.

Mas se não houver tempo de abertura de barra na corda, o histograma não estará em todas as barras se eu o executar em um gráfico que não seja D1.

Obrigado, estou puxando a data e o valor separadamente.

Agora, como preencher o buffer com isto?

 for(int i=0; i<limit;i++){

string InpFileName="file.txt";
 ResetLastError(); 
  int file_handle=FileOpen(InpFileName,FILE_TXT|FILE_READ);
   
   if(file_handle!=INVALID_HANDLE) 
     { 
      PrintFormat("Файл %s открыт для чтения",InpFileName); 
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 
      //--- вспомогательные переменные 
      int    str_size; 
      string str,str_b1,str_dat1; 
      //--- прочитаем данные из файла 
      while(!FileIsEnding(file_handle)) 
        { 
         //--- узнаем сколько символов использовано для записи времени 
         str_size=FileReadInteger(file_handle,INT_VALUE); 
         //--- прочитаем строку 
         str=FileReadString(file_handle,str_size); 
         str_dat1= StringSubstr(str,0,10);
         str_b1= StringSubstr(str,12,6);
         //--- распечатаем строку 
         PrintFormat(str_dat1); 
         PrintFormat(str_b1);
        } 
      //--- закроем файл 
      FileClose(file_handle); 
      PrintFormat("Данные прочитаны, файл %s закрыт",InpFileName); 
     } 
   else 
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError()); 
    //}
   
      Range_Buffer[i]=//???
      }
 
mila.com:

Obrigado, estou puxando a data e o valor separadamente.

Agora, como preencher o buffer com isto?

Range_Buffer[i]=значение//???

Tem que estar em um loop. O loop in the loop para loop é uma perda de tempo. Temos que ler uma linha, puxar a data e o valor e trabalhar com eles. Encontre o número de barras por tempo e coloque o valor lá. E somente depois disso, passar para a próxima entrada.

 
mila.com:

Essa é a dificuldade.

Imprimi-o para deixar claro que estou obtendo os dados do arquivo em geral.

Não consigo descobrir como atribuí-las às datas relevantes.

Um registro corresponde a uma barra ou não?
Razão: