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

 
Vladimir Perervenko:

¿Es posible, en principio, crear una entidad (conexión)? No creo que sea tan necesario, pero para futuras referencias.

Al instalar otro script (Py) en el gráfico, el primero se reinicia. ¿Es así como debe ser?

No creo que sea difícil crear otra entidad, simplemente sería otro nivel de abstracción para la lib.

Esto ya no se considera el uso de la lib desde la terminal, sino como una puerta de entrada completa a las terminales en el lado de python.

Mejor poner más utilidad en la propia lib :) ahora.

 
Дмитрий Прокопьев:

No creo que sea difícil crear otra entidad, simplemente sería otro nivel de abstracción para la lib.

Esto ya no se considera el uso de la lib desde la terminal, sino como una puerta de entrada completa a las terminales en el lado de python.

Mejor poner más utilidad en la propia lib :) ahora.

El arranque de mi terminal falla regularmente, no he descubierto la razón. Debo tener un error en alguna parte con la instalación de python... Utilizaré la lib como puerta de entrada a la terminal (a través de los servicios). Lo pondré a prueba el lunes.

 
Дмитрий Прокопьев:

mt5.initialize(blabla, portable=True)- no ayudó mucho, sigue pidiendo la última terminal iniciada en el sistema.

Pruebe sin la ruta del parámetro con nombre , pase la ruta como primer parámetro sin nombre:

if mt5.initialize('/works/MT5-1', login=11111, ...):
        ...   
        mt5.shutdown()
else:
   print('error')

if mt5.initialize('/works/MT5-2', login=2222, ...):
        ...   
        mt5.shutdown()
else:
   print('error')
 
Almaz:

intente sin la ruta del parámetro con nombre , pase la ruta como primer parámetro sin nombre:

Ha funcionado correctamente. Gracias.

¿Bicho?

 
Дмитрий Прокопьев:

Todo ha funcionado correctamente. Gracias.

¿Un error?

No es un error.

El primer parámetro no tiene nombre y es fijo. Pero por si acaso se nombrará en la próxima versión.

 
Renat Fatkhullin:

No es un error.

El primer parámetro no tiene nombre y es fijo. Pero por si acaso se nombrará en la próxima versión.

Aha, entonces no entendí la documentación específicamente.

Gracias.

 
Realmente necesito algo para sacar el "inicio de un nuevo bar" del terminal. Los indicadores no son tan importantes. Resulta que Python también tiene una biblioteca con cálculo de indicadores.
 

Pregunta. Hay una función positions_get. La documentación describe tres modos de funcionamiento.

positions_get

Obtiene las posiciones abiertas con filtrado por símbolo o ticket. Se puede llamar de 3 maneras diferentes.


Llamada sin parámetros. Devuelve las posiciones abiertas de todos los símbolos.

positions_get()

Llamada con especificación de un símbolo, para el cual quiere obtener posiciones abiertas.

positions_get(

symbol="SYMBOL" // nombre del símbolo

)

Llamada especificando el ticket de la posición.

positions_get(

ticket=TICKET // ticket

)

Parámetros

symbol="SYMBOL" [in] El nombre del símbolo. Parámetro opcional con nombre. Si se especifica un símbolo, se ignora el parámetro ticket.

ticket=TICKET [in] El ticket de posición (POSITION_TICKET). Parámetro opcional con nombre.


Variant positions_get() - no hay preguntas, funciona bien.

Pero los otros dos no devuelven nada.

	 pos_info = mt5.positions_get(symbol = "GBPUSD")	
	 print(mt5.last_error())

La segunda variante de devolución de llamada:

        result = mt5.order_send(request)        
        if result.retcode == 0 or result.retcode == 10009:      
                pos_info = mt5.positions_get(ticket = result.order)
                print("mt5.last_error(): %s" % (mt5.last_error()))

last_error también devuelve una construcción extraña:

2020-03-09 22:25:41 [DEBUG][module: processing.py] add_position: Possition open - OK! MqlTradeResult: {
    "retcode": 10009,
    "deal": 134756209,
    "order": 161108536,
    "volume": 0.01,
    "price": 1.31089,
    "bid": 1.31066,
    "ask": 1.31089,
    "comment": "Request executed",
    "request_id": 98,
    "retcode_external": 0
}
mt5.last_error(): [1, '']

¿Dónde buscar? ¿Qué ocurre?

 
Дмитрий Прокопьев:

Una llamada con un billete de posición.

positions_get(

ticket=TICKET //ticket

)

Parámetros

symbol="SYMBOL" [in] El nombre del símbolo. Parámetro opcional con nombre. Si se especifica un símbolo, se ignora el parámetro ticket.

ticket=TICKET [in] El ticket de posición (POSITION_TICKET). Parámetro opcional con nombre.


Variant positions_get() - no hay preguntas, funciona bien.

Pero los otros dos no devuelven nada.

La segunda variante de llamada:

last_error también devuelve una construcción extraña:

2020-03-09 22:25:41 [DEBUG][module: processing.py] add_position: Possition open - OK! MqlTradeResult: {
    "retcode": 10009,
    "deal": 134756209,
    "order": 161108536,
    "volume": 0.01,
    "price": 1.31089,
    "bid": 1.31066,
    "ask": 1.31089,
    "comment": "Request executed",
    "request_id": 98,
    "retcode_external": 0
}
mt5.last_error(): [1, '']

¿En qué hay que fijarse? ¿Qué ocurre?

Compruebe si su tipo de cuenta es de compensación o de cobertura. Para la compensación, el ticket de una posición ya existente no cambiará, y no tiene sentido buscar una posición después de la recarga utilizando el número de orden.

 

last_error тоже возвращает странную конструкцию:

código de error 1, esto es éxito mt5.RES_S_OK, la siguiente construcción escribirá [1, 'Success']. Los códigos con valores negativos son errores mt5.RES_E_xxx.
Razón de la queja: