Grupo de usuarios de MetaTrader 5 Python - cómo utilizar Python en Metatrader - página 85

 
Sivoraksha-ia:
Es extraño, pero también llega una mesa vacía. No es necesario abrir nada en el propio terminal como en Quicksilver para que funcione la descarga?

Cualquier gráfico con el par deseado (para los ticks).

 
Hola a todos,


Tengo un problema con la estructura OrderSendResult que se devuelve después de una solicitud order_send () utilizando la API de Python. Uno de los campos devueltos es un "comentario" que debe contener el comentario del corredor sobre la transacción. Sin embargo, este campo devuelve el mismo comentario que se pasó a la solicitud, no el retorno del corredor como debería.


Para reproducir el error, haga lo siguiente:

1. Cree una consulta que dé lugar a un comentario. Rellene la consulta "comentario" con un comentario ficticio.

2. Envíe la solicitud mediante el comando order_send () de la API de Python.

3. En el objeto orderSendResult devuelto, compruebe el campo "comment".


El campo "comentario" pasará el mismo comentario, mientras que debería tener un comentario devuelto por el broker, que puede ser comprobado en la pestaña "Log" del Terminal MT5.

¿Puede alguien confirmarlo? ¿Hay alguna manera de obtener un comentario del corredor?



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

¿Podría añadir una descripción a la Documentación?

Añadido

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

    Quiero organizar una contabilidad comercial virtual en python. Lo necesito para distinguir las características de las diferentes estrategias de negociación. El corredor utilizado es Otkritie. No hay red. Hay una posición común para el instrumento, Stop y Take de la posición es común. Decidí hacer esto: abro una operación por cualquier estrategia por mercado con cualquier volumen, sin stop y take. En su lugar, puse una orden de stop y límite del mismo tamaño. Memorizo las órdenes de la tabla por separado. Cada cierto periodo de tiempo, coloco órdenes = mt5.orders_get(symbol=symb) y obtengo una lista de órdenes de entradas conocidas.ticket.tolist().

    Luego recorro mi tabla de operaciones y compruebo si todavía existe una entrada de orden stop o limitada en la lista de órdenes abiertas recibidas. Si no hay stop loss, significa que un stop loss se ha disparado virtualmente; si no hay límite, significa una toma de beneficios. Entonces borro las entradas para esta operación de mi tabla y borro la orden pendiente restante para esta operación. Y todo funciona, excepto uno: no sé cómo calcular el beneficio virtual de esta operación. En la imagen se puede ver que el stop de venta está fijado en 141430, pero en realidad hubo un deslizamiento y el precio abierto es 141350. Solicito la petición de una posición activada: deals = mt5.history_orders_get(ticket=246525084) (este ticket se ha guardado en el sistema cuando se realizó la orden, como en la imagen de arriba), pero en mi respuesta no veo información sobre el lugar de la orden, sólo información sobre el lugar de la orden. El historial muestra que la parada de venta fue realmente ejecutada en el ticket 15215696 y puedo pedir el precio correcto en este ticket. Pero primero tengo que encontrar el billete del comercio. ¿Cómo hago coincidir este ticket con el ticket de la orden pendiente (sell stop)?

     
    He avanzado con mi pregunta. Al solicitar el historial de posiciones cerradas mt5.history_deals_get, puedo encontrar el ticket de una posición cerrada y su precio de ejecución entre las órdenes. Esto funciona si especifico un rango de tiempo en los parámetros. También llamo a la misma función pasándole el ticket de una orden - mt5. history_deals_get(ticket=TICKET) - pero la respuesta (-2, 'Terminal: Invalid params'). ¿Funciona la función con este parámetro?
     
    Estimados desarrolladores, ¿podrían comentar mi pregunta anterior? La función history_deals_get(ticket=TICKET) no funciona. La respuesta es siempre (-2, 'Terminal: Invalid params'). La misma función pero con un parámetro diferente history_deals_get(position=POSITION) funciona, pero necesito encontrar una operación por orden de entrada.
     
    ¿Es posible hacer un calendario de noticias api en python con acceso al historial, para hacer una investigación?
     
    Estimados, ¿hay alguien que opere en MOEX? ¿A quién le pasa que al inicializar la conexión con el terminal, se vuelve a conectar con el servidor y pide la contraseña del certificado?
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    • www.mql5.com
    initialize - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    order_send y order_check devuelven None. No entiendo dónde buscar. Por favor, dime qué pasa. Por favor.

    Código

    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}")
    

    Salida

    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


    He conseguido resolver el problema. En la solicitud, los campos volumen, precio, sl y tp deben ser de tipo flotante. Funciona así

    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,
    }
     

    Colegas, por favor, aconsejen:

    1. ¿Cómo puedo extraer los intervalos de sesiones de negociación disponibles por instrumento desde mt5 en Python y actualizarlos periódicamente?

    2. ¿espero ver un método en la biblioteca para solicitar y cambiar el Trailing Stop en las posiciones abiertas?