Особенности языка mql5, тонкости и приёмы работы - страница 201
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Для таких случаев привожу несколько вспомогательных макросов.
1. Иногда возникает желание определить внутри своего макроса, был ли параметр задан или нет. IS_PARAMETER_SET(p) задает выражение, которое возвращает true если p задан (даже если строковой переменной ==NULL).
Внимание: выражение вычисляется после препроцессинга на этапе компиляции!!!, т.е. с его помощью нельзя реализовать что-то типа #ifdef IS_PARAMETER_SET(p) #else. (это относится и другим макросам ниже)
2. Если надо явно преобразовать значение параметра в строку, чтобы не получить ошибку компиляции при незаданном параметре можно использовать __EVAL_STR(p). Если p не задан или явно задан литералом NULL, возвращает "". Не применяется для массивов, структур и классов.
3. Явное преобразование параметра в число - __EVAL_NON_STR(p). Если p не задан, возвращает 0. неверно работает когда p строка!
Код и примеры использования:
Следующим кодом на демо-счете RannForex-Server можно сразу воспроизвести эту ситуацию, если запустить этот советник.
Результат.
Попутно скрипт показывает (не всегда с первого раза) баг выполнения синхронного OrderSend.
После выполнения OrderSend в течение нескольких десятков/сотен миллисекунд цена ордера старая, а не та, что успешно выставил OrderSend.
Возвращаясь к теме одинаковых тикетов, можно сделать некоторые выводы.
ЗЫ Если у кого-то получилось воспроизвести на другом торговом сервере, поделитесь названием.
Строка для поиска: Oshibka 010.
Опять возвращаюсь к вопросу о частичном исполнении.
1. Прошу уточнить по п.3: "Вы можете закрыть сформированную позицию, не удаляя Partial-отложку. Но если после этого отложка сработает, то откроет сделка с тикетом, равным тикету до этого закрытой позиции. Т.е. может быть ситуация, когда вы закрываете позицию с определенными тикетом. А потом появляется позиция снова с этим же тикетом."
В этом случае POSITION_IDENTIFIER был равен POSITION_TICKET или нет?
2. Ранее в ветке "POSITION_TICKET != POSITION_IDENTIFIER" вы демонстрировали другую логику работы MT5.
https://www.mql5.com/ru/forum/227423/page2#comment_6543129Выводы
Если считать, что это штатное поведение MT5, а не особенности хака брокера, то
По вашему опыту, проявилась ли какая-то общая закономерность, в каких случаях/режимах работы какая схема применяется МТ5?
3. В конечном итоге, были ли когда-нибудь реальные ситуации, когда "POSITION_TICKET != POSITION_IDENTIFIER" ?
При вызове макроса можно не указать какой-либо параметр (пропустить его), иногда хочется специально предусмотреть возможность работы макроса с неуказанным параметром.
Получается, что неуказанный параметр в любых макросах воспринимается компилятором, как пустая строка?
В каком-то смысле да, хотя, может быть, лучше сказать "как пустое место". Затрудняюсь четко сформулировать :-(.
А вот #p точно превращает в строку ==""
В каком-то смысле да, хотя, может быть, лучше сказать "как пустое место". Затрудняюсь четко сформулировать :-(.
А вот #p точно превращает в строку ==""
Спасибо, интересный нюанс.
@fxsaber
Посмотрите, плиз, этот вопрос: https://www.mql5.com/ru/forum/170952/page201#comment_21964923
Опять возвращаюсь к вопросу о частичном исполнении.
1. Прошу уточнить по п.3: "Вы можете закрыть сформированную позицию, не удаляя Partial-отложку. Но если после этого отложка сработает, то откроет сделка с тикетом, равным тикету до этого закрытой позиции. Т.е. может быть ситуация, когда вы закрываете позицию с определенными тикетом. А потом появляется позиция снова с этим же тикетом."
В этом случае POSITION_IDENTIFIER был равен POSITION_TICKET или нет?
2. Ранее в ветке "POSITION_TICKET != POSITION_IDENTIFIER" вы демонстрировали другую логику работы MT5.
https://www.mql5.com/ru/forum/227423/page2#comment_6543129По вашему опыту, проявилась ли какая-то общая закономерность, в каких случаях/режимах работы какая схема применяется МТ5?
3. В конечном итоге, были ли когда-нибудь реальные ситуации, когда "POSITION_TICKET != POSITION_IDENTIFIER" ?
Обе ссылки рассказывают о разных реализациях частичного исполнения. Это определяется софтом брокера, не MT5.
Несовпадение тикета и ID не встречал.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Usage
fxsaber, 2021.05.01 14:17
GetMicrosecondCount может выдать значение меньше, чем на предыдущем вызове (без ULONG-переполнения). Примеры таких ситуаций.Каждая строка получена разными советниками на трех терминалах MT4.
И на MT5 подобное происходит, но значительно реже MT4.
Будьте аккуратны.