Советники: VR---TRI-BOYCA

 

VR---TRI-BOYCA:

Стратегия на свечной фигуре "три солдата"

VR---TRI-BOYCA

Автор: Vladimir Karputov

 
@Vladimir Karputov доброго времени суток. Подскажите пожалуйста  в какой  части кода советника происходит проверка по трем барам вверх или вниз. Спасибо.

Картинку также можно просто перетащить в текст или вставить её с помощью Ctrl+V
 
Maxfreemen:
@Vladimir Karputov доброго времени суток. Подскажите пожалуйста  в какой  части кода советника происходит проверка по трем барам вверх или вниз. Спасибо.

Картинку также можно просто перетащить в текст или вставить её с помощью Ctrl+V

Торговые сигналы генерируются в функции SearchTradingSignals. У каждого бара есть четыре цены - OHLC - Open, High, Low и Close. Бычий бар - Open меньше Close, медвежий бар - Open больше Close. В коде ниже я выделил блоки генерации сигналов - в них последовательно (при помощи "&&" - логическое "И") сравниваются последовательно три бара

//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals(void)
  {
   double ma_filter[];
   MqlRates rates[];
   ArraySetAsSeries(ma_filter,true);
   ArraySetAsSeries(rates,true);
   int start_pos=0,count=6;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma_filter) || 
      CopyRates(m_symbol.Name(),0,start_pos,count,rates)!=count)
     {
      return(false);
     }

   int size_need_position=ArraySize(SNeedPosition);
   if(rates[3].open<rates[3].close && rates[2].open<rates[2].close && rates[1].open<rates[1].close)
      if((InpUseFilter && rates[0].close>ma_filter[0]) || !InpUseFilter)
        {
         if(!InpReverse)
           {
            ArrayResize(SNeedPosition,size_need_position+1);
            SNeedPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            return(true);
           }
         else
           {
            ArrayResize(SNeedPosition,size_need_position+1);
            SNeedPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            return(true);
           }
        }
   if(rates[3].open>rates[3].close && rates[2].open>rates[2].close && rates[1].open>rates[1].close)
      if((InpUseFilter && rates[0].close<ma_filter[0]) || !InpUseFilter)
        {
         if(!InpReverse)
           {
            ArrayResize(SNeedPosition,size_need_position+1);
            SNeedPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            return(true);
           }
         else
           {
            ArrayResize(SNeedPosition,size_need_position+1);
            SNeedPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            return(true);
           }
        }
//---
   return(true);
  }