Диссертация (1152468), страница 31
Текст из файла (страница 31)
Равные интервалыастрономического времениИсточник: Составлено авторомРисунок Ж.2 – Остатки модели 1 дляUSDJPY. Равные интервалырыночного времениИсточник: Составлено авторомРисунок Ж.3 – Автокорреляционная функцияостатков модели 1 для USDJPY. Равныеинтервалы астрономического времениИсточник: Составлено авторомРисунок Ж.4 – Автокорреляционная функцияостатков модели 1 для USDJPY. Равныеинтервалы рыночного времениИсточник: Составлено автором193Рисунок Ж.5 – Остатки модели 2 дляUSDJPY. Равные интервалыастрономического времениИсточник: Составлено авторомРисунок Ж.6 – Остатки модели 2 дляUSDJPY.
Равные интервалырыночного времениИсточник: Составлено авторомРисунок Ж.7 – Автокорреляционная функцияостатков модели 2 для USDJPY. Равныеинтервалы астрономического времениИсточник: Составлено авторомРисунок Ж.8 – Автокорреляционная функцияостатков модели 2 для USDJPY. Равныеинтервалы рыночного времениИсточник: Составлено авторомРисунок Ж.9 – Остатки модели 3 дляUSDJPY. Равные интервалыастрономического времениИсточник: Составлено авторомРисунок Ж.10 – Остатки модели 3 дляUSDJPY.
Равные интервалырыночного времениИсточник: Составлено автором194Рисунок Ж.11 – Автокорреляционнаяфункция остатков модели 3 для USDJPY.Равные интервалыастрономического времениИсточник: Составлено авторомРисунок Ж.12 – Автокорреляционнаяфункция остатков модели 3 для USDJPY.Равные интервалырыночного времениИсточник: Составлено авторомТаблица Ж.1 – Тест Дикки-Фуллера для остатков моделей 1 – 3, оцененныхфильтром Калмана*МодельМодель 1Модель 2Модель 3ПараметрADF статистикаp-значениеADF статистикаp-значениеADF статистикаp-значениеАстрономическое время-169,660,00-194,560,00-233,970,00 Источник: Составлено авторомРыночное время-256,340,00-359,290,00-462,440,00195Приложение И(справочное)Рисунок И.1 – Остатки модели 1 дляUSDJPY.
Равные интервалыастрономического времениИсточник: Составлено авторомРисунок И.2 – Остатки модели 1 дляUSDJPY. Равные интервалырыночного времениИсточник: Составлено авторомРисунок И.3 – Автокорреляционная функцияостатков модели 1 для USDJPY. Равныеинтервалы астрономического времениИсточник: Составлено авторомРисунок И.4 – Автокорреляционная функцияостатков модели 1 для USDJPY. Равныеинтервалы рыночного времениИсточник: Составлено автором196Рисунок И.5 – Остатки модели 2 дляUSDJPY. Равные интервалыастрономического времениИсточник: Составлено авторомРисунок И.6 – Остатки модели 2 дляUSDJPY.
Равные интервалырыночного времениИсточник: Составлено авторомРисунок И.7 – Автокорреляционная функцияостатков модели 2 для USDJPY. Равныеинтервалы астрономического времениИсточник: Составлено авторомРисунок И.8 – Автокорреляционная функцияостатков модели 2 для USDJPY. Равныеинтервалы рыночного времениИсточник: Составлено авторомРисунок И.9 – Остатки модели 3 дляUSDJPY. Равные интервалыастрономического времениИсточник: Составлено авторомРисунок И.10 – Остатки модели 3 дляUSDJPY. Равные интервалырыночного времениИсточник: Составлено автором197Рисунок И.11 – Автокорреляционнаяфункция остатков модели 3 для USDJPY.Равные интервалыастрономического времениИсточник: Составлено авторомРисунок И.12 – Автокорреляционнаяфункция остатков модели 3 для USDJPY.Равные интервалырыночного времениИсточник: Составлено авторомТаблица И.1 – Тест Дикки-Фуллера для остатков моделей 1 – 3, оцененныхфильтром Калмана со встроенной нейронной сетью*МодельМодель 1Модель 2Модель 3ПараметрADF статистикаp-значениеADF статистикаp-значениеADF статистикаp-значениеАстрономическое время-152,190,00-296,610,00-386,940,00 Источник: Составлено авторомРыночное время-277,940,00-531,920,00-704,940,00198Приложение К(справочное)Таблица К.1 – MQL код торгового советника ТС1*#property copyright "Musin Artur" #property link amusin@nes.ru #property version "1.00" #property strict//--- input parameters #define MAGICMA 1input int FHorizon, CMechanism, time; input double a1,a2,a3,st,bt,tres;input int period; input double Lots; input int stoploss,takeprofit; input color BuyColor=clrLime; input color#include <stderror.mqh> #include <stdlib.mqh>SellColor=clrRed;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, min, dmax, dmin, ytyt, ryt, avdyt, vol; int direction;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;}if (CMechanism==1){ if (a1*ytyt+a2*ryt+a3*avdyt>0) direction=1; if (a1*ytyt+a2*ryt+a3*avdyt<0) direction=-1;}else if (CMechanism==0){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>=bt) direction=1; if (a1*ytyt+a2*ryt+a3*avdyt<=st) 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, TP; if(Volume[0]>1) return; if (stoploss>0) SL=Ask-Point*stoploss; else SL=0; if (takeprofit>0) TP=Ask+Point*takeprofit; elseTP=0; while (CalculateCurrentOrdersBuy()==0){ if(DayOfWeek()>0){res=OrderSend(Symbol(),OP_BUY,Lots,Ask,100,SL,TP,"ТС1",MAGICMA,0,BuyColor); if(res<0){Print("Ошибка открытия ордера SELL #",GetLastError());Sleep(10000); return;}} return;}}void CheckForOpenSell() {int res; double SL, 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,"ТС1",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;} Источник: Составлено автором199Приложение Л(справочное)Таблица Л.1 – MQL код торгового советника ТС2*#property copyright "Musin Artur" #property link amusin@nes.ru #property version "1.00" #property strict//--- input parameters #define MAGICMA 2input int FHorizon, time, st,bt; input double Lots; input int stoploss,takeprofit; input color BuyColor=clrLime; input color#include <stderror.mqh> #include <stdlib.mqh>SellColor=clrRed;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 RSId; int STOCHd; int MACDd; int CCId; int direction;double RSI = iCustom(Symbol(),0,"RSI",14,0,1); if (RSI>70) RSId=-1; else if (RSI<30) RSId=1;double STOCH = iCustom(Symbol(),0,"Stochastic",9,6,3,0,1); if (STOCH>80) STOCHd=-1; else if (STOCH<20) STOCHd=1;double MACD = iCustom(Symbol(),0,"MACD",12,26,9,0,1); if (MACD<0) MACDd=-1; else if (MACD>0) MACDd=1;double CCI = iCustom(Symbol(),0,"CCI",14,0,1); if (CCI>100) CCId=-1; else if (CCI<-100) CCId=1;if (RSId+STOCHd+MACDd+CCId>=bt) direction=1; if (RSId+STOCHd+MACDd+CCId<=st) 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,"ТС2",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,"ТС2",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;} Источник: Составлено автором200Приложение М(справочное)Таблица М.1 – MQL код торгового советника ТС3*#property copyright "Musin Artur" #property link amusin@nes.ru #property version "1.00" #property strict//--- input parameters #define MAGICMA 3 input double Lots=0.01;input int dealsnumber, period1, period2; input color BuyColor=clrLime; input color SellColor=clrOrangeRed;#include <stderror.mqh> #include <stdlib.mqh>void start(){if(Bars<1 || IsTradeAllowed()==false) return;if(Searchtrend()==1 && CalculateCurrentOrdersSell()==0 && (CalculateCurrentOrdersBuy()==0 || Averagerate()>Close[0](MarketInfo(Symbol(),MODE_SPREAD)*Point)/2)) CheckForOpenBuy();if(Searchtrend()==-1 && CalculateCurrentOrdersBuy()==0 && (CalculateCurrentOrdersSell()==0 ||Averagerate()<Close[0]+(MarketInfo(Symbol(),MODE_SPREAD)*Point)/2)) CheckForOpenSell();if(CalculateCurrentOrdersBuy()!=0 && (CalculateCurrentOrdersBuy()==dealsnumber || Averagerate()<Close[0](MarketInfo(Symbol(),MODE_SPREAD)*Point)/2)) CheckForCloseBuy();if(CalculateCurrentOrdersSell()!=0 && (CalculateCurrentOrdersSell()==dealsnumber ||Averagerate()>Close[0]+(MarketInfo(Symbol(),MODE_SPREAD)*Point)/2)) CheckForCloseSell(); }int CalculateCurrentOrdersBuy() {int buys=0; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS)==true) {if (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 (OrderType()==OP_SELL) sells++; } } return(sells);}int Searchtrend() {double ma1, ma2, ang, trend; ma1=iMA(NULL,0,period1,0,MODE_SMMA,PRICE_MEDIAN,1);ma2=iMA(NULL,0,period2,0,MODE_SMMA,PRICE_MEDIAN,2); ang=MathLog(ma1/ma2); if (ang>0) trend=1; if (ang<0) trend=-1; return (trend);}void CheckForOpenBuy() {int res; if(Volume[0]>1) return; if(DayOfWeek()>=0 && Close[1]<Open[1]) {res=OrderSend(Symbol(),OP_BUY,Lots,Ask,100,0,0,"ТС3",MAGICMA,0,BuyColor); if(res<0){Print("Ошибка открытия ордера SELL #",GetLastError()); Sleep(10000); return; }}}void CheckForOpenSell() {int res; if(Volume[0]>1) return; if(DayOfWeek()>=0 && Close[1]>Open[1]) {res=OrderSend(Symbol(),OP_SELL,Lots,Bid,100,0,0,"ТС3",MAGICMA,0,SellColor); if(res<0){Print("Ошибка открытия ордера SELL #",GetLastError()); Sleep(10000); return; }}}double Averagerate() {double rate=0; double average=0; int k=0; for(int i=0; i<OrdersTotal(); i++){OrderSelect(i, SELECT_BY_POS); k=k+1; rate=rate+OrderOpenPrice(); average=rate/k;} return(average);}void CheckForCloseBuy() {while (CalculateCurrentOrdersBuy()!=0){ for(int i=0; i<OrdersTotal(); i++){OrderSelect(i, SELECT_BY_POS); OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, SellColor ); break;}} return;}void CheckForCloseSell(){while (CalculateCurrentOrdersSell()!=0){ for(int i=0; i<OrdersTotal(); i++) {OrderSelect(i, SELECT_BY_POS);OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, BuyColor ); break; }} return;} Источник: Составлено автором201Приложение Н(справочное)Рисунок Н.1 – Иллюстрация выбора настроек обучения советника ТС1 снеограниченным горизонтом прогнозирования и вычислительным механизмом«присутствия эффекта» (оптимизируемые параметра отмечены зеленой галочкой)Источник: Составлено авторомРисунок Н.2 – Иллюстрация выбора настроек обучения советника ТС1 сограниченным горизонтом прогнозирования и вычислительным механизмом«абсолютного эффекта» (оптимизируемые параметра отмечены зеленой галочкой)Источник: Составлено автором202Рисунок Н.3 – Иллюстрация выбора настроек обучения советника ТС2 снеограниченным горизонтом прогнозирования(оптимизируемые параметры отмечены зеленой галочкой)Источник: Составлено авторомРисунок Н.4 – Иллюстрация выбора настроек обучения советника ТС2 сограниченным горизонтом прогнозирования(оптимизируемые параметры отмечены зеленой галочкочкой)Источник: Составлено автором203Рисунок Н.5 – Иллюстрация выбора настроек обучения советника ТС3(оптимизируемые параметры отмечены зеленой галочкой)Источник: Составлено авторомРисунок Н.6 – Иллюстрация выбора настроек обучения советника ТС4 снеограниченным горизонтом прогнозирования(оптимизируемые параметры отмечены зеленой галочкой)Источник: Составлено автором204Рисунок Н.7 – Иллюстрация выбора настроек обучения советника ТС4 сограниченным горизонтом прогнозирования(оптимизируемые параметры отмечены зеленой галочкой)Источник: Составлено авторомРисунок Н.8 – Иллюстрация выбора целевой функции оптимизации генетическималгоритмом платформы MT 4Источник: Составлено автором205Рисунок Н.9 – Иллюстрация выбора сценария после процедуры обучения напримере советника ТС1Источник: Составлено авторомРисунок Н.10 – Иллюстрация работы советника ТС1Источник: Составлено автором206Приложение П(справочное)Таблица П.1 – Результаты тестирования обученного советника ТС1 в режимеограниченного горизонта прогнозирования.