history_orders_get

Obtiene las órdenes de la historia comercial con posibilidad de filtrado según un ticket o posición. Existen 3 variantes de llamada.

Llamada con indicación del intervalo temporal. Retorna todas las órdenes que entran en el intervalo establecido.

history_orders_get(
   date_from,           // fecha a partir de la cual se solicitan las órdenes
   date_to,             // fecha hasta la cual se solicitan las órdenes
   group="GROUP"        // filtro de selección de órdenes según los símbolos
   )

Llamada con indicación del ticket de la orden. Retorna la orden con el ticket indicado.

positions_get(
   ticket=TICKET        // ticket de la orden
)

Llamada con indicación del ticket de la posición. Retorna todas las órdenes que tienen en la propiedad ORDER_POSITION_ID el ticket de la posición indicado.

positions_get(
   position=POSITION    // ticket de la posición
)

Parámetros

date_from

[in]  Fecha a partir de la cual se solicitan las órdenes. Se establece con el objeto datetime o como número de segundos transcurridos desde el 1970.01.01. Parámetro no nombrado obligatorio, se indica en primer lugar.

date_to

[in]  Fecha hasta la cual se solicitan las órdenes. Se establece con el objeto datetime o como número de segundos transcurridos desde el 1970.01.01. Parámetro no nombrado obligatorio, se indica en segundo lugar.

group="GROUP"

[in]  Filtro para seleccionar un grupo solo con los símbolos necesarios. Parámetro nombrado no obligatorio. Si el grupo ha sido establecido, la función retornará las órdenes que cumplan con el criterio establecido para el nombre del símbolo.

ticket=TICKET

[in]  Ticket de la orden que se debe obtener. Parámetro no obligatorio. Si el ticket de la orden no ha sido indicado, el filtro no se usará.

position=POSITION

[in]  Ticket de la posición (se guarda en ORDER_POSITION_ID) para la que debemos obtener todas las órdenes. Parámetro no obligatorio. Si el ticket de la posición no ha sido indicado, el filtro no se usará.

Valor retornado

Retorna la información como estructura de tuplas nombradas (namedtuple). En caso de error, retorna None; la información sobre el error se puede obtener con la ayuda de last_error().

Observación

La función permite obtener en una sola llamada todas las órdenes históricas en el periodo indicado; sería un análogo de la unión de HistoryOrdersTotal y HistoryOrderSelect.

El parámetro group puede contener varias condiciones separadas por comas. Las condiciones se pueden establecer como máscara con el uso de '*'. Para realizar exclusiones, se puede usar el símbolo de negación lógica '!'. En este caso, además, todas las condiciones se aplican de forma secuencial, es decir, primero se deben indicar las inclusiones en el grupo, y después las condiciones de exclusión. Por ejemplo, group="*, !EUR" significa que primero debemos seleccionar las transacciones según todos los símbolos, y después excluir aquellos de ellos que contengan en el nombre del símbolo "EUR".

Ejemplo:

from datetime import datetime
import MetaTrader5 as mt5
import pandas as pd
pd.set_option('display.max_columns'500# cuántas columnas mostramos
pd.set_option('display.width', 1500)      # máx. anchura del recuadro para la muestra
# mostramos los datos sobre el paquete MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)
print()
# establecemos la conexión con el terminal MetaTrader 5
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()
 
# obtenemos el número de órdenes en la historia
from_date=datetime(2020,1,1)
to_date=datetime.now()
history_orders=mt5.history_orders_get(from_date, to_date, group="*GBP*")
if history_orders==None:
    print("No history orders with group=\"*GBP*\", error code={}".format(mt5.last_error()))
elif len(history_orders)>0:
    print("history_orders_get({}, {}, group=\"*GBP*\")={}".format(from_date,to_date,len(history_orders)))
print()
 
# mostramos todas las órdenes históricas según el ticket de una posición
position_id=530218319
position_history_orders=mt5.history_orders_get(position=position_id)
if position_history_orders==None:
    print("No orders with position #{}".format(position_id))
    print("error code =",mt5.last_error())
elif len(position_history_orders)>0:
    print("Total history orders on position #{}: {}".format(position_id,len(position_history_orders)))
   # mostramos todas las órdenes históricas que tienen el ticket de posición indicado
    for position_order in position_history_orders:        
        print(position_order)
    print()
    # mostramos estas órdenes en forma de recuadro con la ayuda de pandas.DataFrame
    df=pd.DataFrame(list(position_history_orders),columns=position_history_orders[0]._asdict().keys())
    df.drop(['time_expiration','type_time','state','position_by_id','reason','volume_current','price_stoplimit','sl','tp'], axis=1, inplace=True)
    df['time_setup'] = pd.to_datetime(df['time_setup'], unit='s')
    df['time_done'] = pd.to_datetime(df['time_done'], unit='s')
    print(df)
 
# finalizamos la conexión con el terminal MetaTrader 5
mt5.shutdown()
 
Resultado:
MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.29
 
history_orders_get(2020-01-01 00:00:00, 2020-03-25 17:17:32.058795, group="*GBP*")=14
 
Total history orders on position #530218319: 2
TradeOrder(ticket=530218319, time_setup=1582282114, time_setup_msc=1582282114681, time_done=1582303777, time_done_msc=1582303777582, time_expiration=0, ...
TradeOrder(ticket=535548147, time_setup=1583176242, time_setup_msc=1583176242265, time_done=1583176242, time_done_msc=1583176242265, time_expiration=0, ...
 
      ticket          time_setup  time_setup_msc           time_done  time_done_msc  type  type_filling  magic  position_id  volume_initial  price_open  price_current  symbol comment external_id
0  530218319 2020-02-21 10:48:34   1582282114681 2020-02-21 16:49:37  1582303777582     2             2      0    530218319            0.01     0.97898        0.97863  USDCHF                    
1  535548147 2020-03-02 19:10:42   1583176242265 2020-03-02 19:10:42  1583176242265     1             0      0    530218319            0.01     0.95758        0.95758  USDCHF   

Ver también

history_deals_total, history_deals_get