| Свой критерий оптимизации конечно громко сказано. По большому счету можно просто делать дополнительный фильтр и выбирать более оптимальные занчения. Для этого достаточно в deinit() добавить небольшой код int deinit() { string filename="HMA_stat_"+Symbol()+"_"+Period()+".csv"; bool fex=CheckFile(filename); // Проверка существования файла-отчета int handle=FileOpen(filename,FILE_READ|FILE_WRITE|FILE_CSV); if (fex) // Если файла-отчета нет, то формируем шапку FileWrite(handle,"CountTM","HourStart","HourStop","Паттерн","OP","profit","count","profitplus","countplus","profitminus","countminus","StopL oss_TM","StopLoss_Id","TakeProfit_TM","TakeProfit_Id"); for (int Magic=MagicMin;Magic<=MagicMax;Magic++) { double profit=0; double profitplus=0; double profitminus=0; int count=0; int countplus=0; int countminus=0; for (int j=0;j<OrdersHistoryTotal();j++) { if (!OrderSelect(j,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderMagicNumber()!=Magic) continue; profit+=OrderProfit(); count++; if (OrderProfit()>0) { profitplus+=OrderProfit(); countplus++; } else { profitminus-=OrderProfit(); countminus++; } } if (profitplus>profitminus && countplus>countminus) { FileSeek(handle, 0, SEEK_END); FileWrite(handle,CountTM,HourStart,HourStop,Magic,reversi,profit,count,profitplus,countplus,profitminus,countminus,StopLoss_TM,StopLoss_Id,T akeProfit_TM,TakeProfit_Id); } } FileClose(handle); return(0); } Это как вариант, в данном случае паттерны формируют уникальный магик. И мы получаем отчет по каждому магику отдельной строкой в отчете. Но что попадет в отчет зависит только от этой строки if (profitplus>profitminus && countplus>countminus) Я взял случай когда прибыль больше убытков и количество прибыльных операций больше количества убыточных.
|