Торговые системы: Использование платформы MetaTrader 4 для выявления благоприятных временных окон (паттернов времени)

 

New article Использование платформы MetaTrader 4 для выявления благоприятных временных окон (паттернов времени) has been published:

Анализ паттернов времени может применяться для рынка Форекс с целью определения наилучшего времени для открытия сделок, а также периодов, когда не следует торговать вовсе. В данном случае мы используем торговую платформу MetaTrader 4 для анализа истории и оптимизации результатов, которые могут быть использованы в механических торговых системах.

Чтение интервью, опубликованных на сайте Чемпионата Automated Trading Championship, обнаруживает много интересной информации, скрытой в рассуждениях.

В интервью Уильяма Ботрайта (Wackena) (https://championship.mql5.com/2012/ru/news) меня заинтересовала идея анализа времени для выявления одного единственного часа в сутки для совершения одной единственной сделки при свинговой торговле.

Поэтому я начал собирать информацию об исследованиях анализа времени для определения благоприятных точек входа в рынок. Более того, я решил реализовать систему, которая могла бы подтвердить эффективность подобной методики.

В конце статьи приводится код советника. В нем отсутствует стратегия выхода, однако он приведен здесь только как пример временных паттернов, которые можно получить, анализируя данные и проводя статистические исследования с помощью MetaTrader 4.

Author: Giampiero Raschetti

 
//+------------------------------------------------------------------+ 
//| FILTER BLOCK MODULES 
//+------------------------------------------------------------------+ 
bool BlockTradingFilter1() 
{
 bool BlockTrade=false;  //trade by default 
 if (UseHourTrade) 
 { 
   if( !(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute()<= 3) ) 
     { 
      //  Comment("Non-Trading Hours!"); 
      BlockTrade=true; 
     } 
  } 
 return (BlockTrade);  
}
Не очень понял к чему в условии    if( !(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute()<= 3) )   минуты,  и как быть например с интервалом часов 22 - 5... Жаль, что атор не выложил исходники, может было бы понятнее...
 
There is a check at the beginning that sounds like this:
   if(ToHourTrade < FromHourTrade)
      return(0);
And the 3 minutes tollerance is in accordance with the 15M time frame.
 

Добавление уровня Stop Loss на основе временного подхода


Возможно перевод не точен, но судя по коду входной параметр TradeHoldingPeriod приводит нашу убыточную позу к закрытию по истечению времени:
               if(UseTimeBasedStopLoss && TimeHour(TimeCurrent() - OrderOpenTime()) >= TradeHoldingPeriod && OrderProfit() < 0 )
                 {
                   OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position!!
                   return(0);
                 }
 

Оптимизировал советник, для EURUSD, NZDUSD, USDJPY, прогнал через истоию при помощи визуализации и был шокирован результатами.

Я много видел советников, ломал голову над своими, но как по мне, это самый уникальный советник, без нейросетей.

Протестирую на демо, выложу результаты. Если результаты будут такие же как и на тесте, выложу свои оптимизированные значения.

 
Надо бы некоторые мелочи подправить, как например, закрытие позиции Sell по цене Bid:
if(OrderType() == OP_BUY) 
 {
   // check profit and set trailing stops
              
   if(UseTimeBasedStopLoss && TimeHour(TimeCurrent() - OrderOpenTime()) >= TradeHoldingPeriod && OrderProfit() < 0 )
    {
      OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position!!
      return(0);
     }
  }
else // PROCESS SELL ORDER
 {
   // check profit and set trailing stops
 
   if(UseTimeBasedStopLoss && TimeHour(TimeCurrent() - OrderOpenTime()) >= TradeHoldingPeriod && OrderProfit() < 0 )
     {
       OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position!!
       return(0);
      }
  }
 
Scriptong:
Надо бы некоторые мелочи подправить, как например, закрытие позиции Sell по цене Bid:


Спасибо за замечание. Поправлено.
 

Что-то я немного запутался, подскажите плиз.

Нужно к графику подключать индикаторы или нет?

Просто я чего спрашиваю:

Оптимизировал для USDJPY. Вход в рынок в 9-00, а советних не открыл ни одного ордера.

Вот меня и терзают смутные сомнения, может я что-то не так сделал.

 

 

Этот график я получил за 2007г просто добавив в советник возможность выставления процентного лота. Старт с 10000. Лично я в шоке.

double LotSize()
{
    double one_lot,min_lot,step_lot;
    double value;
    one_lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);    // залог на 1 лот
    min_lot=MarketInfo(Symbol(),MODE_MINLOT);            // минимальный размер лота
    step_lot=MarketInfo(Symbol(),MODE_LOTSTEP);          // шаг изменения лота
 
    value=(AccountFreeMargin()/100*Procent)/one_lot;
    value=NormalizeDouble((value-min_lot)/step_lot,0);   // нормализация лота
    value=min_lot+value*step_lot;
 
    return (value);
}

Вызов функции производить в месте использования lots.

extern int Procent=5; // процент ставки от свободного депо
Это вставить в начале вместо объявления lots.
 
Chipito:

Что-то я немного запутался, подскажите плиз. Нужно к графику подключать индикаторы или нет? Просто я чего спрашиваю: Оптимизировал для USDJPY.  Вход в рынок в 9-00, а советних не открыл ни одного ордера.Вот меня и терзают смутные сомнения, может я что-то не так сделал.


Нет, подключать ничего не надо. Просто открывает он не каждый день.
 
Можно выложить работающий вариант этого советника?
Причина обращения: