Buy The xCustomEA for MetaTrader 5
Buy The xCustomEA for MetaTrader 4
Download The xCustomEA DEMO+ PDF
Additional and Complete information on our xCustomEA program on the website www.expforex.com
Купить The xCustomEA для MetaTrader 5
Купить The xCustomEA для MetaTrader 4
Скачать The xCustomEA DEMO + PDF
Дополнительная и Полная информация по нашей программе xCustomEA на сайте www.expforex.com
Описание
Exp - The xCustomEA Универсальный торговый советник на пользовательских индикаторах.
Наш новый советник The xCustomEA построен на базе советника The X - Universal EA
Функциональные возможности универсального торгового советника The xCustomEA в точности повторяют все параметры нашего советника The X за исключением одного:
The xCustomEA работает на пользовательских индикатор и имеет возможность программирования своей собственной стратегии торговли для терминалов МТ5 и МТ4.
Другими словами: The xCustomEA имеет связь с пользовательскими индикаторами, которые могут быть скачаны с интернета или маркета mql5 .
Предисловие
Программируя советники на заказ мы не были удивлены тем, что 90 % заказов построены на стратегиях по индикаторам.
Поэтому основная наша работа заключалась в том, чтобы встроить пользовательский индикатор в наш шаблон для написания советника.
Но стоимость такой работы + шаблон для написания + открытый код такого шаблона слишком велика. И не все трейдеры соглашаются на то, чтобы написать торговый советник на один пользовательский индикатор.
Ведь, если Ваш индикатор не достаточно прибыльный, то Вам придется заказывать новый советник по новому индикатору за те же деньги.
Мы нашли выход из этой ситуации и разработали новый универсальный торговый советник The xCustomEA
Этот советник не имеет предустановленной стратегии, он умеет торговать по сигналам других индикаторов. Вы можете запрограммировать Ваш пользовательский индикатор, а наш советник The xCustomEA будет открывать позиции по сигналам.
Купив Наш Универсальный торговый советник The xCustomEA , Вы сможете программировать советники по индикаторам каждый день!
Внимание: Вы не обязаны покупать индикатор для тестирования советника в тестере стратегий.
Вы можете скачать индикатор в тестер стратегий и проверить нашего советника по этому индикатору в тестере стратегий.
Только после получения прибыльных результатов в тестере стратегий, Вы можете купить пользовательский индикатор и запустить советник по этому индикатору на реальном или демо счете!
Основные Функции и описание параметров
Мы не будем останавливаться на подробном описании основных параметров советника потому, что 99% параметров соответствуют нашей систему The X.
Описание настроек и внешних переменных
Блок подключения пользовательской стратегии в нашего советника
Новый блок работы с пользовательской стратегией был включен в нашего нового советника.
Параметр | Описание | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
OWN Signal options | |||||||||||||||||||||||||
SignalNameIndicator | Имя пользовательского индикатора, с которого будет получены основные сигналы для открытия позиций. По умолчанию: "Ind - The xCustomEA" Это стандартный пустой индикатор, в который Вы можете запрограммировать свою стратегию по нашему примеру! Также мы создали пример пользовательского индикатора по сигналам The X "Ind - The xCustomEA Example TheX" Вы можете использовать наш пример для получения сигналов по стандартным индикаторам | ||||||||||||||||||||||||
SignalTypeIndicator | Тип индикатора для сигналов. Есть два типа работы советника : xCustomEA - Работа советника по нашему индикатору, в котором Вы лично программируете свою стратегию. xArrow - Работа советника напрямую с пользовательским индикатором, у которого есть буферы типа Стрелок (Arrow) которые можно использовать для советника. Например: Буфер с сигналами индикатора на BUY и Буфер с сигналами индикатора на SELL Такие буферы должны иметь тип Стрелки. Наш советник определяет сигнал по типу : Значение буфера не равно пустому значению и выше 0.: //--- проводим проверку условия и устанавливаем значение для sig if(xCustom_SIGNAL_BUY_buffer[OWNSIGNAL_shift]!=EMPTY_VALUE && xCustom_SIGNAL_BUY_buffer[OWNSIGNAL_shift]>0) sig=1; else if(xCustom_SIGNAL_SELL_buffer[OWNSIGNAL_shift]!=EMPTY_VALUE && xCustom_SIGNAL_SELL_buffer[OWNSIGNAL_shift]>0) sig=-1;
| ||||||||||||||||||||||||
IndSigToTrade | Выбор индикатора и сигнала для открытия первой и главной позиции. Если заданная стратегия не найдена в индикаторе, советник будет выгружен с графика с ошибкой! Если задан 0 , тогда сигналы стратегии не используются но используются фильтры! | ||||||||||||||||||||||||
TF_IndSigToTrade1 | Таймфрейм для 1 главного индикатора. Вы можете выбрать ТаймФрейм, по которому индикатор будет принимать сигналы. Period_Current - текущий Таймфрейм | ||||||||||||||||||||||||
SIGNALStrategyInputs | Внешние параметры для пользовательского индикатора, в режиме SignalTypeIndicator=xArrow Вы можете указать внешние переменные индикатора в том виде, как они записаны в таблице настроек через запятую! Важно: Необходимо соблюдать порядок переменных и тип переменных.
например input int InpCCIPeriod=1; записывается как: SIGNALStrategyInputs=1,2.0,C'0/128/0',"text ",D'2018.11.08',false | ||||||||||||||||||||||||
Signal_Reverse | Переворачивать сигналы этого индикатора. Эта опция переворачивает сигналы только главного индикатора. | ||||||||||||||||||||||||
ClosePositionifChangeOWNSignal | Включить \ Выключить закрытие позиций по обратному сигналу главного индикатора, без участия остальных фильтров и других параметров | ||||||||||||||||||||||||
OWNSIGNAL_shift | Номер бара для сигнала, который будет генерировать индикатор, 1 = последний закрытый бар, сигналы на таком баре считаются завершенными. 0 = Текущий открытый бар, сигналы на таком баре считаются рисующими. Подробнее о этом параметре: Подробная статья о сигнальных барах | ||||||||||||||||||||||||
SignalBuferforBUY SignalBuferforSELL | Номер буфера в пользовательском индикаторе, для получения сигнала на BUY и SELL Не изменять для Ind - The xCustomEA и Ind - The xCustomEA Example TheX | ||||||||||||||||||||||||
Close options | |||||||||||||||||||||||||
CloseNameIndicator | Имя пользовательского индикатора, с которого будет получены основные сигналы для закрытия позиций. | ||||||||||||||||||||||||
CloseTypeIndicator | Тип индикатора для сигналов. Есть два типа работы советника : xCustomEA - Работа советника по нашему индикатору, в котором Вы лично программируете свою стратегию. xArrow - Работа советника напрямую с пользовательским индикатором, у которого есть буферы типа Стрелок (Arrow) которые можно использовать для советника. Например: Буфер с сигналами индикатора на закрытие BUY и Буфер с сигналами индикатора на закрытие SELL Такие буферы должны иметь тип Стрелки. Наш советник определяет сигнал по типу : Значение буфера не равно пустому значению и выше 0.: //--- проводим проверку условия и устанавливаем значение для sig if(xCustom_SIGNAL_BUY_buffer[OWNSIGNAL_shift]!=EMPTY_VALUE && xCustom_SIGNAL_BUY_buffer[OWNSIGNAL_shift]>0) sig=1; else if(xCustom_SIGNAL_SELL_buffer[OWNSIGNAL_shift]!=EMPTY_VALUE && xCustom_SIGNAL_SELL_buffer[OWNSIGNAL_shift]>0) sig=-1; | ||||||||||||||||||||||||
CloseTimeFrame | |||||||||||||||||||||||||
Close_shift | |||||||||||||||||||||||||
CloseStrategyInputs | |||||||||||||||||||||||||
CloseBuferforBUY | |||||||||||||||||||||||||
CloseBuferforSELL | |||||||||||||||||||||||||
Close_IndSigToClose | |||||||||||||||||||||||||
Filter options | |||||||||||||||||||||||||
FilterNameIndicator | Имя пользовательского индикатора, с которого будет получены фильтры при открытии позиций. По умолчанию: "Ind - The xCustomEA" Это стандартный пустой индикатор, в который Вы можете запрограммировать свою стратегию по нашему примеру! Также мы создали пример пользовательского индикатора по фильтрамThe X "Ind - The xCustomEA Example TheX" Вы можете использовать наш пример для получения фильтров по стандартным индикаторам | ||||||||||||||||||||||||
FilterTypeIndicator | Тип индикатора для фильтра. Есть два типа работы советника : xCustomEA - Работа советника по нашему индикатору, в котором Вы лично программируете свою стратегию фильтра. xArrow - Работа советника напрямую с пользовательским индикатором, у которого есть буферы типа Стрелок (Arrow) или не пустое значение буфера которые можно использовать для советника. Например: Буфер с фильтром индикатора на BUY и Буфер с фильтром индикатора на SELL Такие буферы должны иметь тип Стрелки. Наш советник определяет фильтр по типу : Значение буфера не равно пустому значению и выше 0.: //--- проводим проверку условия и устанавливаем значение для sig if(xCustom_FILTER_BUY_buffer[shift]!=EMPTY_VALUE && xCustom_FILTER_BUY_buffer[shift]>0) sig=1; else if(xCustom_FILTER_SELL_buffer[shift]!=EMPTY_VALUE && xCustom_FILTER_SELL_buffer[shift]>0) sig=-1; | ||||||||||||||||||||||||
FILTER_IndSigToTrade | Выбор индикатора и фильтра для фильтрации основного сигнала. Если заданная стратегия не найдена в индикаторе, советник будет выгружен с графика с ошибкой! Если IndSigToTrade задан 0 , тогда советник будет работать по фильтрам! | ||||||||||||||||||||||||
FILTER_TF_IndSigToTrade | Таймфрейм для фильтра. Вы можете выбрать ТаймФрейм, по которому индикатор будет принимать сигналы фильтра. Period_Current - текущий Таймфрейм. Например: При использовании МА как главного сигнала с ТФ = М30, Вы можете включить фильтрацию по старшему МА с ТФ=Н4 | ||||||||||||||||||||||||
Filter_Reverse | Переворачивать сигналы этого фильтра. Эта опция переворачивает сигналы только этого фильтра. Например: Главный индикатор МА показывает BUY но старший индикатор МА показывает SELL, при использовании этой функции мы переворачиваем сигналы старшего МА и получаем совокупный сигнал BUY | ||||||||||||||||||||||||
FILTERSIGNAL_shift | Номер бара для сигнала, который будет генерировать индикатор, 1 = последний закрытый бар, сигналы на таком баре считаются завершенными. 0 = Текущий открытый бар, сигналы на таком баре считаются рисующими. Подробнее о этом параметре: Подробная статья о сигнальных барах | ||||||||||||||||||||||||
FilterBuferforBUY FilterBuferforSELL | Номер буфера в пользовательском индикаторе, для получения фильтра на BUY и SELL Не изменять для Ind - The xCustomEA и Ind - The xCustomEA Example TheX | ||||||||||||||||||||||||
SLTP options | |||||||||||||||||||||||||
SLTPNameIndicator | Имя пользовательского индикатора, с которого будет получены Стоплосс и Тейкпрофит. | ||||||||||||||||||||||||
SLTPTypeIndicator | Тип индикатора . xPrice - Значение цены, котороые будет передано в соответствующую переменную (Стоплосс, Тейкпрофит) | ||||||||||||||||||||||||
SLTPTimeFrame | |||||||||||||||||||||||||
SLTP_shift | |||||||||||||||||||||||||
SLTPStrategyInputs | |||||||||||||||||||||||||
SLTPBuferforBUY_StopLoss | Номер буфера, для получения значения StopLoss для позиций BUY , -1 означает, что данная опция не работает. | ||||||||||||||||||||||||
SLTPBuferforSELL_StopLoss | Номер буфера, для получения значения StopLoss для позиций SELL , -1 означает, что данная опция не работает. | ||||||||||||||||||||||||
SLTPBuferforBUY_TakeProfit | Номер буфера, для получения значения TakeProfit для позиций BUY , -1 означает, что данная опция не работает. | ||||||||||||||||||||||||
SLTPBuferforSELL_TakeProfit | Номер буфера, для получения значения TakeProfit для позиций SELL , -1 означает, что данная опция не работает. |
Определение Сигнала и Фильтра
Сигнал
- Сигнал - происходит тогда, когда есть все условия для сигнала, например факт пересечения линий МА. Или появление новой точки ZigZag .
- Например : Пересечение уровня 70 для индикатора RSI это сигнал. А если RSI выше уровня 70, то это уже фильтр.
- Сигнал - это то, что появляется в момент поступления котировок, фиксируется на баре. Советник принимает факт совершения сигнала.
- Например: Включился свет. Это сигнал потому, что свет только что включился. При включении света , человек проснулся. Это сигнал.
- Открытие позиций происходит по факту совершения сигнала, линии пересеклись , тогда открывается позиция. Если линии были пересечены ранее, то это не сигнал. Сигнал уже прошел.
Фильтр:
- Фильтр - Это текущее положение индикатора, например текущее положение линий МА относительно друг друга. Или текущая последняя вершина ZIGZAG
- Фильтр - это то, что на данный момент показывает индикатор. Это не факт совершения сигнала. Это текущее положение индикатора.
- Например: Свет горел. Это фильтр потому, что свет уже был включен и он уже горит. При включенном свете человек уже не спит. Это фильтр.
- Фильтрация сигналов происходит по текущему значению индикатору. Если Быстрая МА выше медленной МА, то это фильтр на то, что должны открываться только BUY.
Расположение файлов и папок
Если Вы покупаете нашего советника в Маркете mql5.com то наш советник устанавливается в папку Экспертов.
Для работы советника необходимо загрузить индикаторы и примеры стратегий с нашего сайта.
Расположение нашего главного индикатора в папке Indicators
Пример расположения файлов для терминала MQL5
- \MQL5
- і \Experts
- і і Exp5 - The xCustomEA 20180929 DEMO.ex5
- і \Indicators
- і і Ind - The xCustomEA Example TheX.ex5
- і і Ind - The xCustomEA Example TheX.mq5
- і і Ind - The xCustomEA PipFinite Trend PRO.ex5
- і і Ind - The xCustomEA PipFinite Trend PRO.mq5
- і і Ind - The xCustomEA.ex5
- і і Ind - The xCustomEA.mq5
- і \Presets
- і Ind - The xCustomEA PipFinite Trend PRO CLEAN.set
- і Ind - The xCustomEA PipFinite Trend PRO.set
- і MT5 PipFinite Trend PRO MT5.set
Пример расположения файлов для терминала MQL4
- \MQL4
- і \Experts
- і і Exp4 - The xCustomEA 20180929 DEMO.ex4
- і \Indicators
- і і Ind - The xCustomEA Example TheX.ex4
- і і Ind - The xCustomEA Example TheX.mq4
- і і Ind - The xCustomEA PipFinite Trend PRO.ex4
- і і Ind - The xCustomEA PipFinite Trend PRO.mq4
- і і Ind - The xCustomEA.ex4
- і і Ind - The xCustomEA.mq4
- і \Presets
- і Ind - The xCustomEA PipFinite Trend PRO MT4 CLEAN .set
- і MT4 PipFinite Trend PRO.set
Файл шаблона индикатора
Для удобства использования советника:
При первом запуске советника, будет создан файл шаблона индикатора в папке Вашего терминала Files
Этот файл можно использовать как шаблон для написания стратегии по индикатору.
Для того, чтобы найти файл, нажмите в Вашем терминале меню Файл - Открыть каталог данных
Откройте этот файл с помощью Вашего компилятора
В файле Вы увидите примеры использования и шаги программирования стратегии.
После создания стратегии по индикатору - сохраните этот файл в папке Вашего терминала - Indicators/
После этого укажите этот файл в настройках советника SignalNameIndicator
Простая установка пользовательского индикатора в сигналах и фильтрах
Есть два типа работы советника :
xCustomEA - Работа советника по нашему индикатору, в котором Вы лично программируете свою стратегию.
Если Вам необходимо программировать работу советника по индикатору, перейдите в следующий раздел: Программирование своей стратегии
xArrow - Работа советника напрямую с пользовательским индикатором, у которого есть буферы типа Стрелок (Arrow) которые можно использовать для советника.
Например: Буфер с сигналами индикатора на BUY и Буфер с сигналами индикатора на SELL
Такие буферы должны иметь тип Стрелки.
Наш советник определяет сигнал по типу : Значение буфера не равно пустому значению и выше 0.:
//--- проводим проверку условия и устанавливаем значение для sig if(xCustom_SIGNAL_BUY_buffer[OWNSIGNAL_shift]!=EMPTY_VALUE && xCustom_SIGNAL_BUY_buffer[OWNSIGNAL_shift]>0) sig=1; else if(xCustom_SIGNAL_SELL_buffer[OWNSIGNAL_shift]!=EMPTY_VALUE && xCustom_SIGNAL_SELL_buffer[OWNSIGNAL_shift]>0) sig=-1;
Если Вы не хотите программировать свою стратегию и Ваш пользовательский индикатор позволяет работать напрямую с советником, Вы можете указать название индикатора и задать буферы для его работы по сигналам на BUY и SELL
например:
1. Укажите имя пользовательского индикатора! Если этот индикатор был скачан с маркета MQL5, тогда Вам необходимо указать с папки Market:
Market\\PipFinite Trend PRO
Обязательно нужно писать двойной обратный слэш \\
2. Укажите тип сигналов xArrow
3. Укажите номер буфера сигналов для открытия BUY (в данном примере буфер номер 8)
4. Укажите номер буфера сигналов для открытия SELL (в данном примере буфер номер 9)
Таким образом, нам не нужно программировать наш индикатор, для работы советника.
Наш пример пользовательского индикатора содержит буферы для работы советника и мы напрямую можем с ним взаимодействовать!
В нашем разделе The xCustomEA Примеры стратегий мы будем выкладывать примеры программирования стратегий и советники по индикаторам известных в маркете!
Пример советника по индикатору PipFinite Trend PRO
Программирование своей стратегии
Вы должны знать минимальные правила программирования для того, чтобы написать свою стратегию Или добавить готовую стратегию по индикаторам с готового файла (индикаторы с интернета, например)
Программирование советников для MetaTrader 5 сложнее, чем программирование для MetaTrader 4. Но терминал МТ5 позволяет создать более мощные стратегии, а также обладает более продвинутым тестером стратегий.
Для простоты программирования
- Откройте наш исходный код индикатора Ind - The xCustomEA или Ind - The xCustomEA Example TheX,;
- Нажмите сочетание клавиш Ctrl+F и вы увидите строку поиска;
- Введите название Step - По этому слову, в нашем исходном коде, Вы сможете ориентироваться и быстро написать свою стратегию.
- Каждый шаг комментирован и содержит пример
- Для того,чтобы научиться программировать свою стратегию, Вы можете поэтапно раскомментировать строки с звездочкой //*
Мы разберем каждый шаг подробно!
MetaTrader 4 Программирование своей стратегии по пользовательскому индикатору в МТ4
Программирование советника по индикатору в МТ4 состоит из 4 шагов:
MetaTrader 4 Шаг 1: Шаг загрузки индикаторов в ресурсы!// Step 1 #################################################################### // Эта часть кода для программирования своей стратегии в открытом коде // This part of the code for programming your strategy in open source // // Для того,чтобы при компиляции, индикатор был встроен в советник, Вам необходимо загрузить его в ресурсы советника // In order for the indicator to be built into the Expert Advisor during compilation, you need to load it into the resources of the Expert Advisor // #################################################################### // for example: //* #resource "\\Indicators\\MACD.ex4" // ###########################################################################
Здесь мы обязаны добавить , нужные Нам, индикаторы в ресурсы.
Это позволит компилировать индикатор для маркета , а также избавит нас от лишних проблем, когда компилированный советник вдруг не найдет нужный индикатор на другом компьютере!
Правила написания имени маркета: Полное название папок, начиная с Indicators!
Папка обозначается \\
Например:
Если путь к Вашему индикатору выглядит так:
C:\ROBO MT4\MQL4\Indicators\Examples\MACD.ex4
тогда путь к этому индикатору в языке программирования записывается так:
"\\Indicators\\Examples\\MACD.ex4"
MetaTrader 4 Шаг 2: Главный шаг создания стратегии и сигналов для открытия позиций!// Step 2 #################################################################### // Эта часть кода для программирования своей стратегии в открытом коде // This part of the code for programming your strategy in open source // // Здесь создаем наш сигнал для открытия позиций. Заполняем буферы данных // Here we create our signal for opening positions. Fill in the data buffer // #################################################################### // for example: //* if(sigInd==1) //* { // // Заполняем данные, // We fill in the data // // //* double CustomMain=iCustom(StrategySymbol,StrategyTimeFrame,"::Indicators\\MACD",periodma1,periodma2,9,MAprice, //* MODE_MAIN,StartCopyI+ShiftIndicator); //* double CustomSig=iCustom(StrategySymbol,StrategyTimeFrame,"::Indicators\\MACD",periodma1,periodma2,9,MAprice, //* MODE_SIGNAL,StartCopyI+ShiftIndicator); // //* double CustomMain2=iCustom(StrategySymbol,StrategyTimeFrame,"::Indicators\\MACD",periodma1,periodma2,9,MAprice, //* MODE_MAIN,StartCopyI+ShiftIndicator+1); //* double CustomSig2=iCustom(StrategySymbol,StrategyTimeFrame,"::Indicators\\MACD",periodma1,periodma2,9,MAprice, //* MODE_SIGNAL,StartCopyI+ShiftIndicator+1); // // // Здесь пишем нашу стратегию, в данном примере это пересечение двух линий, // Here we write our strategy, in this example it is the intersection of two lines // //* if(CustomMain>CustomSig && CustomMain2<CustomSig2) // // Buy sig //* sig=1; //* if(CustomMain<CustomSig && CustomMain2>CustomSig2) // // Sell sig //* sig=-1;// // Записываем данные, которые будут отображаться в журнале, при открытии позиций по сигналу // We write down the data that will be displayed in the log, when you open positions on a signal // //* InfoAboutSignal=" InfoAboutSignal sigInd="+(string)sigInd+" sig="+(string)sig //* +" CustomMain="+CustomMain //* +" CustomSig="+CustomSig //* +" CustomMain2="+CustomMain2 //* +" CustomSig2="+CustomSig2 //* ; // //--- возвращаем торговый сигнал //* return(sig); //* } Этот шаг очень важен для советника. Хотя и все о
стальные шаги обязательны, иначе советник не будет работать.
Свои комментарии я указал в коде!
- Программирование кода для стратегии и сигнала индивидуально. Зависит от выбранной стратегии и индикаторов. Получения буферов, стратегии........
- Хочу заметить лишь то, что в этом блоке Вы можете указывать любую стратегию.
- 1. Программирование стратегии. В данном случае это пересечение двух линий.
- Важно: Сигнал для BUY это 1, а для SELL это -1
Примеры стратегий я буду публиковать на нашем форуме!
MetaTrader 4 Шаг 3: Шаг для указание фильтров от ваших индикаторов, или использование вашего индикатора как фильтр для стратегии!// Step 3 #################################################################### // Эта часть кода для программирования своей стратегии в открытом коде // This part of the code for programming your strategy in open source // // Здесь создаем наш фильтр для фильтрации сигналов. Заполняем буферы данных // Here we create our filter for signal filtering. Fill in the data buffers // #################################################################### // for example: //* if(sigInd==1) //* { // // Заполняем данные, // We fill in the data // // //* double CustomMain=iCustom(StrategySymbol,StrategyTimeFrame,"::Indicators\\MACD",periodma1,periodma2,9,MAprice, //* MODE_MAIN,shift); //* double CustomSig=iCustom(StrategySymbol,StrategyTimeFrame,"::Indicators\\MACD",periodma1,periodma2,9,MAprice, //* MODE_SIGNAL,shift); // // Здесь пишем нашу стратегию, в данном примере это пересечение двух линий, // Here we write our strategy, in this example it is the intersection of two lines // //* if(CustomMain>CustomSig ) // // Buy sig //* sig=1; //* if(CustomMain<CustomSig ) // // Sell sig //* sig=-1;// // Записываем данные, которые будут отображаться в журнале, при открытии позиций по сигналу // We write down the data that will be displayed in the log, when you open positions on a signal // //* InfoAboutSignal=" InfoAboutSignal sigInd="+(string)sigInd+" sig="+(string)sig //* +" CustomMain="+CustomMain //* +" CustomSig="+CustomSig //* ; // //--- возвращаем торговый сигнал //* return(sig); //* }
В программировании кода на этом шаге нет ничего сложного и он похож на предыдущий шаг.
Отличие лишь в том, что на этом шаге Вы программируете свои индикаторы в роли Фильтра.
Вы можете не указывать сигналы по индикатору, а указать только фильтр. Или наоборот! Все зависит от стратегии.
MetaTrader 5 Программирование своей стратегии по пользовательскому индикатору в МТ5
MetaTrader 5 Шаг 1: Шаг загрузки индикаторов в ресурсы!
// Step 1 #################################################################### // Эта часть кода для программирования своей стратегии в открытом коде // This part of the code for programming your strategy in open source // // Для того,чтобы при компиляции, индикатор был встроен в советник, Вам необходимо загрузить его в ресурсы советника // In order for the indicator to be built into the Expert Advisor during compilation, you need to load it into the resources of the Expert Advisor // #################################################################### // for example: //* #resource "\\Indicators\\Examples\\MACD.ex5" // ###########################################################################
Здесь мы обязаны добавить , нужные Нам, индикаторы в ресурсы.
Это позволит компилировать советник для маркета , а также избавит нас от лишних проблем, когда компилированный советник вдруг не найдет нужный индикатор на другом компьютере!
Правила написания имени маркета: Полное название папок, начиная с Indicators!
Папка обозначается \\
Например:
Если путь к Вашему индикатору выглядит так:
C:\ROBO MT5\MQL5\Indicators\Examples\MACD.ex5
тогда путь к этому индикатору в языке программирования записывается так:
"\\Indicators\\Examples\\MACD.ex5"
MetaTrader 5 Шаг 2: Шаг объявления переменных для хранения хендлов индикаторов стратегии!// Step 2 #################################################################### // Эта часть кода для программирования своей стратегии в открытом коде // This part of the code for programming your strategy in open source // // обьявите переменную массива хендлов // Declare the variable of the handle array // #################################################################### // for example: //* int h_custom; //* int h_custom2; // ###########################################################################
Здесь мы просто указываем названия наших хендлов, которые создавали выше!
Сложного здесь ничего нет.
Хендлы создаются в виде массивов для того, чтобы использовать мультивалютность в советнике и использоваться возможность указания сразу 6 сигналов или фильтров!
MetaTrader 5 Шаг 3: Шаг объявления переменных для хранения данных индикаторов!// Step 3 #################################################################### // Эта часть кода для программирования своей стратегии в открытом коде // This part of the code for programming your strategy in open source // // обьявите переменную массива значений индикатора // Declare the variable of the handle array // #################################################################### // for example: //* double custom1_buffer[]; //* double custom2_buffer[]; // ###########################################################################
Здесь мы просто указываем названия наших данных для буферов!
Сложного здесь ничего нет.
В этих массивах будут хранится данные о значениях индикатора на каждом баре. Если Вам нужно использовать несколько буферов, Вы можете использовать несколько переменных.
В нашем случае, для примера, нам нужно 2 буфера, для сигнальной и главной линии индикатора MACD
MetaTrader 5 Шаг 4: Шаг создания хендлов индикаторов, для загрузки в советник!// Step 4 #################################################################### // Эта часть кода для программирования своей стратегии в открытом коде // This part of the code for programming your strategy in open source // // Вам необходимо создать запись в массиве для того, чтобы советник присвоил хендл индикатора при инициализации // You need to create an entry in the array in order for the Expert Advisor to assign an indicator handle when initializing // #################################################################### // for example: //* case 1:h_custom=iCustom(StrategySymbolString,StrategyTimeFrame,"::Indicators\\Examples\\Moving Average\\Moving Average",MAFastPeriod,MAmethod,MAprice); //* h_custom2=iCustom(StrategySymbolString,StrategyTimeFrame,"::Indicators\\Examples\\Moving Average\\Moving Average",MASlowPeriod,MAmethod,MAprice); //* if(h_custom==INVALID_HANDLE) //* { //* Print(" Не удалось получить хендл индикатора Moving Average"); //* return(INIT_FAILED); //* } //* if(h_custom2==INVALID_HANDLE) //* { //* Print(" Не удалось получить хендл индикатора Moving Average"); //* return(INIT_FAILED); //* } //* break; // ###########################################################################
Этот шаг нужен для того, чтобы наши индикаторы загружались 1 раз при инициализации советника. В MetaTrader 5 нет необходимости в том, чтобы постоянно загружать индикатор на график.
При создании хендла, мы запоминаем хендл уже открытого индикатора и используем его для дальнейшей работы.
Здесь нужно быть очень внимательным. При создании хендла мы должны указать все внешние переменные индикатора и указать правильное имя, иначе советник не сможет загрузить индикатор.
Помните, что мы загрузили индикатор в ресурсы советника. Поэтому вызывать индикатор мы будем из ресурсов!
Вы можете почитать справку о вызове индикаторов через iCustom
Номер стратегии также нужен нам для написания этого кода. Если у Вас несколько индикаторов в одной стратегии, тогда нужно указывать несколько индикаторов но с одинаковым номером. Чтобы советник правильно загрузил Вашу стратегию.
По нашим примерам выше нам нужно сделать так:
case 1: h_custom=iCustom(StrategySymbolString,StrategyTimeFrame,"::Indicators\\Examples\\Moving Average\\Moving Average"); h_custom2=iCustom(StrategySymbolString,StrategyTimeFrame,"::Indicators\\Examples\\Moving Average\\Moving Average"); if(h_custom==INVALID_HANDLE) { Print(" Не удалось получить хендл индикатора Moving Average"); return; } if(h_custom2==INVALID_HANDLE) { Print(" Не удалось получить хендл индикатора Moving Average"); return; } break;
По аналогии выше, Вы можете добавить несколько индикаторов и хендлов.
Также и с другими стратегиями, которые вы хотите вставить в советника!
MetaTrader 5 Шаг 5: Главный шаг создания стратегии и сигналов для открытия позиций!// Step 5 #################################################################### // Эта часть кода для программирования своей стратегии в открытом коде // This part of the code for programming your strategy in open source // // Здесь создаем наш сигнал для открытия позиций. Заполняем буферы данных // Here we create our signal for opening positions. Fill in the data buffer // #################################################################### // for example: //* if(sigInd==1) //* { // // Заполняем данные, // We fill in the data // //* if(CopyBuffer(h_custom,0,0,3+ShiftIndicator,custom1_buffer)<3+ShiftIndicator) //* return(0); //* if(!ArraySetAsSeries(custom1_buffer,true)) //* return(0); //* if(CopyBuffer(h_custom2,0,0,2+ShiftIndicator,custom2_buffer)<2+ShiftIndicator) //* return(0); //* if(!ArraySetAsSeries(custom2_buffer,true)) //* return(0); // // Здесь пишем нашу стратегию, в данном примере это пересечение двух линий, // Here we write our strategy, in this example it is the intersection of two lines // //* if(custom1_buffer[ShiftIndicator+1]<custom2_buffer[ShiftIndicator+1] && custom1_buffer[ShiftIndicator]>custom2_buffer[ShiftIndicator]) //* sig=1; //* else if(custom1_buffer[ShiftIndicator+1]>custom2_buffer[ShiftIndicator+1] && custom1_buffer[ShiftIndicator]<custom2_buffer[ShiftIndicator]) //* sig=-1; //* else sig=0; // // Записываем данные, которые будут отображаться в журнале, при открытии позиций по сигналу // We write down the data that will be displayed in the log, when you open positions on a signal // //* InfoAboutSignal=InfoAboutSignal+" "+"sigInd="+(string)sigInd+" TF="+(string)TF+" Symbol="+symToWork3+" sig="+(string)sig+" "+__FUNCTION__+" " //* +" custom1_buffer[ShiftIndicator+1]="+(string)custom1_buffer[ShiftIndicator+1] //* +" custom2_buffer[ShiftIndicator+1]="+(string)custom2_buffer[ShiftIndicator+1] //* +" custom1_buffer[ShiftIndicator]="+(string)custom1_buffer[ShiftIndicator] //* +" custom2_buffer[ShiftIndicator]="+(string)custom2_buffer[ShiftIndicator]; // //--- возвращаем торговый сигнал //* return(sig); //* } // ###########################################################################
Этот шаг очень важен для советника. Хотя и все остальные шаги обязательны, иначе советник не будет работать.
Свои комментарии я указал в коде!
Номер стратегии у нас такой же как и в первых шагах!
- Программирование кода для стратегии и сигнала индивидуально. Зависит от выбранной стратегии и индикаторов. Получения буферов, стратегии........
- Хочу заметить лишь то, что в этом блоке Вы можете указывать любую стратегию.
- Все индикаторы, которые мы объявили в хендлах, будут загружены в память и использоваться для построения стратегии.
Этот шаг можно разделить на 2 подшага:
- 1. Мы обязаны скопировать буферы данных в наши массивы данных. В параметрах копирования мы должны указать номера линий (В нашем случае это линии индикатора MACD )
- Мы используем две линии MAIN и SIGNAL
- Вы можете почитать справку о функции CopyBuffer
- 2. Программирование стратегии. В данном случае это пересечение двух линий.
- Важно: Сигнал для BUY это 1, а для SELL это -1
// Step 6 #################################################################### // Эта часть кода для программирования своей стратегии в открытом коде // This part of the code for programming your strategy in open source // // Здесь создаем наш фильтр для фильтрации сигналов. Заполняем буферы данных // Here we create our filter for signal filtering. Fill in the data buffers // #################################################################### // for example: //* if(sigInd==1) //* { // // Заполняем данные, // We fill in the data // //* if(CopyBuffer(h_custom,0,0,3+ShiftIndicator,custom1_buffer)<3+ShiftIndicator) //* return(0); //* if(!ArraySetAsSeries(custom1_buffer,true)) //* return(0); //* if(CopyBuffer(h_custom2,0,0,2+ShiftIndicator,custom2_buffer)<2+ShiftIndicator) //* return(0); //* if(!ArraySetAsSeries(custom2_buffer,true)) //* return(0); // // Здесь пишем нашу стратегию, в данном примере это пересечение двух линий, // Here we write our strategy, in this example it is the intersection of two lines // //* if(custom1_buffer[ShiftIndicator]!=0 && custom2_buffer[ShiftIndicator]!=0) //* { //* Alert(" Поздравляем! Вы сделали урок, который показывает программирование своей стратегии!"); //* Alert(" Congratulations! You have done a lesson that shows the programming of your strategy!"); //* } //* if(custom1_buffer[ShiftIndicator]>custom2_buffer[ShiftIndicator]) //* sig=1; //* else if( custom1_buffer[ShiftIndicator]<custom2_buffer[ShiftIndicator]) //* sig=-1; //* else sig=0; // // Записываем данные, которые будут отображаться в журнале, при открытии позиций по сигналу // We write down the data that will be displayed in the log, when you open positions on a signal // //* InfoAboutSignal=InfoAboutSignal+" "+"sigInd="+(string)sigInd+" TF="+(string)TF+" Symbol="+symToWork3+" sig="+(string)sig+" "+__FUNCTION__+" " //* +" custom1_buffer[ShiftIndicator+1]="+(string)custom1_buffer[ShiftIndicator+1] //* +" custom2_buffer[ShiftIndicator+1]="+(string)custom2_buffer[ShiftIndicator+1] //* +" custom1_buffer[ShiftIndicator]="+(string)custom1_buffer[ShiftIndicator] //* +" custom2_buffer[ShiftIndicator]="+(string)custom2_buffer[ShiftIndicator]; // //--- возвращаем торговый сигнал //* return(sig); //* }
В программировании кода на этом шаге нет ничего сложного и он похож на предыдущий шаг.
Отличие лишь в том, что на этом шаге Вы программируете свои индикаторы в роли Фильтра.
Вы можете не указывать сигналы по индикатору, а указать только фильтр. Или наоборот! Все зависит от стратегии.