positions_get

Obtiene las posiciones abiertas con posibilidad de filtrado según un símbolo o ticket. Existen 3 variantes de llamada.

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

positions_get()

Llamada con indicación del símbolo del que debemos obtener las posiciones abiertas.

positions_get(
   symbol="SYMBOL"      // nombre del símbolo
)

Llamada con indicación del grupo de símbolos de los que debemos obtener las posiciones abiertas.

positions_get(
   group="GROUP"        // filtro de selección de posiciones según los símbolos
)

Llamada con indicación del ticket de la posición.

positions_get(
   ticket=TICKET        // ticket
)

Parámetros

symbol="SYMBOL"

[in]  Nombre del símbolo. Parámetro nombrado no obligatorio. Si se ha indicado el símbolo, el parámetro ticket será ignorado.

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á solo las posiciones que cumplan con el criterio establecido para el nombre del símbolo.

ticket=TICKET

[in]  Ticket de la posición (POSITION_TICKET). Parámetro nombrado no obligatorio.

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 posiciones abiertas; sería un análogo de la unión de PositionsTotal y PositionSelect.

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 posiciones según todos los símbolos, y después excluir aquellos de ellos que contengan en el nombre del símbolo "EUR".

Ejemplo:

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 las posiciones abiertas de USDCHF
positions=mt5.positions_get(symbol="USDCHF")
if positions==None:
    print("No positions on USDCHF, error code={}".format(mt5.last_error()))
elif len(positions)>0:
    print("Total positions on USDCHF =",len(positions))
    # mostramos todas las posiciones abiertas
    for position in positions:
        print(position)
 
# obtenemos la lista de posiciones en los símbolos cuyos nombres contienen "*USD*"
usd_positions=mt5.positions_get(group="*USD*")
if usd_positions==None:
    print("No positions with group=\"*USD*\", error code={}".format(mt5.last_error()))
elif len(usd_positions)>0:
    print("positions_get(group=\"*USD*\")={}".format(len(usd_positions)))
    # mostramos estas posiciones en forma de recuadro con la ayuda de pandas.DataFrame
    df=pd.DataFrame(list(usd_positions),columns=usd_positions[0]._asdict().keys())
    df['time'] = pd.to_datetime(df['time'], unit='s')
    df.drop(['time_update', 'time_msc', 'time_update_msc', 'external_id'], axis=1, inplace=True)
    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
 
positions_get(group="*USD*")=5
      ticket                time  type  magic  identifier  reason  volume  price_open       sl       tp  price_current  swap  profit  symbol comment
0  548297723 2020-03-18 15:00:55     1      0   548297723       3    0.01     1.09301  1.11490  1.06236        1.10101 -0.10   -8.00  EURUSD        
1  548655158 2020-03-18 20:31:26     0      0   548655158       3    0.01     1.08676  1.06107  1.12446        1.10098 -0.08   14.22  EURUSD        
2  548663803 2020-03-18 20:40:04     0      0   548663803       3    0.01     1.08640  1.06351  1.11833        1.10098 -0.08   14.58  EURUSD        
3  548847168 2020-03-19 01:10:05     0      0   548847168       3    0.01     1.09545  1.05524  1.15122        1.10098 -0.06    5.53  EURUSD        
4  548847194 2020-03-19 01:10:07     0      0   548847194       3    0.02     1.09536  1.04478  1.16587        1.10098 -0.08   11.24  EURUSD        

Ver también

positions_total, orders_get