Особенности языка mql5, тонкости и приёмы работы - страница 97
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Так вроде как было уже решение в КБ:
Но не для скрипта. Да и для советника довольно тяжко, т.к. предлагается вылетать из OnTick при неопределенной ситуации. А эта ситуация может случиться где-то глубоко в потрохах советника. И мало того, что оттуда надо будет выбираться, чтобы выйти по итогу из OnTick, так еще там может понадобиться открыть сразу, например, две позиции (а-ля корзина). Но при этом вторую открывать только в случае, если успешно открылась первая. При таком раскладе вылетать из OnTick после первого же OrderSend, мягко говоря, плохо.
Но не для скрипта. Да и для советника довольно тяжко, т.к. предлагается вылетать из OnTick при неопределенной ситуации. А это ситуацию может случиться где-то глубоко в потрохах советника. И мало того, что оттуда надо будет выбираться, чтобы выйти по итогу из OnTick, так еще там может понадобиться открыть сразу, например, две позиции (а-ля корзина). Но при этом вторую открывать только в случае, если успешно завершилась первая. При таком раскладе вылетать из OnTick после первого же OrderSend, мягко говоря, плохо.
Скрипт можно тормознуть до явного получения количества позиций.
Советник... В советнике придётся учитывать сиё в логике функции открытия позиций - они вызываются из советника с возвратом результата своей работы. Резёльтат при наличии маркет-ордера возвращается false. И далее советник работает по заложенной в него логике. Да, согласен, в некоторые уже готовые сложнее внедрить, чем сразу учитывать такую вероятность. Но ветка для того и существует здесь - для чтобы другие знали и использовали знания.
Скрипт можно тормознуть до явного получения количества позиций.
Можно тормознуть и советник.
Советник... В советнике придётся учитывать сиё в логике функции открытия позиций - они вызываются из советника с возвратом результата своей работы. Резёльтат при наличии маркет-ордера возвращается false. И далее советник работает по заложенной в него логике. Да, согласен, в некоторые уже готовые сложнее внедрить, чем сразу учитывать такую вероятность. Но ветка для того и существует здесь - для чтобы другие знали и использовали знания.
Надо просто подождать немного до момента, когда пройдет сделка. Выходить из ТС до следующего тика - жуткое решение.
Можно тормознуть и советник.
Надо просто подождать немного до момента, когда пройдет сделка. Выходить из ТС до следующего тика - жуткое решение.
Ну в том коде как раз и выполнено ожидание на заданное время. Но нельзя же часами ожидать - ждёт некоторое время заданное количество попыток получения валидного окружения, потом выходит с результатом. Иначе, если долго ждать, то торговое окружение может сильно измениться, и уже поздно будет пить боржоми :)
Ну в том коде как раз и выполнено ожидание на заданное время. Но нельзя же часами ожидать - ждёт некоторое время заданное количество попыток получения валидного окружения, потом выходит с результатом. Иначе, если долго ждать, то торговое окружение может сильно измениться, и уже поздно будет пить боржоми :)
Да, я не заметил ожидания. Годится. Тогда был куда внимательнее...
Имхо, ориентироваться на PositionsTotal() - это в любом случае неправильное решение. В процессе обработки твоего запроса могла открыться/закрыться другая позиция на счёте, например если работают несколько советников. Что мешает проверять ответ от сервера, как оно и задумано разработчиками?
Фактически я вообще не вижу особого смысла в PositionsTotal кроме как для общего контроля. Советник должен чётко контролировать тикеты своих позиций и работать только по ним.
После использования ChartIndicatorGet() обязательно должна быть вызвана функция IndicatorRelease(handle). Об этом написано в примере к функции ChartIndicatorGet(), но нет в примечании к функции! Разработчики хотели поправить документацию, но так этого и не сделали. В связи с закрытием СД, возможно, этого так и не будет сделано.
Лично сталкивался с проблемой "повисшего" индикатора. Из разговора с СД:
А, т.е. когда я запустил на чарте индикатор Х, он перебрал все индикаторы и обнаружил с помощью функции ChartIndicatorGet() копию - произвел инкремент счетчика. Дальше, я удалил первый индикатор Х - декремент счетчика, а про второй, по сути, забыл - получил "повисший" индикатор, т.к. его хэндл остался неочищенным?
Да. Именно так и получается. Поэтому OnDeinit не отрабатывает.
Forum on trading, automated trading systems and testing trading strategies
How to import historical data into csv to symbol custom using CustomRatesUpdate?
fxsaber, 2018.08.19 12:01
На английской части форума показали
а смысл? сэкономить пару байт памяти? тем более с double получатся другие числа (== будет false) а у целых может быть переполнение