MetaTrader 5 Python User Group - как использовать Python в Метатрейдере - страница 85

 
Sivoraksha-ia:
Странно, но тоже пустая таблица прилетает. В самом терминале как в квике ничего открывать для работы выгрузок не нужно?

Любой график с нужной парой (для тиков).

 
Всем привет,


У меня проблема со структурой OrderSendResult, возвращаемой после запроса order_send () с использованием Python API. Одно из возвращаемых полей - это «комментарий», который должен содержать комментарий брокера к операции. Однако это поле возвращает тот же комментарий, который был передан запросу, а не возврат брокера, как должен.


Чтобы воспроизвести ошибку, сделайте следующее:

1. Создайте запрос, в результате которого будет создан комментарий. Заполните запрос «комментарий» фиктивным комментарием.

2. Отправьте запрос с помощью команды order_send () из Python API.

3. В возвращенном объекте OrderSendResult проверьте поле «комментарий».


В поле «комментарий» будет передан тот же комментарий, тогда как в нем должен быть комментарий, возвращенный брокером, который можно проверить на вкладке «Журнал» Терминала MT5.

Может кто это подтвердить? Есть ли способ получить комментарий брокера?



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

Описание в Документации добавите?

Добавлено

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

    Хочу организовать на python виртуальный учет сделок. Нужно это для того, чтобы отличать хар-ки различных торговых стратегий. Используемый брокер - Открытие. Неттинга нет. Позиция по инструменту общая, стоп и тэйк у позиции общий. Решил делать так - Открываю по какой либо стратегии сделку по рынку каким либо обьемом, без стопа и тэйка. Вместо них ставлю стоповый и лимитный ордера такого же обьема. Тикеты полученых ордеров отдельно запоминаю в таблице. Каждый определенный промежуток времени делаю orders = mt5.orders_get(symbol=symb), получаю список известных тикетов отложек orders.ticket.tolist()

    Далее прохожусь по моей таблице сделок и выясняю если тикет стопового или тикет лимитного ордера еще существует в полученном списке открытых ордеров. Если нет стопа - соотв виртуально сработал стоп-лосс, если нет лимитта - значит тэйк профит. Далее я удаляю из своей таблицы записи по данной сделке, и удаляю оставшуюся отложку для этой сделки. И все отрабатывает кроме одного - я не знаю как мне посчитать виртуальную прибыль по этой сделке. На фото видно как sell stop выставлен по цене 141430, но в реале случилось проскальзывание и ценой открытия является 141350. Я делаю запрос по сработавшей отложке : deals = mt5.history_orders_get(ticket=246525084) (для случая как на фото, этот тикет система запомнила при выставлении), но в ответе нет информации об исполнении ордера, только информация о его выставлении. По истории видно что реально sell stop исполнен сделкой с тикетом 15215696, и можно извлечь нужную цены сделав запрос по этому тикету от сделки. Но для начала мне нужно как то найти этот тикет от сделки. Как сопоставить этот тикет сделки с тикетом отложенного ордера (sell stop) ?

     
    Продвинулся в своем вопросе. Запросив историю закрытых позиций mt5.history_deals_get можно среди orders найти тикет закрытой отложки и цену ее исполнения. Это срабатывает если я указываю в параметрах диапазон времени. Так же есть вызов этой же функции с передачей тикета ордера в нее -  mt5. history_deals_get(ticket=TICKET) - но ответ (-2, 'Terminal: Invalid params'). Функция с таким параметром вообще работает?
     
    Уважаемые разработчики, не могли бы вы прокомментировать мой предыдущий вопрос? Функция  history_deals_get(ticket=TICKET) не работает. Ответ всегда  (-2, 'Terminal: Invalid params'). Та же функция но с другим параметром history_deals_get(position=POSITION) работает, но мне нужно найти сделку именно по тикету ордера.
     
    Есть ли возможность сделать питон апи новостного календаря с доступом к истории, для проведения исследований?
     
    Уважаемые, есть те, кто на MOEX торгует? У кого такая же проблема, что при инициализации подключения к терминалу, он переподключается к серверу и просит ввести пароль к сертификату? 
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    • www.mql5.com
    initialize - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    order_send и order_check  возвращают None. Не понимаю куда смотреть. Подскажите что не так. Пожалуйста.

    код

    import MetaTrader5 as mt
    
    if not mt.initialize(login=12345):#
        print("initialize() failed")
        mt.shutdown()
    
    terminal_info=mt.terminal_info()
    if terminal_info!=None:
        print(f"terminal {'''connected''' if terminal_info.connected else '''disconnected'''}")
    print("version: ",mt.version())
    
    info = mt.symbol_info("Si-6.21")
    print(f"Si-6.21  {info.bid=}  {info.ask=}")
    
    request = {
        "action": mt.TRADE_ACTION_PENDING,
        "symbol": "Si-6.21",
        "volume": 1,
        "type": mt.ORDER_TYPE_BUY_LIMIT,
        "price": 77300,
        "sl": 0,
        "tp": 0,
        "deviation": 0,
        "magic": 123,
        "comment": "test",
        "type_time": mt.ORDER_TIME_DAY,
        "type_filling": mt.ORDER_FILLING_RETURN,
    }
    
    check = mt.order_check(request)
    print("order check: ",check)
    
    ret = mt.order_send(request)
    print("order send: ", ret)
    if not ret is None:
        print(f" retcode:{ret.retcode}")
    

    Вывод

    terminal connected
    version:  (500, 2875, '02 Apr 2021')
    Si-6.21  info.bid=77770.0  info.ask=77773.0
    order check:  None
    order send:  None
    
    Process finished with exit code 0


    Удалось решить вопрос. В request поля volume,price,sl,tp должны иметь тип float. Вот так все работает

    request = {
        "action": mt.TRADE_ACTION_PENDING,
        "symbol": "Si-6.21",
        "volume": 1.,
        "type": mt.ORDER_TYPE_BUY_LIMIT,
        "price": 77300.,
        "sl": 0.,
        "tp": 0.,
        "deviation": 0,
        "magic": 123,
        "comment": "test",
        "type_time": mt.ORDER_TIME_DAY,
        "type_filling": mt.ORDER_FILLING_RETURN,
    }
     

    Коллеги подскажите пожалуйста:

    1. Как из mt5 в Python можно вытащить доступные интервалы торговых сессий по инструментам и периодически их обновлять?

    2. Ожидать ли появления в библиотеке метода для запроса и изменения Trailing Stop по открытым позициям?

    Причина обращения: