Генератор стейта по событию.

 

Представляю функцию StatOnEvent(); генерирующую файл стейта (отчёта) истории счёта по событию.

На каждом событии создаётся отдельный файл по имени образованным различными алгоритмами.

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

А сам пример оформлен в виде скрипта вызывающий эту функцию...

//+--- Скрипт.  стейт_по_событию.mq4 -----------------------------+
void start()
{
StatOnEvent();
}

//======================================================================================
void StatOnEvent()
{
int handle, slot, ncena;
string sim, typ, tabhid;
string name=AccountNumber()+"_"+Year()+Month()+Day()+"_"+Hour()+Minute()+Seconds()+".csv";
handle=FileOpen(name,FILE_CSV|FILE_WRITE,';');
//---- хидер таблицы ---
tabhid="Ticket;Open Time;Type;Lots;Item;Price;S/L;T/P;Close Time;Price;Commission;Taxes;Swap;Profit;Comment;MagicNumber";
FileWrite(handle,tabhid);
//---- запись строк таблицы ------------------------------------------------------------\\
for(int i=0; i<OrdersHistoryTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
sim=OrderSymbol();
slot=0;
if(MarketInfo(sim,MODE_MINLOT)==0.1)  slot=1;
if(MarketInfo(sim,MODE_MINLOT)==0.01) slot=2;
ncena=0;
if(MarketInfo(sim,MODE_DIGITS)==1) ncena=1;
if(MarketInfo(sim,MODE_DIGITS)==2) ncena=2;
if(MarketInfo(sim,MODE_DIGITS)==3) ncena=3;
if(MarketInfo(sim,MODE_DIGITS)==4) ncena=4;
if(MarketInfo(sim,MODE_DIGITS)==5) ncena=5;
//ncena=ncena+2; //добавка разрядов для ролловера
typ="na";
if(OrderType()==0) typ="buy";
if(OrderType()==1) typ="sell";
if(OrderType()==2) typ="buy-limit";
if(OrderType()==3) typ="sell-limit";
if(OrderType()==4) typ="buy-stop";
if(OrderType()==5) typ="sell-stop";
if(OrderType()==6) typ="balance";
//---
FileWrite(handle,StringConcatenate(
   OrderTicket()+";",
   TimeToStr(OrderOpenTime(),TIME_DATE|TIME_SECONDS),";",
   typ,";",
   DoubleToStr(OrderLots(),slot),";",
   sim,";",
   DoubleToStr(OrderOpenPrice(),ncena),";",
   OrderStopLoss(),";",
   OrderTakeProfit(),";",
   TimeToStr(OrderCloseTime(),TIME_DATE|TIME_SECONDS),";",
   DoubleToStr(OrderClosePrice(),ncena),";",
   DoubleToStr(OrderCommission(),2),";",
   "na",";",
   DoubleToStr(OrderSwap(),2),";",
   DoubleToStr(OrderProfit(),2),";",
   OrderComment(),";",
   OrderMagicNumber(),";"));
}
//--- конец строк таблицы ---
FileWrite(handle,"profit");
FileWrite(handle,"Local;"+TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)+ ";");  
//---
FileClose(handle);
}
//+--- конец фильма v.1.0 --------------------------------------+

Файлы сохраняются в стандартной папке \files терминала, однако имеется масса вариантов "разложить их по полочкам".

Это достигается путём добавления в имени обратных слешей формирующие папки, если те не существуют, то создаются.

string name=AccountNumber()+"\\"+Year()+"\\"+Month()+Day()+"_"+Hour()+Minute()+Seconds()+".csv";
//string name="neoo\\"+AccountNumber()+"_"+Year()+Month()+Day()+"_"+Hour()+Minute()+Seconds()+".csv";

Например:

.\номер_счёта

..\год

...\месяц


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