Инверсия торгвых приказов ведет к Граалю? - страница 2

 
Ihor Herasko:


Соль в этом, все же, есть. И дело вовсе не в объемах, а в том, что своим намерением мы всегда влияем на события. Чтобы понять, о чем речь идет, вспомните про корпускулярно-волновой дуализм электронов (хорошо показан в мультипликационной вставке фильма "Вниз по кроличьей норе"). То есть если бы была возможность вернуться в то время, которое мы тестируем, и совершить действие на основании знания о последующем движении цены, то это действие вызвало бы другую реакцию рынка. Возможно не полностью противоположное, но конфигурация цены немного изменилась бы.

Ну а по теме - в любом случае интересно. Ведь даже в тестере получить идеальную кривую баланса - это достижение.

Всё правильно.

Даже если получится идеальная кривая баланса в тестере, то печалька на реале настанет на пересечении 2-х линий, одна из которых - цена, вторая - линия индикатора. Совсем не важно при этом - какой индикатор использовать.

 

Небольшая задержка, сорри.

Итак, тестировал на небольшом периоде 2017.05.01-2017.06.03, достаточно, чтобы понять, что мы имеем - слив или профит. Пара EURUSD, M1, Каждый тик на основе реальных тиков. Все параметры по умолчанию, в т.ч. и для оптимизации

Обычный "\MQL5\Experts\Examples\Moving Average\Moving Average.mq5" прибыль=-6616


Реверсный "c:\Forex\School\MT5-Hedge\MQL5\Experts\Examples\Moving Average\Moving Average Reverse.mq5" прибыль=-7492


Файлы отчетов 

Файлы:
MA_Direct.zip  200 kb
MA_Rev.zip  200 kb
 
Сейчас выложу исходники и расскажу, что где менять для непрограммистов, можете сами повозиться. 10 мин подождите плз.
 

Что и как меняем в исходниках для реверса

В оригинале имеем следующие строки в функции проверки на открытие ордера, строки 107-113 в редакторе

107   if(rt[0].open>ma[0] && rt[0].close<ma[0])
108      signal=ORDER_TYPE_BUY;    
109   else
110     {
111      if(rt[0].open<ma[0] && rt[0].close>ma[0])
112         signal=ORDER_TYPE_SELL;  
113     }

 Все, что нужно, это заменить ORDER_TYPE_BUY на ORDER_TYPE_SELL  и наоборот

   if(rt[0].open>ma[0] && rt[0].close<ma[0])
      signal=ORDER_TYPE_SELL;    // sell conditions
   else
     {
      if(rt[0].open<ma[0] && rt[0].close>ma[0])
         signal=ORDER_TYPE_BUY;  // buy conditions
     }

Прилагаю файлы 

Файлы:
 

Забыл про закрытие ордеров написать, пусть будет отдельно, так понятнее

В оригинале имеем такой код, кстати, в тестах я его не менял, можно попробовать и тут сделать реверс

149   if(type==(long)POSITION_TYPE_BUY   && rt[0].open>ma[0] && rt[0].close<ma[0])
150      signal=true;
151   if(type==(long)POSITION_TYPE_SELL  && rt[0].open<ma[0] && rt[0].close>ma[0])
152      signal=true;

Для реверса делаем взаимозамену POSITION_TYPE_BUY и POSITION_TYPE_SELL

   if(type==(long)POSITION_TYPE_SELL   && rt[0].open>ma[0] && rt[0].close<ma[0])
      signal=true;
   if(type==(long)POSITION_TYPE_BUY  && rt[0].open<ma[0] && rt[0].close>ma[0])
      signal=true;

ВНИМАНИЕ: Все изменения делайте на копии исходного файла, а не на оригинале!


 
Долбился-долбился всю неделю с одним советником прям как дятел,поражало как он сливает, думал ну вот сейчас тебя переверну и берегись рейтинг форбс,ага...в итоге оптимальным решением оказалось поставить советник на старый добрый 4ех знак и правильно подобрать SL и TP.
 
А замена в ордере SL на TP?
 
Younga:
А замена в ордере SL на TP?


Они в этом эксперте по нулям, он сам закрывает ордера. См. два нуля в самом конце параметров функции - это ТП и СЛ

if(signal!=WRONG_VALUE)
     {
      if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         ExtTrade.PositionOpen(_Symbol,signal,TradeSizeOptimized(),
                               SymbolInfoDouble(_Symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),
                               0,0);
 
Запустил на ночь оптимизацию стандартного эксперта МА по всем параметрам. Пока лучшая прибыль = -1730 )))))))) Знатный штатный сливатор ))
 
Ну тогда да - все правильно. Значит анализ  -слив по спреду или нет