у kompostera очень клево получается (ветка называлась что-то типа "экспертописателям"), посмотри его библиотеку, уверен там есть и запись в файл, а если не найдешь то вот библиотека Rosha там тоже запись в файл присутствует (хотя вроде и у тебя , на первый взгляд, нет ошибок):
//+------------------------------------------------------------------+ //| EquityOscillator.mq4 | //| Rosh | //| http://forexsystems.ru/phpBB/ | //+------------------------------------------------------------------+ #property copyright "Rosh" #property link "http://forexsystems.ru/phpBB/" int eo_Bars,ExtHandle; //double //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init () { ExtHandle=FileOpen("Equity.csv",FILE_WRITE | FILE_CSV,";"); return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- if(ExtHandle>0) FileClose(ExtHandle); //---- return(0); } //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ void WriteEquity() { double eo_AOPLong, eo_AOPShort; double eo_LongLots,eo_ShortLots; int eo_Counter,eo_Total,eo_CurrLongOrders,eo_CurrShortOrders; //---- if (IsTesting()&&(eo_Bars!=Bars)) { eo_Bars=Bars; eo_Total=OrdersTotal(); if (eo_Total>0) { eo_AOPLong=0.0; eo_AOPShort=0.0; eo_LongLots=0.0; eo_ShortLots=0.0; for (eo_Counter=0;eo_Counter<eo_Total;eo_Counter++)// подсчет открытых позиций { OrderSelect(eo_Counter, SELECT_BY_POS, MODE_TRADES); if (OrderType()==OP_BUY) { eo_CurrLongOrders++; eo_AOPLong=eo_AOPLong+OrderLots()*OrderOpenPrice(); eo_LongLots=eo_LongLots+OrderLots(); } if (OrderType()==OP_SELL) { eo_CurrShortOrders++; eo_AOPShort=eo_AOPShort+OrderLots()*OrderOpenPrice(); eo_ShortLots=eo_ShortLots+OrderLots(); } }// подсчет открытых позиций } //--------------- усреднение --------------------- if (eo_CurrLongOrders>0) eo_AOPLong=eo_AOPLong/eo_LongLots; if (eo_CurrShortOrders>0)eo_AOPShort=eo_AOPShort/eo_ShortLots; //Print("eo_AOPLong=",eo_AOPLong," eo_AOPShort=",eo_AOPShort); //--------------- усреднение --------------------- if (eo_Total>0) { if (eo_AOPLong>0) FileWrite(ExtHandle,TimeToStr(Time[1]),(Close[1]-eo_AOPLong)/Point); if (eo_AOPShort>0) FileWrite(ExtHandle,TimeToStr(Time[1]),(eo_AOPShort-Close[1])/Point); if ((eo_AOPShort==0)&&(eo_AOPLong==0)) FileWrite(ExtHandle,TimeToStr(Time[1]),0.0); } } //---- return(0); } //+------------------------------------------------------------------+
у kompostera очень клево получается (ветка называлась что-то типа "экспертописателям"), посмотри его библиотеку, уверен там есть и запись в файл
Уже можно прям на лаврах почивать =)))Там есть, но не в csv, а в txt..
А в цсв есть в новой версии, которую я ещё тестирую - пока не выкладывал $)
Кусок кода:
#include <stdlib.mqh> int start() { int _GetLastError; string file_name = "logs\\" + TimeToStr( LocalTime(), TIME_DATE ) + ".csv"; string text0 = "first string"; string text1 = "0.0123"; string text2 = TimeToStr( LocalTime(), TIME_SECONDS ); int file_handle = FileOpen ( file_name, FILE_READ | FILE_WRITE ); if ( file_handle > 0 ) { FileSeek ( file_handle, 0, SEEK_END ); if ( FileWrite ( file_handle, text0, text1, text2 ) < 0 ) { _GetLastError = GetLastError(); Print( "Ошибка при FileWrite ( ", file_handle, ", \"", text0, "\", \"", text1, "\", \"", text2, "\" ), GetLastError() = ", _GetLastError, ", ErrorDescription = ", ErrorDescription( _GetLastError ) ); } FileClose ( file_handle ); } else { _GetLastError = GetLastError(); Print( "Ошибка при FileOpen( \"", file_name, "\", FILE_READ | FILE_WRITE ), GetLastError() = ", _GetLastError, ", ErrorDescription = ", ErrorDescription( _GetLastError ) ); } }
Уже можно прям на лаврах почивать =)))
Компостер молодца :) !!!
Вот реальная программа с помощью которой я конвертировал файлы котировок из формата МТ3 бид/аск в формат МТ4 бид. Оба файла должны быть в формате csv и иметь расширение csv.
extern double deltaO=-1; extern double deltaH=-3; extern double deltaL= 0; extern double deltaC=-1; extern string FileInput; extern string FileOutput; string NumberStr; string DateStr; string TimeStr; string DateLong; datetime Date; double O; double H; double L; double C; double V; int FHin; int FHout; bool FileLineEnd=false; bool FileEnd=false; bool Work=true; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if (Work==false) return(0); FHin= FileOpen (FileInput,FILE_CSV,","); FHout=FileOpen(FileOutput,FILE_CSV|FILE_WRITE,","); while (FileIsEnding(FHin)==false) { DateStr=FileReadString(FHin); TimeStr=FileReadString(FHin); NumberStr=FileReadString(FHin); O=StrToDouble(NumberStr); O=O+deltaO*Point; NumberStr=FileReadString(FHin); H=StrToDouble(NumberStr); H=H+deltaH*Point; NumberStr=FileReadString(FHin); L=StrToDouble(NumberStr); L=L+deltaL*Point; NumberStr=FileReadString(FHin); C=StrToDouble(NumberStr); C=C+deltaC*Point; NumberStr=FileReadString(FHin); V=StrToDouble(NumberStr); if (O>H) O=H; if (C>H) C=H; if (O<L) O=L; if (C<L) C=L; FileWrite(FHout,DateStr,TimeStr,DoubleToStr(O,4),DoubleToStr(H,4), DoubleToStr(L,4),DoubleToStr(C,4),DoubleToStr(V,0)); } FileClose(FHin); FileClose(FHout); Work=false; //---- return(0); }
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
К примеру. Вот код , как я вижу, работы с файлом.