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

 
-Aleks-:

Você tem uma entrada correspondente a uma barra ou não?

Sim, será uma barra do histograma no PERÍODO_D1 na barra no dia vinte e nove de março.

29.03.2017. 574391

 

O gráfico de barras é definido corretamente se a data for escrita desta forma

int shift=iBarShift(Symbol(),PERIOD_D1,"29.03.2017");
Range_Buffer[shift]= str_b1;

mas não é definido se eu o escrever assim

str_dat1= StringSubstr(str,0,10);//

int shift=iBarShift(Symbol(),PERIOD_D1,str_dat1);

Range_Buffer[shift]= str_b1;

A data(str_dat1) é impressa corretamente.

Qual é arazão?



 
mila.com:

Removido o loop while, eu recebo a primeira linha como esta

Por favor, diga-me o que está errado.

Temos que verificar o que obtemos na variável str_dat1

Na verdade, o iBarShift deve passar uma data do tipo data/hora, não um fio. Talvez aceite um fio limpo como data, enquanto não aceita uma variável.

É melhor converter o fio recebido em tipo data/hora.


ps E uma idéia completamente louca de verificá-la por escrito

int shift=iBarShift(Symbol(),PERIOD_D1, (string)str_dat1);

Mas isto é simplesmente contar com a opcionalidade do mql4.

 
mila.com:

O gráfico de barras é definido corretamente se a data for escrita desta forma

mas não é definido se eu o escrever assim

A data(str_dat1) é impressa corretamente.

Qual é arazão?




A razão é que a função iBarShift() deve passar o tipo de variável data/hora, enquanto você passa um tipo String.

datetime  str_dat1=StringToTime(StringSubstr(str,0,10));// это дата
double str_b1=StringToDouble(StringSubstr(str,12,6)); // это значение

int shift=iBarShift(Symbol(),PERIOD_D1,str_dat1);

Range_Buffer[shift]=str_b1;

...

 
Alexey Viktorov:
É melhor converter a linha recebida para o tipo data/hora.

Obrigado, coloca um gráfico de barras.

Tenho uma pergunta sobre como construir um histograma em todas as linhas do arquivo.

Descobri na ajuda, que o salto para a próxima linha é FileSeek()

Mas eu não sei como pular para a próxima linha.

 
mila.com:

Obrigado, coloca um gráfico de barras.

Tenho uma pergunta sobre como construir um histograma em todas as linhas do arquivo.

Descobri na ajuda, que o salto para a próxima linha é FileSeek()

Mas eu não sei como pular para a próxima linha.

Até agora, apenas uma coluna


Ajuda )

Se você abrir o arquivo antes do laço e não fechá-lo até o final, a cada iteração do laço será lida a próxima linha. E você pode fechar o arquivo após o final do laço.

FileSeek() move um ponteiro não para a linha seguinte mas pelo número especificado de bytes desde o início, desde o final do arquivo, ou desde a posição atual do ponteiro.

Para movê-lo corretamente, você precisa saber quantos bytes uma linha ocupa no arquivo escrito.

 
mila.com:

Obrigado, coloca um gráfico de barras.

Tenho uma pergunta sobre como construir um histograma em todas as linhas do arquivo.

Descobri na ajuda, que o salto para a próxima linha é FileSeek()

Mas eu não sei como pular para a próxima linha.

Até agora, apenas uma coluna


Ajuda )

Dei-lhe um link para um artigo que descreve tudo isso com exemplos. Não parecia ter sido lido...
 
Sergey Gritsay:


A razão é que a função iBarShift() precisa passar o tipo de variável data/hora, enquanto você passa o tipo de string, tente isto

...

Obrigado, eu o farei.

 
Alexey Viktorov:

Se você abrir o arquivo antes do laço e não fechá-lo, a próxima linha será lida a cada iteração do laço. E você pode fechar o arquivo após o final do laço.


Funciona, obrigado.

 
Artyom Trishkin:
Dei-lhe um link para um artigo que descreve tudo isso com exemplos. Não parecia ter sido lido...

Eu li, mas nunca teria adivinhado abrir o arquivo antes do laço )

Provavelmente não o leu com atenção )
Razão: