Есть задумка чтобы брать значение с конца
FileSeek(Profit_handle,0,SEEK_END);
запомнить его, потом указать смещение 8 (8 байт, или 1 ?),
дальше это значение записываем, и так до начала файла.
Только вот если смещение у нас 8 байт и указывать
его нужно в "for(...)" то i++ тут не сделаешь
--------------------------------------------------------------
осталось только определить сколько нужно раз
писать этот код
FileSeek(Profit_handle,0,SEEK_END); double s1=FileReadDouble((Profit_handle); FileSeek(Profit_handle,8,SEEK_END); double s2=FileReadDouble((Profit_handle); FileSeek(Profit_handle,16,SEEK_END); double s3=FileReadDouble((Profit_handle); и т.д.
Для определения смещения можно воспользоваться
наверно общей размерностью файла
ulong file= FileSize(Profit_handle); //получаем размер uint=file/8; //выясняем сколько записей
Есть задумка чтобы брать значение с конца
запомнить его, потом указать смещение 8 (8 байт, или 1 ?),
дальше это значение записываем, и так до начала файла.
Только вот если смещение у нас 8 байт и указывать
его нужно в "for(...)" то i++ тут не сделаешь
--------------------------------------------------------------
осталось только определить сколько нужно раз
писать этот код
А кто вам мешает сделать так
ulong file=FileSize(Profit_handle); int n=0; double s[]; ArrayResize(s,(file/8)); for(int i=0;i<file;i+=8) { FileSeek(Profit_handle,i,SEEK_END); double s[n]=FileReadDouble(Profit_handle); n++; }
Немного не дочитал ваш пост. Вам ведь сумма в итоге нужна, тогда можно так
ulong file=FileSize(Profit_handle); for(int i=0;i<file;i+=8) { FileSeek(Profit_handle,i,SEEK_END); double summa+=FileReadDouble(Profit_handle); }
Покумекал еще можно такой вариант применить. Но при работе с бесконечными циклами надо работать аккуратно, так как можно при определенных обстоятельствах войти в цикл и не выйти из него
while(FileIsEnding(Profit_handle)) { double summa+=FileReadNumber(Profit_handle); }
Спасибо! Буду думать над вашим кодом,
а сегодня пробовал по-другому сделать но минус в моем случае так это
нельзя будет просмотреть сколько и что там было записано, только общий результат:
С помощью этого кода:
bool WriteProf () { Profit_handle= FileOpen("profit.bin", FILE_READ|FILE_BIN); if(Profit_handle<0) { Print("-----Неоткрывается :-) profit.bin"); } double sum=0.0; sum=FileReadDouble(Profit_handle); double S=sum+profPerev(); FileClose(Profit_handle); //--------------------------- Profit_handle= FileOpen("profit.bin", FILE_WRITE|FILE_BIN); if(Profit_handle<0) { Print("-----Неоткрывается :-) profit.bin"); } FileWriteDouble(Profit_handle,S); FileClose(Profit_handle); Print("S=",S,"-----sum=",sum,"profPerev()=",profPerev()); return (0); }
Пытался реализовать то же самое, мы на первом шаге записываем просто 0
bool Sozdaem() { if (FileIsExist("profit.bin",0)==false) { Profit_handle= FileOpen("profit.bin", FILE_WRITE|FILE_BIN); if(Profit_handle<0) { Print("создаем.....Неоткрывается :-) profit.bin"); } double tu=0.0; FileWriteDouble(Profit_handle,tu); Print("Создали и записали 0.0"); FileClose(Profit_handle); return(0); } return(0); }
На следующих читаем сколько там записано, а потом прибавляем к нему текущее значение, после того как
файл нам не нужен удаляем его:
//+=====================================================+// // удаляем файл bool Ydalaem() { if (FileIsExist("profit.bin",0)==true) { FileDelete("profit.bin",0); Print("!!! Удалили текущий файл profit.bin"); return(0); } Print("!!! нет файла profit.bin"); return(0); }
В итоге у меня получилось что он все время записывает и не хочет удалять,
буду теперь думать почему, а потом возьмусь за ваш вариант,
Буду думать над вашим кодом, когда пойму что в моем не так еще рас спасибо!
логично спору нет :-)
Покумекал еще можно такой вариант применить. Но при работе с бесконечными циклами надо работать аккуратно, так как можно при определенных обстоятельствах войти в цикл и не выйти из него
Вот только когда настал момент что понадобилось из файла,
где в каждой строке находится 2 значения - первое целое (хранит время в секундах)
второе дробное (цену или еще что),
Когда время (т.е. секунды) в файле совпадает с временем, текущим, используем второе значение
и выводим его. Все это я реализовал следующим образом - работает без косяков - пока :-)
double proverka() { handle= FileOpen("kor.bin", FILE_BIN|FILE_READ); if(handle<0) Print("-----Неоткрывается :-)"); ulong file=FileSize(handle); ulong N = 0.0; double kor = 0.0; datetime bar[1]; CopyTime(Symbol_1,NULL,0,1,bar); ulong New = (ulong) bar[0]; while (N < file) { kor=FileReadDouble(handle); N = FileTell(handle); if (kor == New) { double ss = FileReadDouble(handle); FileClose(handle); return (ss); break; } } FileClose(handle); return (kor); }
По сообщениям из форума и советам знатных людей подвел итог,
работающая схема получилась такая:
записывается в индикаторе МТ4 значение времени в секундах, дальше запись значения буфера,
в мт4 реализован код так:
//======================================================================// void init() { handle= FileOpen("kor.bin", FILE_BIN|FILE_READ|FILE_WRITE, ";"); if(handle<1) Print("error",GetLastError()); return; } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { FileClose(handle); return(0); } //======================================================================// void start() { ..... //------ datetime bar = iTime(Symbol1, 0, Pos); Print("Buffer[Pos]...",Buffer[Pos],"...bar...",bar,"Pos...",Pos); if (handle>=1) { FileSeek(handle,0,SEEK_END); FileWriteDouble(handle,bar,DOUBLE_VALUE); FileSeek(handle,0,SEEK_END); FileWriteDouble(handle,Buffer[Pos],DOUBLE_VALUE); } //------ ..... }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго все времени суток!
Необходимо записать (после некоего события, в данном случае переворота, закрытия) в файл суммарный Profit
после при наступлении следующего события (подсчет результата) нужно сложить все числовые значения в файле.
Реализовал в коде следующим образом: