С дубликатами тоже всё не обязательно. Если хочешь кодить "по-взрослому", можешь использовать свои классы для каждой из стратейгий. Будет у тебя что-то вроде "Стратегия1.ОтправитьОрдер" и "Стратегия2.ОтправитьОрдер". Разные имена объектов и значения переменных, проще контролировать.
Можно, конечно, и копи-пастом заняться, но тут главное не запутаться в переменных.
Добрый день!
Начал изучать язык программирования MQL для МТ4 восемь дней назад и уже написал весьма прибыльный советник, и я решил пойди дальше.
Возможно ли в 1 советник поставить несколько стратегий ? даже если у них похожие стратегий?.
Я сейчас покажу примерно как я себе это представляю, а Вы подскажите пожалуйста правильно ли моя логика и каковы последствия "подводные камни" ?
Также я понимаю что в большинства случаях придется делать дубликат функций для каждой стратегий.
Код не выкладывается (ошибка ПК или сайта не знаю), вылаживаю скриншот.
Добрый день!
Начал изучать язык программирования MQL для МТ4 восемь дней назад и уже написал весьма прибыльный советник, и я решил пойди дальше.
Возможно ли в 1 советник поставить несколько стратегий ? даже если у них похожие стратегий?.
Я сейчас покажу примерно как я себе это представляю, а Вы подскажите пожалуйста правильно ли моя логика и каковы последствия "подводные камни" ?
Также я понимаю что в большинства случаях придется делать дубликат функций для каждой стратегий.
Код не выкладывается (ошибка ПК или сайта не знаю), вылаживаю скриншот.
По поводу "только обработки 1 строки" , это из за "else"? и по поводу "если мартин своё не отработал и вы переключитесь на скальп последствия будут не предсказуемые" не совсем ясно,
у них же разные магики как скальп может принять ордера мартина?
и по поводу стратегий, это было так для примера. на самом деле пока задумано 2 режима.( главный принцип сетка)
1) обычный, на 1 ордер в рынке " по тренду".
2) двух сторонняя сетка .
По поводу "только обработки 1 строки" , это из за "else"? и по поводу "если мартин своё не отработал и вы переключитесь на скальп последствия будут не предсказуемые" не совсем ясно,
у них же разные магики как скальп может принять ордера мартина?
и по поводу стратегий, это было так для примера. на самом деле пока задумано 2 режима.( главный принцип сетка)
1) обычный, на 1 ордер в рынке " по тренду".
2) двух сторонняя сетка .
Если убрать else будет: Если подходит вариант один - использовать его. Если подходит вариант два - использовать его.
Чтобы совы работали с разными маджиками надо будет делать проверку на соответствие вродe
for(int i=0,i<OrdersTotal(),i++){ if(!OrderSelect(i,SELECT_BY_POS)) continue; if(OrderMagicNumber()!=YOUR_MAGIC_NUMBER) continue; //Тут расположена главная логика обработки ордеров }
Да, из-за else. Это исключающее условие: Если подходит вариант один - использовать его, иначе если подходит вариант два - использовать его.
Если убрать else будет: Если подходит вариант один - использовать его. Если подходит вариант два - использовать его.
Чтобы совы работали с разными маджиками надо будет делать проверку на соответствие вродe
А как быть с Ретурнами? может убрать их? тик зайдет в 1 стратегию выполнит ее и пойдет в Ретурт так и не дойдя до 2 стратегий (это в случаях когда условия совпадают, а они будут совпадать каждую 5-9 сделку)
С магиками я думаю так, делать копию всех функции и там вместо магика переменной общей указывать магик той или иной стратегий. Если кто знает вариант по проще буду благодарен
А как быть с Ретурнами? может убрать их? тик зайдет в 1 стратегию выполнит ее и пойдет в Ретурт так и не дойдя до 2 стратегий (это в случаях когда условия совпадают, а они будут совпадать каждую 5-9 сделку)
С магиками я думаю так, делать копию всех функции и там вместо магика переменной общей указывать магик той или иной стратегий. Если кто знает вариант по проще буду благодарен
Да, return означает возврат результата работы текущей функции. Чтобы избежать этого перенести return после блоков if() или выдели логику работы каждого сова в отдельную функцию. К примеру
int start(){ if(Startegy1Enabled) StrategyOne(); if(Startegy2Enabled) StrategyTwo(); } void StrategyOne(){ //Основной код стратегии 1 return; //По желанию } void StrategyTwo(){ //Основной код стратегии return; }
В таком случае происходит return из вызываемой функции, а сама функция start не завершается. Но тут очень важен порядок вызова функции. Т.к. наш код работает только в 1 поток и работает синхронно, мы будем ждать пока не завершится работа стратегии1, а только потом будет вызывана стратегия2.
Вот тебе хороший вариант, более универсальный
#define STRATEGY1MAGIC 123 #define STRATEGY2MAGIC 456 void CommonFunction(int magic){ }
Есть в программировании принцип DRY, расшифровывается как (do not repeat yourself). А значит это что копировать функции по 10 раз - плохая идея. Да и смысл в функции теряется.
Да, return означает возврат результата работы текущей функции. Чтобы избежать этого перенести return после блоков if() или выдели логику работы каждого сова в отдельную функцию. К примеру
В таком случае происходит return из вызываемой функции, а сама функция start не завершается. Но тут очень важен порядок вызова функции. Т.к. наш код работает только в 1 поток и работает синхронно, мы будем ждать пока не завершится работа стратегии1, а только потом будет вызывана стратегия2.
Вот тебе хороший вариант, более универсальный
Есть в программировании принцип DRY, расшифровывается как (do not repeat yourself). А значит это что копировать функции по 10 раз - плохая идея. Да и смысл в функции теряется.
Спс но мне привычнее в старом коде писать. так норм ? Коды не пишутся мать их за ногу
скрин
Спс но мне привычнее в старом коде писать. так норм ? Коды не пишутся мать их за ногу
скрин
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Начал изучать язык программирования MQL для МТ4 восемь дней назад и уже написал весьма прибыльный советник, и я решил пойди дальше.
Возможно ли в 1 советник поставить несколько стратегий ? даже если у них похожие стратегий?.
Я сейчас покажу примерно как я себе это представляю, а Вы подскажите пожалуйста правильно ли моя логика и каковы последствия "подводные камни" ?
Также я понимаю что в большинства случаях придется делать дубликат функций для каждой стратегий.
Код не выкладывается (ошибка ПК или сайта не знаю), вылаживаю скриншот.