Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Проявляй активность в сообществе. Увеличивай ленту достижений!
Vova
16
Vova 2012.03.02 06:12 

Добрый день,

подскажите пожалуйста, в МТ5 вот такой код у меня работает и все считывает и отрисовывает:

void Draw_Line(datetime Date1,double Price1,datetime Date2,double Price2)

{

string Line_="ZZ_"+TimeToString(Date2);

ObjectCreate(0,Line_,OBJ_TREND,0,Date1,Price1,Date2,Price2);


int OnInit()

{

handle=FileOpen("My_file.csv",FILE_READ|FILE_CSV|FILE_ANSI);

.........

.........


for(int i=0;i<30;i++)

{

Date1=StringToTime(FileReadString(handle));

Date2=StringToTime(FileReadString(handle));

Price1=StringToDouble(FileReadString(handle));

Price2=StringToDouble(FileReadString(handle));

Draw_Line(Date1,Price1,Date2,Price2);

}

FileClose(handle);

return(0);

}

Файл My_file.csv состоит из четырех колонок две даты и две цены соответственно.

когда я переношу в МТ4 то

Price1=StringToDouble(FileReadString(handle));

не считывает цену... в лучшем случае удалось(при выставлении фиксированной цены Price1=Price2=1.5555 ) и оставлении в файле My_file.csv только двух колонок с датами получить отрезок с датами первой строки. Но дальше цикл не идет. И следующие даты тоже не считывает.

Тоже самое было и в МТ5 пока не добавил "|FILE_ANSI", но в МТ4 такого нет. Экспериментировал и с разными кодировками и *.txt и *.htm итак и сяк. Подскажите пожалуйста что делаю не так?. Опыт программирования небольшой.

Евгений
361
Евгений 2012.03.02 06:42  
Учебник в помощь -->Оператор циклa for .
Vova
16
Vova 2012.03.02 07:11  

У меня вопрос не по оператору цикла, извиняюсь если задал вопрос не корректно. Не работает:

Price1=StringToDouble(FileReadString(handle));

Даже если я в файле оставлю одну цену без оператора "for" и пытаюсь её считать - не получается. Т.е считывание данных, я так понимаю происходит, но в каком-то другом формате и FileReadStrig указатель не перемещает до следующего разделителя или достигнув конца строки - в начало следующей. Я так понимаю в МТ4 нужно делать по другому, но как не знаю...

Рустам
3597
Рустам 2012.03.02 07:52  

Откройте файл с правильными ключами https://docs.mql4.com/ru/files/FileOpen

Если вы открываете файл для записи чтения то FileReadString не будет передвигать файловый указатель, если только для чтения, то будет.

кроме того указатель будет передвигаться до разделителя (если указали "правильный" разделитель), или до конца строки (если "не правильный").

Vova
16
Vova 2012.03.02 08:51  

Следующий код чертит отрезок:

Date1=D'2012.02.27 00:00';

Date2=D'2012.02.29 00:00';

Price1=1.5555;

Price2= Price1;

Draw_Line(Date1,Price1,Date2,Price2);



Следующий код не чертит отрезок:

Date1=D'2012.02.27 00:00';

Date2=D'2012.02.29 00:00';

Price1=StringToDouble(FileReadString(handle));

Price2= Price1;

Draw_Line(Date1,Price1,Date2,Price2);

В файле My_file.csv одно единственное число 1.5555. Где собака зарыта?

Рустам
3597
Рустам 2012.03.02 09:03  
Внимательно курим ДОКУ : StrToDouble
Vova
16
Vova 2012.03.02 09:37  

FAQ:
Внимательно курим ДОКУ : StrToDouble

Невкурил...

например:

string s= FileReadString(handle);

s должна содержать "1.5555"(если в файле My_file.csv одно единственное число 1.5555) соответственно:

Price1=StringToDouble(s);

Price1 теперь должна содержать число в формате Double. Я не программист и не могу понять в чем ошибка: "Price1=StringToDouble(FileReadString(handle));" Ткните носом пожалуйста.

Рустам
3597
Рустам 2012.03.02 09:58  

StringToDouble В MQL4 называется StrToDouble(string), а еще желательно ее перед применением пронормализировать : NormaliseDouble(StrToDouble(string),Digits)

ВНИМАТЕЛЬНО ЧИТАЕМ ДОКУ - ТАМ ВСЕ НА РУССКОМ...

Vova
16
Vova 2012.03.02 11:01  

Да... Надо было в тексте файла в конце строки тоже ставить - ';'. У меня было: "дата;цена;дата;цена" а надо было: "дата;цена;дата;цена;".

FAQ:

Откройте файл с правильными ключами https://docs.mql4.com/ru/files/FileOpen

Если вы открываете файл для записи чтения то FileReadString не будет передвигать файловый указатель, если только для чтения, то будет.

кроме того указатель будет передвигаться до разделителя (если указали "правильный" разделитель), или до конца строки (если "не правильный").

СПАСИБО БОЛЬШОЕ за помощь! Очень помогло!
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий