history_deals_get

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

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

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

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

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

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

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

Параметры

date_from

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

date_to

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

group="GROUP"

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

ticket=TICKET

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

position=POSITION

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

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

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

Примечание

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

Параметр group позволяет отфильтровать сделки по символам, допустимо использовать '*' в начале и конце строки.

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

Пример:

import MetaTrader5 as mt5
from datetime import datetime
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()
# получим  в указанном интервале сделки по символам, имена которых содержат "GBP"
deals=mt5.history_deals_get(from_dateto_date, group="*GBP*")
if deals==None:
    print("No deals with group=\"*USD*\", error code={}".format(mt5.last_error()))
elif len(deals)> 0:
    print("history_deals_get({}, {}, group=\"*GBP*\")={}".format(from_date,to_date,len(deals)))
 
# получим  сделки по символам, имена которых не содержат ни "EUR" ни "GBP"
deals = mt5.history_deals_get(from_date, to_date, group="*,!*EUR*,!*GBP*")
if deals == None:
    print("No deals, error code={}".format(mt5.last_error()))
elif len(deals) > 0:
    print("history_deals_get(from_date, to_date, group=\"*,!*EUR*,!*GBP*\") ="len(deals))
    # выведем все полученные сделки как есть
    for deal in deals:
        print("  ",deal)
    print()
    # выведем эти сделки в виде таблицы с помощью pandas.DataFrame
    df=pd.DataFrame(list(deals),columns=deals[0]._asdict().keys())
    df['time'] = pd.to_datetime(df['time'], unit='s')
    print(df)
print("")
 
# получим все сделки, которые относятся к позиции #530218319
position_id=530218319
position_deals = mt5.history_deals_get(position=position_id)
if position_deals == None:
    print("No deals with position #{}".format(position_id))
    print("error code ="mt5.last_error())
elif len(position_deals) > 0:
    print("Deals with position id #{}: {}".format(position_id, len(position_deals)))
    # выведем эти сделки в виде таблицы с помощью pandas.DataFrame
    df=pd.DataFrame(list(position_deals),columns=position_deals[0]._asdict().keys())
    df['time'] = pd.to_datetime(df['time'], unit='s')
    print(df)
 
# завершим подключение к терминалу MetaTrader 5
mt5.shutdown()
 
Результат:
MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.29
 
history_deals_get(from_date, to_date, group="*GBP*") = 14
 
history_deals_get(from_date, to_date, group="*,!*EUR*,!*GBP*") = 7
   TradeDeal(ticket=506966741, order=0, time=1582202125, time_msc=1582202125419, type=2, entry=0, magic=0, position_id=0, reason=0, volume=0.0, pri ...
   TradeDeal(ticket=507962919, order=530218319, time=1582303777, time_msc=1582303777582, type=0, entry=0, magic=0, position_id=530218319, reason=0, ...
   TradeDeal(ticket=513149059, order=535548147, time=1583176242, time_msc=1583176242265, type=1, entry=1, magic=0, position_id=530218319, reason=0, ...
   TradeDeal(ticket=516943494, order=539349382, time=1583510003, time_msc=1583510003895, type=1, entry=0, magic=0, position_id=539349382, reason=0, ...
   TradeDeal(ticket=516943915, order=539349802, time=1583510025, time_msc=1583510025054, type=0, entry=0, magic=0, position_id=539349802, reason=0, ...
   TradeDeal(ticket=517139682, order=539557870, time=1583520201, time_msc=1583520201227, type=0, entry=1, magic=0, position_id=539349382, reason=0, ...
   TradeDeal(ticket=517139716, order=539557909, time=1583520202, time_msc=1583520202971, type=1, entry=1, magic=0, position_id=539349802, reason=0, ...
 
      ticket      order                time       time_msc  type  entry  magic  position_id  reason  volume    price  commission  swap     profit  fee  symbol comment external_id
0  506966741          0 2020-02-20 12:35:25  1582202125419     2      0      0            0       0    0.00  0.00000         0.0   0.0  100000.00  0.0                            
1  507962919  530218319 2020-02-21 16:49:37  1582303777582     0      0      0    530218319       0    0.01  0.97898         0.0   0.0       0.00  0.0  USDCHF                    
2  513149059  535548147 2020-03-02 19:10:42  1583176242265     1      1      0    530218319       0    0.01  0.95758         0.0   0.0     -22.35  0.0  USDCHF                    
3  516943494  539349382 2020-03-06 15:53:23  1583510003895     1      0      0    539349382       0    0.10  0.93475         0.0   0.0       0.00  0.0  USDCHF                    
4  516943915  539349802 2020-03-06 15:53:45  1583510025054     0      0      0    539349802       0    0.10  0.66336         0.0   0.0       0.00  0.0  AUDUSD                    
5  517139682  539557870 2020-03-06 18:43:21  1583520201227     0      1      0    539349382       0    0.10  0.93751         0.0   0.0     -29.44  0.0  USDCHF                    
6  517139716  539557909 2020-03-06 18:43:22  1583520202971     1      1      0    539349802       0    0.10  0.66327         0.0   0.0      -0.90  0.0  AUDUSD                    
 
Deals with position id #530218319: 2
      ticket      order                time       time_msc  type  entry  magic  position_id  reason  volume    price  commission  swap  profit  fee  symbol comment external_id
0  507962919  530218319 2020-02-21 16:49:37  1582303777582     0      0      0    530218319       0    0.01  0.97898         0.0   0.0    0.00  0.0  USDCHF                    
1  513149059  535548147 2020-03-02 19:10:42  1583176242265     1      1      0    530218319       0    0.01  0.95758         0.0   0.0  -22.35  0.0  USDCHF   

Смотри также

history_deals_total, history_orders_get