Библиотеки: SignalMAAboveBelow 3

 

SignalMAAboveBelow 3:

Развитие второй версии библиотеки SignalMAAboveBelow 2.


Новое в версии 3

  • Параметр CurrentBarSize - размер текущего бара (вычисляется как Close-Open);
  • Параметр PreviousBarSize - размер предыдущего бара (вычисляется как Close-Open).

При этом, если цена на текущем баре находится НАД индикатором, оба бара должны быть бычьими. А если цена на текущем баре находится ПОД индикатором, то оба бара должны быть медвежьими. Таким образом оба параметра (CurrentBarSize и PreviousBarSize) выступают защитными фильтрами при открытии позиции.

В модуле сигналов подключаем таймсерии в конструкторе:

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CSignalMA::CSignalMA(void) : m_reverse(false),
                             m_ma_period(12),
                             m_ma_shift(0),
                             m_ma_method(MODE_SMA),
                             m_ma_applied(PRICE_CLOSE),
                             m_pattern_0(80),
                             m_size_current_bar(40),
                             m_size_previous_bar(20)
  {
//--- initialization of protected data
   m_used_series=USE_SERIES_OPEN+USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE;
  }

После подключения таймсерий, можно обращаться к объектам m_close и m_open классов CiClose и CiOpen, соответственно (данные объекты объявлены на более высоком уровне - на уровне родителя ExpertBase.mqh).

Работаем с этими объектами в CSignalMA::LongCondition

//+------------------------------------------------------------------+
//| "Voting" that price will grow.                                   |
//+------------------------------------------------------------------+
int CSignalMA::LongCondition(void)
  {
   if(m_type_trade==1) // m_type_trade: enum type of trade: 0 -> BUY, 1 -> SELL, 2 -> BUY and SELL
      return(0);
   int result=0;
   int idx   =StartIndex();
//---
   if(m_close.GetData(idx+1)-m_open.GetData(idx+1)<m_previous_bar_size*PriceLevelUnit())
      return(0);
   if(m_close.GetData(idx)-m_open.GetData(idx)<m_current_bar_size*PriceLevelUnit())
      return(0);
//--- analyze positional relationship of the close price and the indicator at the first analyzed bar

и в CSignalMA::ShortCondition

//+------------------------------------------------------------------+
//| "Voting" that price will fall.                                   |
//+------------------------------------------------------------------+
int CSignalMA::ShortCondition(void)
  {
//--- m_type_trade: enum type of trade: 0 -> BUY, 1 -> SELL, 2 -> BUY and SELL
   if(m_type_trade==0)
      return(0);
   int result=0;
   int idx=StartIndex();
//---
   if(m_open.GetData(idx+1)-m_close.GetData(idx+1)<m_previous_bar_size*PriceLevelUnit())
      return(0);
   if(m_open.GetData(idx)-m_close.GetData(idx)<m_current_bar_size*PriceLevelUnit())
      return(0);
//--- analyze positional relationship of the close price and the indicator at the first analyzed bar

Пример открытия позиций при параметре Reverse == false:

SignalMAAboveBelow 3 Open Buy

Рис. 1. SignalMAAboveBelow 3 - открытие BUY позиции

SignalMAAboveBelow 3 Open Sell

Рис. 2. SignalMAAboveBelow 3 - открытие SELL позиции

Автор: Vladimir Karputov