- Запрет на открытие ордеров больше лимита одновременно открытых сделок
- Как торговать на нескольких парах но не более одной одновременно
- Как кодировать?
Добрый день, может кто-нибудь подсказать как правильнее всего прописать, что бы советник одновременно со всех графиков держал не более определенного количества ордеров. То есть в случае если работа идет по нескольким инструментам и одновременно поступит сигнал на открытие ордера, то робот не смог открыть одновременно больше сделок чем указано. Но тем не менее не прекращал свою работу, а по факту уменьшения количества сделок имел возможность открыть еще в пределах ограничения. Подскажите пожалуйста, буду признателен)
//+------------------------------------------------------------------+ //| Positions.mq5 | //| Copyright 2019 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019 prostotrader" #property link "https://www.mql5.com" #property version "1.00" // input int MaxPos = 10; //Максимальное кол-во позиций // int cur_pos; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { cur_pos = GetPositions(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int GetPositions() { return(PositionsTotal()); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { cur_pos = GetPositions(); if(cur_pos < MaxPos) { int cur_vol = MaxPos - cur_pos; //Сколько позиций мы можем открыть //Открываем позиции, если необходимо } } //+------------------------------------------------------------------+
Большое спасибо!
А для мкл4 подскажите?
А для мкл4 подскажите?
- 2011.02.18
- www.mql5.com
А для мкл4 подскажите?
Вы задали вопрос на MQL5 форуме, Вы задали вопрос в главном разделе - поэтому естественно получили ответ для MQL5.
Для всех вопросов по старом терминалу есть специальный раздел: MQL4 и MetaTrader 4.
Вы задали вопрос на MQL5 форуме, Вы задали вопрос в главном разделе - поэтому естественно получили ответ для MQL5.
Для всех вопросов по старом терминалу есть специальный раздел: MQL4 и MetaTrader 4.
Бывает, ошибся, спасибо!
Точно синхронизировать так не получится. Каждый график работает в своем потоке, поэтому запросто получится ситуация, когда с одного графика уже ушла и обрабатывается команда на открытие позиции, при этом уже и ордер выставлен и ответ от ДЦ положительный получен, но позиции еще по факту нет, соответственно робот абсолютно законно откроет свою позицию.
Тут кстати вопрос к разработчикам напрашивается, по поводу работы с глобальными переменными терминала.
Синхронизирована ли работа с ними?
Допустим, что я использую глобальную переменную терминала для счетчика и контроля количества открытых позиций группой экспертов. Не рискую ли я получить race condition при параллельном использовании GlobalVariableSet и GlobalVariableGet из разных экспертов/индикаторов/скриптов?
Тут кстати вопрос к разработчикам напрашивается, по поводу работы с глобальными переменными терминала.
Синхронизирована ли работа с ними?
не проверял, но вот ответ от разработчиков, только не давно писали
https://www.mql5.com/ru/forum/294975/page15#comment_11136831
- 2019.02.22
- www.mql5.com
не проверял, но вот ответ от разработчиков, только не давно писали
https://www.mql5.com/ru/forum/294975/page15#comment_11136831
Если Вы про GlobalVariableSetOnCondition, то это не то. В приведенном мною умозрительном примере, первый робот отдает команду на увеличение значения gVal на 1, но передача процессорного времени другому потоку произошла до изменения значения, а другой поток запросил значение этой переменной и на основании него принял решение, уже ложное, если, например gVal=max-1. Вуаля и лишний ордер, как пример, а то и что похуже, в зависимости от того, какая логика там висит.
Кстати, как это надежно оттестить, я с ходу не придумал, поэтому ну его нафиг, до официального разъяснения разработчиков, эти глобальные переменные для обмена информацией между программами. Я конечно понимаю, что вопрос синхронизации должен был быть учтен, но хотелось бы об этом не догадываться, а в доках прочитать ))).
Кстати, как это надежно оттестить, я с ходу не придумал
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования