Скрипт для вывода дневного/недельного профита в файл .csv
//+------------------------------------------------------------------+ //| DayProfit.mq5 | //| Maxim A.Kuznetsov | //| https://www.luxtrade.tk | //+------------------------------------------------------------------+ #property copyright "Maxim A.Kuznetsov" #property link "https://www.luxtrade.tk" #property version "1.00" #property script_show_inputs input string FILE_NAME="stat.csv"; // Filename: input bool WEEKLY_STAT=false; // Weekly? #include <MT4Orders.mqh> class DayStat { public: DayStat(); public: datetime daytime; // время открытия дня/недели double profit; // суммарный профит }; DayStat::DayStat() { daytime=0; profit=0; } DayStat *STAT[]; // статитика по дням DayStat *FindDayStat(datetime time) { for(int i=ArraySize(STAT)-1;i>=0;i--) { if (time>=STAT[i].daytime && time<STAT[i].daytime+(WEEKLY_STAT?7*24*60*60:24*60*60)) { return STAT[i]; } } int id=ArraySize(STAT); ArrayResize(STAT,id+1); STAT[id]=new DayStat; MqlDateTime dt; TimeToStruct(time,dt); dt.hour=dt.min=dt.sec=0; STAT[id].daytime=StructToTime(dt); if (WEEKLY_STAT) STAT[id].daytime-=dt.day_of_week*24*60*60; return STAT[id]; } int SortDayStat(int &index[]) { int total=ArraySize(STAT); ArrayResize(index,total); for(int i=0;i<total;i++) { index[i]=i; } for(int i=1;i<total;i++) { for(int j=0;j<i;j++) { if (STAT[index[i]]==NULL || STAT[index[j]]==NULL) continue; if (STAT[index[i]].daytime<STAT[index[j]].daytime) { int tmp=index[i]; index[i]=index[j]; index[j]=tmp; } } } return total; } void OnStart() { for(int pos=OrdersHistoryTotal()-1;pos>=0;pos--) { if (!OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)) { Alert("OrderSelect() failed"); continue; } int type=OrderType(); if (type!=OP_BUY && type!=OP_SELL) continue; DayStat *stat=FindDayStat(OrderCloseTime()); stat.profit+=OrderProfit()+OrderSwap()+OrderCommission(); } int index[]; int total=SortDayStat(index); int handle=FileOpen(FILE_NAME,FILE_WRITE|FILE_SHARE_READ|FILE_TXT|FILE_ANSI,',',CP_UTF8); if (handle==INVALID_HANDLE) { Alert("FileOpen() failed"); return; } for(int i=0;i<total;i++) { FileWriteString(handle,StringFormat("%s ; %s\n",IntegerToString(STAT[i].daytime),DoubleToString(STAT[i].profit,2)) ); } FileClose(handle); for(int i=ArraySize(STAT)-1;i>=0;i--) { delete STAT[i]; } }
результат можно загружать в электронные таблицы или отдельно анализировать/строить графики
файл инструкций gnuplot вышеприведённого графика:
set ylabel "Profit"
set xlabel "Date"
set xdata time
set timefmt "%s"
set format x "%m/%d/%Y"
set datafile separator ';'
plot 'stat.csv' using 1:2 with linespoint
pause -1
Бинарник ex5 и его исходник прилагаю. plt не прикладывается
Файлы:
DayProfit.ex5
61 kb
DayProfit.mq5
6 kb