Советники: EURUSD breakout

 

EURUSD breakout:

Торговля по двум торговым сессиям с настройкой начала сессий. Stop Loss. Take Profit.

Автор: Vladimir Karputov

 

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

 
Alex_Pushkin:

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


Сама стратегия прописана в этих строках:

//--- it may be a good idea to also avoid NFP days, first thursday in any month. 
   if((!session_found) && (str1.hour==Start_hour_US_session))
     {
      //--- first time through, compute EU session highs and lows.
      TopRange=iHighest(m_symbol.Name(),Period(),MODE_HIGH,24,1); // 24 M15 bars during EU session
      LowRange=iLowest(m_symbol.Name(),Period(),MODE_LOW,24,1);  // 24 M15 bars during EU session
      //---
      if(TopRange<=0.0 || LowRange<=0.0)
         return;
      //---
      if((TopRange-LowRange)<=ExtSmallEUSessionPips)
         small_session=true;
      else
         small_session=false;
      session_found=true;
      string text=(small_session)?"true":"false";
      Print("Identified new EU session + ["+
            DoubleToString(LowRange,m_symbol.Digits())+","+
            DoubleToString(TopRange,m_symbol.Digits())+"]"+
            " DayOfYear()="+IntegerToString(str1.day_of_year)+" small? "+text);
     }

У нас есть входной параметр "Start_hour_US_session" - как только находим соответствие текущего времени (сравниваем только часы) с этим параметром, начинаем искать наибольшие значение максимальных цен за период 24 бара и наименьшее значение минимальных цен за период 24 бара. Если разность этих цен меньше или равно входному параметру "Small EU Session (in pips)" - значит обнаружена "маленькая сессия" (с небольшой волатильностью) - "small_session".



Когда мы находимся внутри "US session" и при этом найдена "маленькая сессия" (с небольшой волатильностью) - "small_session"

   if(session_found && small_session && 
      (str1.hour>=Start_hour_US_session) && (str1.hour<End_hour_US_session)) // Within US session hours?
     {
      //--- Calculate EU session range
      //---  Print("Am in US session... small_session, bought, sold = " + small_session+bought+sold); 
      //---  Print("TopRange = "+ TopRange + "LowRange = " + LowRange); 
      int h=str1.hour;
      int m=str1.min;
      if(h>Start_hour_EU_session+5 && h<Start_hour_EU_session+10)
        {//--- at least one US session bar should be completed
         //--- Print("Could be buying/selling..."+h+":"+m); 
         double low=iLow(1);
         double high=iHigh(1);
         //---
         if(low==0.0 || high==0.0)
            return;
         //---
         if(!RefreshRates())
            return;
         if((!bought) && (low>(TopRange+Point()*3)))
           {
            if(OpenBuy(m_symbol.Bid()-ExtStopLoss,m_symbol.Ask()+ExtTakeProfit))
               bought=true;
           }
         if((!sold) && (high<(LowRange-Point()*3)))
           {
            if(OpenSell(m_symbol.Ask()+ExtStopLoss,m_symbol.Bid()-ExtTakeProfit))
               sold=true;
           }
        } // end if in 2nd US time. 
     }// end if small session

мы ждём когда окажемся внутри "EU session" и получаем значения Low и High с первого бара.


Условие для открытия BUY: если в этот день ещё не было открыто ни одной позиции BUY и Low бара номер 1 БОЛЬШЕ наибольшего значение максимальных цен за период 24 бара в "US_session":

         if((!bought) && (low>(TopRange+Point()*3)))
           {
            if(OpenBuy(m_symbol.Bid()-ExtStopLoss,m_symbol.Ask()+ExtTakeProfit))
               bought=true;
           }


Условие для открытия SELL: если в этот день ещё не было открыто ни одной позиции SELL и High бара номер 1 МЕНЬШЕ наименьшего значение минимальных цен за период 24 бара в "US_session":

         if((!sold) && (high<(LowRange-Point()*3)))
           {
            if(OpenSell(m_symbol.Ask()+ExtStopLoss,m_symbol.Bid()-ExtTakeProfit))
               sold=true;
           }

ds