Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Можно делать так:
Проведём небольшой эксперимент с PositionSelect() для случая отсутствия позиции:
Коду 4753 соответствует ERR_TRADE_POSITION_NOT_FOUND. Можно написать свою функцию-обёртку, эмулирующую этот случай как наличие позиции нулевого размера.
И вообще, - написать обёртки ко многим функциям библиотеки MQL5. И пользоваться только обёртками.
Также, разбить код по функциям по принципу: каждая функция выполняет только свою конкретную подзадачу. При этом, как уже заметил Yedelkin, обязательно необходимо контролировать успешность вызова функций. Один из вариантов мог бы быть таким (в данном случае в демонстрационных целях код выполнен как скрипт, поэтому используется только OnStart()):
Для UpdatePositionOneStep() нормального решения нет даже от разработчиков. Модель исполнения - асинхронная, то есть, тот факт, что OrderSend() выполнилась успешно, означает лишь, что запрос сервером принят (или только лишь принят терминалом для последующей отправки серверу) успешно. Нормальных удобных механизмов для отслеживания судьбы подобного запроса разработчиками не предусмотрено. Предлагаются какие-то костыли, вроде цикла ожидания-проверки не очевидных параметров с вызовом Sleep(), да с течением времени наблюдаются метания между полностью асинхронной и полуасинхронной моделями (то timeout скроют от пользователя и увеличат, то вообще уберут).
Однако, написание и отладка этой функции независима от остальной части алгоритма. Как только эта функция будет каким-либо образом написана и отлажена, алгоритм "увеличения позиции до заданного уровня, если она меньше этого уровня" будет работать.
Проведём небольшой эксперимент с PositionSelect() для случая отсутствия позиции:
Коду 4753 соответствует ERR_TRADE_POSITION_NOT_FOUND. Можно написать свою функцию-обёртку, эмулирующую этот случай как наличие позиции нулевого размера.
И вообще, - написать обёртки ко многим функциям библиотеки MQL5. И пользоваться только обёртками.
Также, разбить код по функциям по принципу: каждая функция выполняет только свою конкретную подзадачу. При этом, как уже заметил Yedelkin, обязательно необходимо контролировать успешность вызова функций. Один из вариантов мог бы быть таким (в данном случае в демонстрационных целях код выполнен как скрипт, поэтому используется только OnStart()):
Для UpdatePositionOneStep() нормального решения нет даже от разработчиков. Модель исполнения - асинхронная, то есть, тот факт, что OrderSend() выполнилась успешно, означает лишь, что запрос сервером принят (или только лишь принят терминалом для последующей отправки серверу) успешно. Нормальных удобных механизмов для отслеживания судьбы подобного запроса разработчиками не предусмотрено. Предлагаются какие-то костыли, вроде цикла ожидания-проверки не очевидных параметров с вызовом Sleep(), да с течением времени наблюдаются метания между полностью асинхронной и полуасинхронной моделями (то timeout скроют от пользователя и увеличат, то вообще уберут).
Однако, написание и отладка этой функции независима от остальной части алгоритма. Как только эта функция будет каким-либо образом написана и отлажена, алгоритм "увеличения позиции до заданного уровня, если она меньше этого уровня" будет работать.