positions_get

Получает открытые позиции с возможностью фильтрации по символу или тикету. Существует 3 варианта вызова.

Вызов без параметров. Возвращает открытые позиции по всем символам.

positions_get()

Вызов с указанием символа, по которому нужно получить открытые позиции.

positions_get(
   symbol="SYMBOL"      // имя символа
)

Вызов с указанием группы символов, по которым нужно получить открытые позиции.

positions_get(
   group="GROUP"        // фильтр для отбора позиций по символам
)

Вызов с указанием тикета позиции.

positions_get(
   ticket=TICKET        // тикет
)

Параметры

symbol="SYMBOL"

[in]  Имя символа. Необязательный именованный параметр. Если символ указан, то параметр ticket игнорируется.

group="GROUP"

[in]  Фильтр для отбора группы только необходимых символов. Необязательный именованный параметр. Если группа задана, то функция вернет только те позиции, которые удовлетворяют заданному критерию для имени символа.

ticket=TICKET

[in]  Тикет позиции (POSITION_TICKET). Необязательный именованный параметр.

Возвращаемое значение

Возвращает информацию в виде структуры именованных кортежей (namedtuple). В случае ошибки возвращает None, информацию об ошибке можно получить с помощью last_error().

Примечание

Функция  позволяет получить за один вызов все открытые позиции, аналогом является связка PositionsTotal и PositionSelect.

Параметр group может содержать несколько условий, разделенных запятыми. Условие можно задавать как маску с использованием '*'. Для исключения можно использовать символ логического отрицания '!'. При этом все условия применяются последовательно, то есть сначала необходимо указать условия включения в группу, а затем условие исключения. Например, group="*, !EUR" означает, что сначала нужно выбрать позиции по всем символам и затем исключить те из них, что содержат в имени символа "EUR".

Пример:

import MetaTrader5 as mt5
import pandas as pd
pd.set_option('display.max_columns'500# сколько столбцов показываем
pd.set_option('display.width', 1500)      # макс. ширина таблицы для показа
# выведем данные о пакете MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)
print()
# установим подключение к терминалу MetaTrader 5
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()
 
# получим открытые позиции на 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))
    # выведем все открытые позиции
    for position in positions:
        print(position)
 
# получим список позиций на символах, чьи имена содержат "*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)))
    # выведем эти позиции в виде таблицы с помощью 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)
 
# завершим подключение к терминалу MetaTrader 5
mt5.shutdown()
 
 
Результат:
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        

Смотри также

positions_total, orders_get