Диссертация (1152468), страница 33
Текст из файла (страница 33)
Целевая функцияоптимтизации – «balance»*Обучающее множество (01.10.17 – 31.10.17)КоличеМетодПрибыль,Просадка,ствосортировкидолл.долл.сделокПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыль23,9021,0922,5622,6822,6922,7022,9622,8623,2623,4623,9051319333618545110,547,457,467,477,477,477,547,467,547,4610,54Тестовое множество (01.11.17 – 30.11.17)КоличеПрибыль,Просадка,Балансстводолл.долл.сделок2,272,833,023,043,043,043,053,063,083,142,278,732,180,81-10,27-10,278,755,140,8110,752,118,736121322261354615,111,9411,4111,7611,760,242,7711,412,7711,785,11 Источник: Составлено авторомТаблица Т.2 – Целевая функция оптимтизации – «drawdown percent»*Обучающее множество (01.10.17 – 31.10.17)КоличеМетодПрибыль,Просадка,ствосортировкидолл.долл.сделокПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыль18,6519,3519,3517,5117,6117,6217,7919,0820,3325,1218,6555542236124511,7211,7311,399,706,696,696,667,077,117,4611,72 Источник: Составлено авторомТестовое множество (01.11.17 – 30.11.17)КоличеПрибыль,Просадка,Балансстводолл.долл.сделок1,591,651,701,812,632,632,672,702,863,371,599,45-1,10-5,47-2,86-8,92-10,26-6,70-9,00-18,99-5,909,454564221512543,4311,4911,8012,1110,4011,758,0515,2620,4611,483,43215Таблица Т.3 – Целевая функция оптимтизации – «expected payoff»*Обучающее множество (01.10.17 – 31.10.17)КоличеМетодПрибыль,Просадка,ствосортировкидолл.долл.сделокПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыль20,5219,3519,3719,4220,5421,1321,9221,0822,5523,8220,52365555853543612,7011,3911,3911,3910,079,298,507,457,467,4612,70Тестовое множество (01.11.17 – 30.11.17)КоличеПрибыль,Просадка,Балансстводолл.долл.сделок1,621,701,701,712,042,272,582,833,023,191,6225,60-0,84-6,250,66-6,2510,6611,422,18-4,56-5,9025,648665686255483,1011,8011,7811,7811,481,644,571,9411,4811,783,10 Источник: Составлено авторомТаблица Т.4 – Целевая функция оптимтизации – «profit factor»*Обучающее множество (01.10.17 – 31.10.17)КоличеМетодПрибыль,Просадка,ствосортировкидолл.долл.сделокПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыльПрибыль18,7819,0219,3219,0517,8619,3620,7421,0720,3328,9918,786656639831248611,7311,7311,7311,397,547,477,467,457,118,4111,73 Источник: Составлено авторомТестовое множество (01.11.17 – 30.11.17)КоличеПрибыль,Просадка,Балансстводолл.долл.сделок1,601,621,651,672,372,592,782,832,863,451,609,46-7,33-7,33-3,285,141,952,182,09-23,2229,959,46488862024125942,6711,2211,2211,222,778,981,2811,4924,003,102,67216Приложение У(справочное)Рисунок У.1 – Свидетельство о государственной регистрации программы дляЭВМИсточник: Составлено автором217Приложение Ф(справочное)Таблица Ф.1 – MQL код торгового советника ТС4*#property copyright "Musin Artur" #property link amusin@nes.ru #property version "1.00" #property strict//--- input parameters#define MAGICMA 4input int FHorizon, time; input double a1,a2,a3,a4; input int period; input double tres; input int st,bt; input double Lots; input int stoploss,takeprofit;input color BuyColor=clrLime; input color SellColor=clrRed;#include <stderror.mqh> #include <stdlib.mqh>void start(){if(Bars<1 || IsTradeAllowed()==false) return; if (CalculateCurrentOrdersBuy()==0 && CalculateCurrentOrdersSell()==0){if(Model()==1)CheckForOpenBuy(); else if(Model()==-1)CheckForOpenSell(); return;} if (FHorizon==1){if (Time[0]>=OrderOpenTime()+time){ if (CalculateCurrentOrdersBuy()!=0) CheckForCloseBuy();else if (CalculateCurrentOrdersSell()!=0)CheckForCloseSell();return;}}if (FHorizon==0){ if (CalculateCurrentOrdersBuy()!=0 && Model()==-1){ CheckForCloseBuy(); CheckForOpenSell();} else if(CalculateCurrentOrdersSell()!=0 && Model()==1){ CheckForCloseSell(); CheckForOpenBuy();} return;}}double OnTester(){double BR; if (TesterStatistics(STAT_TRADES)!=0)BR=NormalizeDouble(TesterStatistics(STAT_PROFIT)/TesterStatistics(STAT_BALANCE_DD),0); else BR=0; return (BR);}double Model(){int k; double max; double min; double dmax; double dmin; double ytyt; double ryt; double avdyt; double vol; int CCId; int direction; int techndirection;vol=iStdDev(NULL,0,period,0,MODE_SMA,PRICE_MEDIAN,1); if (vol<tres) {k++;avdyt=0;ytyt=0;ryt=0;} else {double yr1=iMA(NULL,0,13,0,MODE_EMA,PRICE_MEDIAN,0);double yr2=iMA(NULL,0,13,0,MODE_EMA,PRICE_MEDIAN,1);double yr3=iMA(NULL,0,13,0,MODE_EMA,PRICE_MEDIAN,2);double yr4=iMA(NULL,0,13,0,MODE_EMA,PRICE_MEDIAN,3);avdyt=((yr1-yr2)+(yr3-yr4))/2; ytyt=(yr1-Open[0]);max=iHighest(NULL,0,MODE_HIGH,k,0); min=iLowest(NULL,0,MODE_LOW,k,0); dmax=MathAbs(Open[0]-max);dmin=MathAbs(Open[0]-min);if(dmax>dmin)ryt=(max-Open[0]);else ryt=(min-Open[0]);k=1;} double CCI = iCustom(Symbol(),0,"CCI",14,0,1); if (CCI>100) CCId=-1;else if (CCI<-100) CCId=1; if(CCId>0) techndirection=1; if(CCId<0) techndirection=-1; if(ytyt>0){ytyt=1;}if(ytyt<0){ytyt=-1;}if(ryt>0){ryt=1;}if(ryt<0){ryt=-1;} if(avdyt>0){avdyt=1;}if(avdyt<0){avdyt=-1;}if (a1*ytyt+a2*ryt+a3*avdyt+a4*techndirection>=bt) direction=1;if (a1*ytyt+a2*ryt+a3*avdyt+a4*techndirection<=bt) direction=-1; return(direction);}int CalculateCurrentOrdersBuy(){int buys=0; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS)==true){if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGICMA && OrderType()==OP_BUY) buys++;} } return(buys);}int CalculateCurrentOrdersSell(){int sells=0; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS)==true){if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGICMA && OrderType()==OP_SELL) sells++; }} return(sells);}void CheckForOpenBuy(){int res; double SL; double TP; if(Volume[0]>1) return; if (stoploss>0) SL=Ask-Point*stoploss; else SL=0; if (takeprofit>0)TP=Ask+Point*takeprofit; else TP=0; while (CalculateCurrentOrdersBuy()==0) { if(DayOfWeek()>0) {res=OrderSend(Symbol(),OP_BUY,Lots,Ask,100,SL,TP,"ТС4",MAGICMA,0,BuyColor); if(res<0){Print("Ошибка открытия ордера SELL #",GetLastError()); Sleep(10000); return;}} return;}}void CheckForOpenSell(){int res; double SL; double TP; if(Volume[0]>1) return; if (stoploss>0) SL=Bid+Point*stoploss; else SL=0;if (takeprofit!=0) TP=Bid-Point*takeprofit; else TP=0; while (CalculateCurrentOrdersSell()==0){if(DayOfWeek()>0) {res=OrderSend(Symbol(),OP_SELL,Lots,Bid,100,SL,TP,"ТС4",MAGICMA,0,SellColor); if(res<0){Print("Ошибка открытия ордера SELL #",GetLastError()); Sleep(10000); return; }} return;}}void CheckForCloseBuy(){while (CalculateCurrentOrdersBuy()!=0){for(int i=0; i<OrdersTotal(); i++){ OrderSelect(i, SELECT_BY_POS);if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGICMA && OrderType()==OP_BUY){OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 100, SellColor ); break;} }} return;}void CheckForCloseSell(){while (CalculateCurrentOrdersSell()!=0){for(int i=0; i<OrdersTotal(); i++){OrderSelect(i, SELECT_BY_POS); if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGICMA && OrderType()==OP_SELL){OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 100, BuyColor ); break;}}} return;} Источник: Составлено автором.