Пример создания советника по пользовательскому индикатору Two iMA Crossing Arrow EA. На баре может быть только одна сделка 'вход в рынок' (это внутренний параметр, он не вынесен во входные параметры и это не имеет отношения к параметру ' Only one positions')
Сигналы индикатора
Индикатор на базе стиля рисования DRAW_COLOR_ARROW. Содержит два индикаторных буфера:
Индикатор ищет пересечение двух iMA (Moving Average, MA) на баре 'Bar Crossing'. Когда пересечение обнаружено - на баре рисуется значок, код которого задан в 'Arrow code for style DRAW_COLOR_ARROW' (коды значков можно посмотреть в шрифте Wingdings).

Рис. 1. Пример торговых сигналов
Главная функция - получение сигналов: проверка, чтобы в буфере значков было число больше нуля ив зависимости от значения в буфере цвета - генерируем BUY или SELL сигнал:
//+------------------------------------------------------------------+ //| Search trading signals | //+------------------------------------------------------------------+ bool SearchTradingSignals(void) { double crossing_buffer[],crossing_colors[]; ArraySetAsSeries(crossing_buffer,true); ArraySetAsSeries(crossing_colors,true); int start_pos=0,count=InpBar+1; if(!iGetArray(handle_iCustom,0,start_pos,count,crossing_buffer) || !iGetArray(handle_iCustom,1,start_pos,count,crossing_colors)) { return(false); } int size_need_position=ArraySize(SPosition); if(crossing_buffer[InpBar]>0.0) { if(crossing_colors[InpBar]==0.0) { if(!InpReverse) { if(m_prev_bars==m_last_deal_in) // on one bar - only one deal return(true); ArrayResize(SPosition,size_need_position+1); SPosition[size_need_position].pos_type=POSITION_TYPE_BUY; if(InpPrintLog) Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY"); return(true); } else if(m_prev_bars==m_last_deal_in) // on one bar - only one deal return(true); ArrayResize(SPosition,size_need_position+1); SPosition[size_need_position].pos_type=POSITION_TYPE_SELL; if(InpPrintLog) Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL"); return(true); } if(crossing_colors[InpBar]==1.0) { if(!InpReverse) { if(m_prev_bars==m_last_deal_in) // on one bar - only one deal return(true); ArrayResize(SPosition,size_need_position+1); SPosition[size_need_position].pos_type=POSITION_TYPE_SELL; if(InpPrintLog) Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL"); return(true); } else if(m_prev_bars==m_last_deal_in) // on one bar - only one deal return(true); ArrayResize(SPosition,size_need_position+1); SPosition[size_need_position].pos_type=POSITION_TYPE_BUY; if(InpPrintLog) Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY"); return(true); } } //--- return(true); }
Подробнее о настройках советника:
В советнике можно как включать, так и выключать Stop Loss, Take Profit и Trailing Stop. Для отключения выбранный параметр установить в "0.0".
Трейлинг и поиск торгового сигнала может срабатывать или через N- секунд или только в момент рождения нового бара. Интервал Трейлинга в секундах задаётся в Trailing, in seconds, а интервал поиска торговых сигналов в Search signals, in seconds. Для этих двух параметров общее правило: если интервал задать меньше, чем "10" - это означает работу ТОЛЬКО в момент рождения нового бара, если же интервал задать ровно или более "10" - это означает работу каждые "N" секунд.
Обратите внимание: торговый сигнал имеет наивысший приоритет! Ограничить его исполнение можно только при помощи параметра Only one positions. Если Only one positions равен "true" и количество позиций открытых этим советником на данном символе больше "1" - тогда торговый сигнал игнорируется.
Параметр Close opposite равен "true": сначала ЗАКРЫВАЕМ противоположную позицию, потом отрабатываем торговый сигнал.
Лот может быть как постоянный (Money management установить в Constant lot и задать размер лота в The value for "Money management") так и динамический - в процентах риска на сделку ( Money management установить в Risk in percent for a deal и задать процент риска в The value for "Money management"). Также можно задать постоянный лот равный минимальному лоту - Money management установить в Lots Min.
iDeMarker Levels
Торговая стратеги по осциллятору iDeMarker (DeMarker, DeM)
Custom Moving Average Levels EA 2
Торговая стратегия на основе пользовательского индикатора Custom Moving Average Levels (вторая версия стратегии)
Pending Trailing
Трейлинг отложенных ордеров. Отложенный ордер идёт вслед за ценой.
Breakdown OHLC
Индикатор отображает момент пересечения предыдущего бара. Использует стиль рисования DRAW_COLOR_ARROW