Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Сейчас для закрытия позиций использую такую функцию. Измерять не приходится, когда начинается закрытие, видно что сильно отстает он инструмента mt. Может у вас есть на примере функция проще?
Это самый худший вариант. Попробуйте то-же самое, только без использования СБ. Будет чуток быстрей.
Потом вместо закрытия позиций открывайте противоположные таким-же лотом в асинхронном режиме. OrderSendAsync()
А какая разница? что в одну что в другую сторону смысл будет один, просто закрываться будет в другую сторону
А какая разница? что в одну что в другую сторону смысл будет один, просто закрываться будет в другую сторону
После закрытия позиции она уходит из списка открытых позиций. К примеру есть 2 открытые позиции.
m_position.SelectByIndex(0)
Вернет первую позицию, которую закроет
После закрытия осталась 1 открытая позиция и
m_position.SelectByIndex(1)
вернет ошибку. И выход из цикла. Но осталась отрытая позиция, которая будет закрываться при следующем тике.
Следовательно, на каждом тике у Вас будет закрываться только половина открытых позиций. Отсюда большое время закрытия большого количества позиций.
После закрытия позиции она уходит из списка открытых позиций. К примеру есть 2 открытые позиции.
Вернет первую позицию, которую закроет
После закрытия осталась 1 открытая позиция и
вернет ошибку. И выход из цикла. Но осталась отрытая позиция, которая будет закрываться при следующем тике.
Следовательно, на каждом тике у Вас будет закрываться только половина открытых позиций. Отсюда большое время закрытия большого количества позиций.
Спасибо за разьяснение, попробую изменить)
Про ошибку в цикле, идущем по возрастанию, уже объяснили выше.
Использую у себя такой метод в классе, который отвечает за открытие/закрытие позиций. Он закрывает все позиции по одному символу с нужным магиком:
Если вам нужно просто закрыть абсолютно все позиции, то код можно упростить примерно так:
В этой функции даже если какая-то операция закрытия закончится неудачно, все открытые позиции будут перебираться повторно, пока не будут закрыты все.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Как закрыть позиции без перебора в советнике?
Yuriy Bykov, 2024.04.10 14:51
Про ошибку в цикле, идущем по возрастанию, уже объяснили выше.
А если внимательнее посмотреть? Оператор break там неспроста. Он прерывает цикл for, как только найдена первая подходящая для закрытия позиция. А дальше цикл while снова запускает for для поиска следующей одной позиции для закрытия. В этом случае действительно не важно, с какой стороны списка позиций начинать поиск. Такой метод продолжает работать корректно при одновременной работе на счёте нескольких советников и торговле руками - советник будет закрывать только свои позиции.
Во втором коде порядок изменён, так как надо точно закрыть все-все позиции.
А если внимательнее посмотреть? Оператор break там неспроста. Он прерывает цикл for, как только найдена первая подходящая для закрытия позиция. А дальше цикл while снова запускает for для поиска следующей одной позиции для закрытия. В этом случае действительно не важно, с какой стороны списка позиций начинать поиск. Такой метод продолжает работать корректно при одновременной работе на счёте нескольких советников и торговле руками - советник будет закрывать только свои позиции.
Во втором коде порядок изменён, так как надо точно закрыть все-все позиции.
Смотрел невнимательно, признаюсь.