Спасибо.
Очень понятно.
Очень понятно.
Простите, автор. Советник без реверса и с выбираемым лотом.
Советник с выбираемым лотом -> изменения в LongShortExpertMACD.mq5:
//+------------------------------------------------------------------+ //|LongShortExpertMACD.mq5 | //| Copyright 2009-2013, MetaQuotes Software Corp. - 2013, jlwarrior | //| https://login.mql5.com/en/users/jlwarrior | //+------------------------------------------------------------------+ #property copyright "2009-2013, MetaQuotes Software Corp - 2013, jlwarrior" #property link "https://login.mql5.com/en/users/jlwarrior" #property version "1.00" //+------------------------------------------------------------------+ //| Включить| //+------------------------------------------------------------------+ #include <Expert\LongShortExpertModified.mqh> #include <Expert\Signal\SignalMACD.mqh> #include <Expert\Trailing\TrailingNone.mqh> #include <Expert\Money\MoneyFixedLot.mqh> //+------------------------------------------------------------------+ //| Входы| //+------------------------------------------------------------------+ //--- входные данные для эксперта input string Inp_Expert_Title ="Long/Short ExpertMACD"; int Expert_MagicNumber =10981; bool Expert_EveryTick =false; input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //короткие / длинные / обе позиции разрешены //--- Входы MACDExpert по умолчанию input int Inp_Signal_MACD_PeriodFast =12; // Быстрый период MACD input int Inp_Signal_MACD_PeriodSlow =24; // Период медленного MACD input int Inp_Signal_MACD_PeriodSignal=9; // Сигнальный период MACD input double Inp_Money_Lot =0.5; // Стоимость лота input int Inp_Signal_MACD_TakeProfit =50; // Значение тейк-профита input int Inp_Signal_MACD_StopLoss =20; // Стоимость стоп-лосса //+------------------------------------------------------------------+ //| Глобальный объект эксперта| //+------------------------------------------------------------------+ CLongShortExpertModified ExtExpert; //специфический разработанный подкласс CExpert //+------------------------------------------------------------------+ //| Функция инициализации эксперта| //+------------------------------------------------------------------+ int OnInit(void) { //--- Инициализация эксперта if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- не удалось printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); } // Специфический параметр, контролирующий, какие позиции разрешены ExtExpert.SetAvailablePositions(Inp_Allowed_Positions); //--- Создание объекта сигнала CSignalMACD *signal=new CSignalMACD; if(signal==NULL) { //--- не удалось printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- Добавьте сигнал эксперту (будет удален автоматически)) if(!ExtExpert.InitSignal(signal)) { //--- не удалось printf(__FUNCTION__+": error initializing signal"); ExtExpert.Deinit(); return(-3); } //--- Установите параметры сигнала signal.PeriodFast(Inp_Signal_MACD_PeriodFast); signal.PeriodSlow(Inp_Signal_MACD_PeriodSlow); signal.PeriodSignal(Inp_Signal_MACD_PeriodSignal); signal.TakeLevel(Inp_Signal_MACD_TakeProfit); signal.StopLevel(Inp_Signal_MACD_StopLoss); //--- Проверьте параметры сигнала if(!signal.ValidationSettings()) { //--- не удалось printf(__FUNCTION__+": error signal parameters"); ExtExpert.Deinit(); return(-4); } //--- Создание объекта в хвосте CTrailingNone *trailing=new CTrailingNone; if(trailing==NULL) { //--- не удалось printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-5); } //--- Добавьте конец к эксперту (будет удален автоматически)) if(!ExtExpert.InitTrailing(trailing)) { //--- не удалось printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-6); } //--- Установите параметры в конце //--- Проверьте параметры в конце строки if(!trailing.ValidationSettings()) { //--- не удалось printf(__FUNCTION__+": error trailing parameters"); ExtExpert.Deinit(); return(-7); } //--- Создание денежного объекта CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- не удалось printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-8); } //--- Добавьте деньги эксперту (будут удалены автоматически)) if(!ExtExpert.InitMoney(money)) { //--- не удалось printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-9); } //--- Установите параметры денег money.Lots(Inp_Money_Lot); //--- Проверьте параметры денег if(!money.ValidationSettings()) { //--- не удалось printf(__FUNCTION__+": error money parameters"); ExtExpert.Deinit(); return(-10); } //--- Настройка всех необходимых индикаторов if(!ExtExpert.InitIndicators()) { //--- не удалось printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-11); } //--- успех return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Функция деинициализации эксперта| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtExpert.Deinit(); } //+------------------------------------------------------------------+ //| Функция-обработчик события "tick"| //+------------------------------------------------------------------+ void OnTick(void) { ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| Функция-обработчик события "торговля"| //+------------------------------------------------------------------+ void OnTrade(void) { ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| Функция-обработчик события "timer"| //+------------------------------------------------------------------+ void OnTimer(void) { ExtExpert.OnTimer(); } //+------------------------------------------------------------------+
Советник без реверса -> изменения в LongShortExpertModified.mqh:
//+------------------------------------------------------------------+ //|LongShortExpertModified.mqh | //|Copyright 2013, jlwarrior | //| https://login.mql5.com/en/users/jlwarrior | //+------------------------------------------------------------------+ #include <Expert\Expert.mqh> //+------------------------------------------------------------------+ //| Перечисление для управления длинными / короткими или обеими позициями. //| разрешено открывать| //+------------------------------------------------------------------+ //--- enum ENUM_AVAILABLE_POSITIONS { LONG_POSITION, SHORT_POSITION, BOTH_POSITION }; //+------------------------------------------------------------------+ //| Класс CLongShortExpertModified.| //| Назначение: Позволяет открывать только длинные / короткие / обе позиции | //| Происходит от класса CExpert (изменяет только методы Open / Reverse)| //+------------------------------------------------------------------+ class CLongShortExpertModified : public CExpert { protected: ENUM_AVAILABLE_POSITIONS m_positions; public: CLongShortExpertModified(void); ~CLongShortExpertModified(void); virtual bool CheckOpen(void); void SetAvailablePositions(ENUM_AVAILABLE_POSITIONS newValue){m_positions=newValue;}; }; //+------------------------------------------------------------------+ //| Конструктор| //+------------------------------------------------------------------+ CLongShortExpertModified ::CLongShortExpertModified(void) : m_positions(BOTH_POSITION) { } //+------------------------------------------------------------------+ //| Деструктор| //+------------------------------------------------------------------+ CLongShortExpertModified ::~CLongShortExpertModified(void) { } //+------------------------------------------------------------------+ //| Проверьте открытые позиции на наличие разрешенных.| //+------------------------------------------------------------------+ bool CLongShortExpertModified :: CheckOpen() { switch(m_positions) { case LONG_POSITION: return CheckOpenLong(); // Проверьте только новые длинные позиции case SHORT_POSITION: return CheckOpenShort(); //проверьте только новые короткие позиции default: return CExpert::CheckOpen(); // поведение по умолчанию } } //+------------------------------------------------------------------+
где находится поле для ввода кода акции для Long x short?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Long Short only EA based on CExpert:
Советник на базе CExpert, позволяющий открывать только длинные или только короткие ордера.
Автор: Jose