Добрый день.
Возможно в архивах форума этот вопрос был многократно задан, однако прямого ответа я не нашел.
Итак, есть открытая позиция, допустим по 'EURUSD' (symbol = 'EURUSD')
Есть ли какая то функция или запрос с ответом True/False, открыта ли любая позиция по данной паре в терминале Metatrader5.
... # получим открытые позиции на USDCHF positions=mt5.positions_get(symbol="USDCHF") if positions==None: print("No positions on USDCHF, error code={}".format(mt5.last_error())) elif len(positions)>0: print("Total positions on USDCHF =",len(positions)) # выведем все открытые позиции for position in positions: print(position)
- www.mql5.com
Только надо учитывать, что возможны "гонки", что иногда приводит к появлению состояний, когда ордер, открывающий позицию, отработал и его уже нет в списке активных (и, возможно, ещё нет в истории), а позиция ещё не появилась. Аналогично с закрывающим ордером.
Вы про асинхронные операции говорите или не только?
(я не в контексте питона уточнаю - без использования питона)Вы про асинхронные операции говорите или не только?
(я не в контексте питона уточнаю - без использования питона)Нет, обычные. В том числе при использовании класса CTrade из стандартной библиотеки.
Если не принимать специальных мер (в простейшем случае - внесение небольшой задержки), возможны эффекты в виде задвоения позиций и т.п.
Нет, обычные. В том числе при использовании класса CTrade из стандартной библиотеки.
Если не принимать специальных мер (в простейшем случае - внесение небольшой задержки), возможны эффекты в виде задвоения позиций и т.п.
Вы не знаете, может ли это возникнуть на следующем OnTick? Или только в пределах выполнения одного и того же OnTick?
То есть, может ли быть такое, что на текущем OnTick поторговали, а на следующем OnTick ордер/позиция все еще потеряны?
Только надо учитывать, что возможны "гонки", что иногда приводит к появлению состояний, когда ордер, открывающий позицию, отработал и его уже нет в списке активных (и, возможно, ещё нет в истории), а позиция ещё не появилась. Аналогично с закрывающим ордером.
Гонки присутствуют. Соответственно следующий вопрос. Есть ли "правильный алгоритм" по отслеживанию наличия следующего бара, допустим в Python. А так же борьба с гонками в открытии позиции?
Гонки присутствуют. Соответственно следующий вопрос. Есть ли "правильный алгоритм" по отслеживанию наличия следующего бара, допустим в Python. А так же борьба с гонками в открытии позиции?
С Python не работаю, не вижу смысла привязывать к быстрому MQL5 более медленную систему, пока хватает средств самого MQL5.
"Классический" алгоритм обнаружения нового бара - сохранение времени бара (напр., в статической переменной). Если время текущего бара с ним не совпало, значит, бар новый (сохраняем его время).
С гонками каждый борется по своему, простейший вариант - задержка между отправкой рыночного ордера и проверкой позиции.
Я в своих роботах храню/отслеживаю состояние ордеров от отправки до появления в истории. Также, каждый робот отслеживает сделки по своим ордерам и хранит свою текущую позицию (торгую на бирже, там неттинг, приходится так делать, если на одном символе торгуют несколько роботов, да ещё возможна ручная торговля). После каждого изменения состояния робота и при выходе оно сохраняется в файл, а при старте загружается и синхронизируется с реальным (за время отсутствия робота какие-то ордера могли сработать или истечь).
С Python не работаю, не вижу смысла привязывать к быстрому MQL5 более медленную систему, пока хватает средств самого MQL5.
"Классический" алгоритм обнаружения нового бара - сохранение времени бара (напр., в статической переменной). Если время текущего бара с ним не совпало, значит, бар новый (сохраняем его время).
С гонками каждый борется по своему, простейший вариант - задержка между отправкой рыночного ордера и проверкой позиции.
Я в своих роботах храню/отслеживаю состояние ордеров от отправки до появления в истории. Также, каждый робот отслеживает сделки по своим ордерам и хранит свою текущую позицию (торгую на бирже, там неттинг, приходится так делать, если на одном символе торгуют несколько роботов, да ещё возможна ручная торговля). После каждого изменения состояния робота и при выходе оно сохраняется в файл, а при старте загружается и синхронизируется с реальным (за время отсутствия робота какие-то ордера могли сработать или истечь).
Python шире в возможностях по моим требованиям. Кроме "классического" вариантов оптимальных нет? У меня стоит задержка на 5 сек, но все ровно гонки не уходят.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Возможно в архивах форума этот вопрос был многократно задан, однако прямого ответа я не нашел.
Итак, есть открытая позиция, допустим по 'EURUSD' (symbol = 'EURUSD')
Есть ли какая то функция или запрос с ответом True/False, открыта ли любая позиция по данной паре в терминале Metatrader5.