Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 175

 
-Aleks-:

 

У Вас одна запись соотвествует одному бару или нет?

Да, это будет один столбик гистограммы на PERIOD_D1 на баре двадцать девятого марта.

29.03.2017. 574391

 

Столбик гистограммы устанавливается правильно, если дату пишу так

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

но не устанавливается если так

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

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

Range_Buffer[shift]= str_b1;

на принт дата (str_dat1) выводится правильно.

В чём же причина ?



 
mila.com:

Убрала цикла while, получаю первую строку в таком виде

скажите, пожалуйста, что неправильно.

Надо проверить что получается в переменной str_dat1

Вообще-то в iBarShift должна передаваться дата типа datetime а не строка. Может в виде чистой строки принимает как дату, а переменную не хочет принимать???

Лучше полученную строку перевести в тип datetime.


ps И совсем бредовая идея для проверки написать так

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

Но это чисто в расчёте на необязательность mql4.

 
mila.com:

Столбик гистограммы устанавливается правильно, если дату пишу так

но не устанавливается если так

на принт дата (str_dat1) выводится правильно.

В чём же причина ?




Причина в том что в функцию iBarShift()  нужно передавать тип переменной datetime а вы передаете тип стринг, поробуйте так

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:
Лучше полученную строку перевести в тип datetime.

Спасибо, ставит столбик.

Возник вопрос как по всем строкам файла построить гистограмму.

Нашла  справке, что переход к следующей строке FileSeek()

Но как мне перейти на следующую строку не знаю.

 
mila.com:

Спасибо, ставит столбик.

Возник вопрос как по всем строкам файла построить гистограмму.

Нашла  справке, что переход к следующей строке FileSeek()

Но как мне перейти на следующую строку не знаю.

Пока ставит только один столбик


Помогите )

Если открыть файл перед циклом и не закрывая его читать до конца, то с каждой итерацией цикла будет читаться следующая строка. И уже после завершения цикла можно закрыть файл.

FileSeek() перемещает указатель не на следующую строку, а на указанное количество байт от начала, от конца файла или от текущего положения указателя.

Чтобы его правильно переместить, надо знать сколько байт занимает одна строка в записанном файле.

 
mila.com:

Спасибо, ставит столбик.

Возник вопрос как по всем строкам файла построить гистограмму.

Нашла  справке, что переход к следующей строке FileSeek()

Но как мне перейти на следующую строку не знаю.

Пока ставит только один столбик


Помогите )

Я давал ссылку на статью, в которой всё это описано с примерами. Не читали похоже...
 
Sergey Gritsay:


Причина в том что в функцию iBarShift()  нужно передавать тип переменной datetime а вы передаете тип стринг, поробуйте так

...

Спасибо, так и сделаю.

 
Alexey Viktorov:

Если открыть файл перед циклом и не закрывая его читать до конца, то с каждой итерацией цикла будет читаться следующая строка. И уже после завершения цикла можно закрыть файл.


Работает, спасибо.

 
Artyom Trishkin:
Я давал ссылку на статью, в которой всё это описано с примерами. Не читали похоже...

Читаю, но никогда не догадалась бы открывать файл перед циклом )

Возможно невнимательно читала )
Причина обращения: