Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 2705
- Рейтинг:
- Опубликован:
- 2016.03.01 14:38
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Этот советник позволяет выбирать для открытия только длинные/короткие (или и те, и другие) позиции с помощью внесения дополнений в класс CExpert.
Прилагаются два различных файла:
- LongShortExpertModified.mqh: это расширение добавляет в класс CExpert методы CheckOpen() и CheckReverse(), что позволяет открывать только ордеры определенного вида;
- LongShortExpertMACD.mq5: этот советник — простая модификация встроенного класса ExpertMACD.mq5, позволяющая открывать только определенный тип ордеров, в соответствии со входными параметрами, и таким образом увеличивающая точность использования эксперта.
LongShortExpertModified
Эти дополнения изменяют дефолтное поведение класса CExpert, и по умолчанию позволяют работать только с определенным типом ордеров, в соответствии со следующим перечислением:
enum ENUM_AVAILABLE_POSITIONS
{
LONG_POSITION,
SHORT_POSITION,
BOTH_POSITION
};
Это перечисление будет использоваться как входные параметры для готового советника, чтобы определить, какой тип ордеров ему будет позволено открывать. Оно предназначено только для внутреннего использования и позволяет отсылать только необходимые ордера. Разворотные ордера будут обрабатываться только в случае, если разрешены оба типа — и Sell, и Buy (в списке это будет соответствовать значению BOTH_POSITION).
Чтобы этого добиться, методы CheckOpen() и CheckReverse() переписаны:
class CLongShortExpertModified : public CExpert { protected: ENUM_AVAILABLE_POSITIONS m_positions; public: CLongShortExpertModified(void); ~CLongShortExpertModified(void); virtual bool CheckOpen(void); virtual bool CheckReverse(void); void SetAvailablePositions(ENUM_AVAILABLE_POSITIONS newValue){m_positions=newValue;}; };
CheckOpen() предназначен для проверки, короткая или длинная позиция открывается (в соответствии со значением m_positions):
bool CLongShortExpertModified :: CheckOpen() { switch(m_positions) { case LONG_POSITION: return CheckOpenLong(); //проверка только новых длинных позиций case SHORT_POSITION: return CheckOpenShort(); //проверка только новых коротких позиций default: return CExpert::CheckOpen(); //поведение по умолчанию } }
CheckReverse() проверяет противоположную позицию, только если разрешена обработка обоих типов ордеров:
bool CLongShortExpertModified::CheckReverse() { switch(m_positions) { case LONG_POSITION: case SHORT_POSITION: return false; // разворот не разрешен default: return CExpert::CheckReverse(); //поведение по умолчанию } }
LongShortExpertMACD
Этот класс представляет конкретный пример советника, написанного с использованием ранее описанного класса на основании ExpertMACD EA, по умолчанию включенного в состав платформы.
Прежде всего, должен быть включен конкретный класс эксперта и переданы входные параметры. Внешний советник также связывается с подклассом, взамен дефолтного Cexpert.
#include <Expert\LongShortExpertModified.mqh> //[...] input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //short / long / both positions allowed //[...] CLongShortExpertModified ExtExpert; //отдельно разработанный подкласс CExpert
После инициализации эксперта параметры должны быть установлены в соответствии со входными значениями:
if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); } // Конкретный параметр контролирующий, какие позиции разрешены ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);
Никаких дополнительных изменений не требуется. Следующий рисунок показывает конфигурацию входных параметров для эксперта:
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/1896

Простой индикатор, показывающий время, когда рынок открыт.

Индикатор TrendSignal для MetaTrader 5.

Мультивалютная торговая система, основанная на полосах Боллинджера и техниках "ловли" тренда.

FxTrend 25EMA основывается на разнице между значениями EMA 25 в два различных момента времени.