Не получается получить список открытых ордеров в питоне

 

Пытаюсь получить открытые ордера print(mt.orders_get()) возвращает пустой кортеж, хотя в данный момент есть открытые. 

При попытке получить все одрера из истории, возвращается None. print(mt.history_orders_get(date_from=datetime(2023, 6, 14), date_to=datetime.now()))

Глянул через метод last_error(), в чем дело, получил (-2, 'Invalid arguments'). Подскажите как починить?

Весь код:

import MetaTrader5 as mt
from threading import Thread
from configparser import ConfigParser
from time import sleep
from datetime import datetime


def initial(path, login, password, server):
    print('OK' if mt.initialize(path=path, login=login, password=password, server=server)
          else f'Initialize failed, error code: {mt.last_error()}')


cfg = ConfigParser()
cfg.read('settings.ini')


def deriv_server():
    initial(
        path=cfg['REAL']['PATH'], login=int(cfg['REAL']['LOGIN']),
        password=cfg['REAL']['PASS'], server=cfg['REAL']['SERVER'],
    )
    
    print(mt.account_info())
    mt.shutdown()


def demo_server():
    initial(
        path=cfg['DEMO_2']['PATH'], login=int(cfg['DEMO_2']['LOGIN']),
        password=cfg['DEMO_2']['PASS'], server=cfg['DEMO_2']['SERVER'],
    )
    
    # print(mt.orders_get())
    print(mt.history_orders_get(date_from=datetime(2023, 6, 14), date_to=datetime.now()))
    print(mt.last_error())
    mt.shutdown()


# Thread(target=deriv_server).start()
Thread(target=demo_server).start()
Документация по MQL5: Python интеграция / history_orders_get
Документация по MQL5: Python интеграция / history_orders_get
  • www.mql5.com
history_orders_get - Python интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Судя по всему, вы путаете ордеры и позиции. Почитайте справку и статьи
 
Rashid Umarov #:
Судя по всему, вы путаете ордеры и позиции. Почитайте справку и статьи
Ничего я не путаю и вообще если по существу нечего ответить лучше пройти мимо
 
Удивлю. В MQL5 не бывает открытых ордеров. 
 

Алексей Тарабанов #:
Удивлю. В MQL5 не бывает открытых ордеров. 

ок, открываем доки по методу orders_get() и читаем/просвещаемся:

Получает действующие ордеры с возможность фильтрации по символу или тикету. Существует 3 варианта вызова.

Вызов без параметров. Возвращает действующие ордеры по всем символам.

Да, я заменил слово действующие открытми и что? Суть от этого не изменилась, но вместо того, чтобы указать на решение, мы конечно же сошлемся на справку и статьи, которые не раз были прочитаны, но толку от этого 0, потому что результат как был таким так и остался

Документация по MQL5: Python интеграция / orders_get
Документация по MQL5: Python интеграция / orders_get
  • www.mql5.com
orders_get - Python интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Ордера - это отложенные. А рыночные - это позиции, и есть функция positions_get().

Рыночные ордера тоже существуют, но только в истории. 

 
Dmitry Fedoseev #:

Ордера - это отложенные. А рыночные - это позиции, и есть функция positions_get().

Рыночные ордера тоже существуют, но только в истории. 

Но как мне вытащить из истории эти ордера рыночные? метод  history_orders_get() возвращает None почему-то..., а last_error() указывает на не правильные аргументы, но я не пойму в чем их неправильность? Все делал как в иструкциях 

 
PLAYER X #:

Но как мне вытащить из истории эти ордера рыночные? метод  history_orders_get() возвращает None почему-то..., а last_error() указывает на не правильные аргументы, но я не пойму в чем их неправильность? Все делал как в иструкциях 

https://www.mql5.com/ru/docs/python_metatrader5/mt5positionsget_py

https://www.mql5.com/ru/docs/python_metatrader5/mt5historyordersget_py
Документация по MQL5: Python интеграция / positions_get
Документация по MQL5: Python интеграция / positions_get
  • www.mql5.com
positions_get - Python интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
PLAYER X:
    print(mt.history_orders_get(date_from=datetime(2023, 6, 14), date_to=datetime.now()))

Я не силён в питоне, но чисто логически так писать

    print(mt.history_orders_get(date_from=datetime(2023, 6, 14), date_to=datetime.now()))

не совсем правильно.

Попробуйте завернуть в скобки присвоение значений переменным

    print(mt.history_orders_get((date_from=datetime(2023, 6, 14)), (date_to=datetime.now())))


удалить переменные

    print(mt.history_orders_get(datetime(2023, 6, 14), datetime.now()))
 
Alexey Viktorov #:
удалить переменные

спасибо, второй вариант сработал - вызов функции/метода с позиционными аргументами. Но это очень странно потому что вызов с ключевыми аргументами также должен работать и в этом никакой логической ошибки нет. По крайней мере до сих пор во всех других либах, что я использовал, всегда работали оба варианта

 
PLAYER X #:

спасибо, второй вариант сработал - вызов функции/метода с позиционными аргументами. Но это очень странно потому что вызов с ключевыми аргументами также должен работать и в этом никакой логической ошибки нет. По крайней мере до сих пор во всех других либах, что я использовал, всегда работали оба варианта

У вас там не аргумент, а операция присваивания. Потому и Invalid arguments.

И первый вариант должен работать потому, что сначала переменной присваивается значение и это значение является аргументом. Приоритеты…