history_orders_get

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

Вызов с указанием интервала времени. Возвращает все ордеры, попадющие в заданный интервал.

history_orders_get(
   date_from,           // дата, с которой запрашиваются ордеры
   date_to,             // дата, по которую запрашиваются ордеры
   group="GROUP"        // фильтр для отбора ордеров по символам
   )

Вызов с указанием тикета ордера. Возвращает ордер с указанным тикетом.

positions_get(
   ticket=TICKET        // тикет ордера
)

Вызов с указанием тикета позиции. Возвращает все ордеры, имеющие в свойстве ORDER_POSITION_ID указанный тикет позиции.

positions_get(
   position=POSITION    // тикет позиции
)

Параметры

date_from

[in]  Дата, начиная с которой запрашиваются ордеры. Задается объектом datetime или в виде количества секунд, прошедших  с 1970.01.01. Обязательный неименованный параметр, указывается первым.

date_to

[in]  Дата, по которую запрашиваются ордеры. Задается объектом datetime или в виде количества секунд, прошедших  с 1970.01.01. Обязательный неименованный параметр, указывается вторым.

group="GROUP"

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

ticket=TICKET

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

position=POSITION

[in]  Тикет позиции (хранится в ORDER_POSITION_ID), для которой необходимо получить все ордеры. Необязательный параметр. Если тикет позиции не указан, то фильтр не применяется.

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

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

Примечание

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

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

Пример:

from datetime import datetime
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()
 
# получим количество ордеров в истории
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()
 
# выведем все исторические ордеры по тикету позиции
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)))
    # выведем все исторические ордеры, имеющие указанный тикет позиции
    for position_order in position_history_orders:        
        print(position_order)
    print()
    # выведем эти ордеры в виде таблицы с помощью 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)
 
# завершим подключение к терминалу MetaTrader 5
mt5.shutdown()
 
Результат:
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   

Смотри также

history_deals_total, history_deals_get