у 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);
}
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
К примеру. Вот код , как я вижу, работы с файлом.
int handle; handle=FileOpen("Lots.csv",FILE_CSV|FILE_READ| FILE_WRITE,","); if(handle<1) { Print("File my_data.dat not found, the last error is ", GetLastError()); return(false); } str=FileReadString(handle); FileWrite(handle, "1"); FileClose(handle);