Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 1475
- Рейтинг:
- Опубликован:
- 2018.03.08 14:13
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Развитие второй версии библиотеки 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:
Рис. 1. SignalMAAboveBelow 3 - открытие BUY позиции
Рис. 2. SignalMAAboveBelow 3 - открытие SELL позиции
Параметры модуля сигналов
- Reverse - флаг реверса сигналов;
- PeriodMA - период усреднения индикатора Moving Average;
- Shift - смещение индикатора Moving Average по горизонтали;
- Method - тип сглаживания индикатора Moving Average;
- Applied - тип цены, на основе которой рассчитывается индикатор Moving Average;
- TypeOfTrade - тип торговых сигналов: 0 → BUY, 1 → SELL, 2 → BUY and SELL;
- CurrentBarSize - размер текущего бара (вычисляется как Close-Open);
- PreviousBarSize - размер предыдущего бара (вычисляется как Close-Open).
Параметры тестового советника TestSignalMAAboveBelow3.mq5 даны по умолчанию, оптимизация не проводилась.
Кстати, если в советнике TestSignalMAAboveBelow3.mq5, сгенерированном в Мастере MQL5,
//+------------------------------------------------------------------+ //| Inputs | //+------------------------------------------------------------------+ //--- inputs for expert input string Expert_Title ="TestSignalMAAboveBelow3"; // Document name ulong Expert_MagicNumber =20884; // bool Expert_EveryTick =false; // //--- inputs for main signal
разрешить работу НА КАЖДОМ ТИКЕ (для этого "false" - который ставится по-умолчанию, заменить на "true"), можно получить более интересные результаты: советник станет быстрее отрабатывать условие, когда текущий бар (это будет бар с индексом #0) станет равным или чуть больше заданного параметра CurrentBarSize.

Одновременное открытие двух противоположных позиций. Trailing позиций.

Отложенные ордера Buy Stop и Sell Stop. Работа советника в ограниченном временном промежутке. Определение самых высоких и самых низких цен в заданном интервале баров. Трейлинг позиций.

Индикатор для автоматического рисования трендовых линий по фракталам на заданном таймфрейме.

Гистограмма дней недели.