214 lines
13 KiB
MQL5
214 lines
13 KiB
MQL5
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| TestDealsTable.mq5 |
|
||
|
|
//| Copyright 2025, MetaQuotes Ltd. |
|
||
|
|
//| https://www.mql5.com |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
#property copyright "Copyright 2025, MetaQuotes Ltd."
|
||
|
|
#property link "https://www.mql5.com"
|
||
|
|
#property version "1.00"
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Включаемые библиотеки |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
#include "Tables.mqh"
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Script program start function |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
void OnStart()
|
||
|
|
{
|
||
|
|
//--- Объявляем список сделок, объект параметров сделки и структуру параметров
|
||
|
|
CList rows_data;
|
||
|
|
CMqlParamObj *cell=NULL;
|
||
|
|
MqlParam param={};
|
||
|
|
|
||
|
|
//--- Выбираем всю историю
|
||
|
|
if(!HistorySelect(0,TimeCurrent()))
|
||
|
|
return;
|
||
|
|
|
||
|
|
//--- Создаём список сделок в массиве массивов (CList in CList)
|
||
|
|
//--- (одна строка - одна сделка, столбцы - объекты свойств сделки)
|
||
|
|
int total=HistoryDealsTotal();
|
||
|
|
for(int i=0;i<total;i++)
|
||
|
|
{
|
||
|
|
ulong ticket=HistoryDealGetTicket(i);
|
||
|
|
if(ticket==0)
|
||
|
|
continue;
|
||
|
|
|
||
|
|
//--- Добавляем к списку сделок новую строку свойств очередной сделки
|
||
|
|
CList *row=DataListCreator::AddNewRowToDataList(&rows_data);
|
||
|
|
if(row==NULL)
|
||
|
|
continue;
|
||
|
|
|
||
|
|
//--- Создаём "ячейки" с параметрами сделки и
|
||
|
|
//--- добавляем их к созданной строке свойств сделки
|
||
|
|
string symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
|
||
|
|
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
|
||
|
|
|
||
|
|
//--- Время совершения сделки (столбец 0)
|
||
|
|
param.type=TYPE_DATETIME;
|
||
|
|
param.integer_value=HistoryDealGetInteger(ticket,DEAL_TIME);
|
||
|
|
param.double_value=(TIME_DATE|TIME_MINUTES|TIME_SECONDS);
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Имя символа (столбец 1)
|
||
|
|
param.type=TYPE_STRING;
|
||
|
|
param.string_value=symbol;
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Тикет сделки (столбец 2)
|
||
|
|
param.type=TYPE_LONG;
|
||
|
|
param.integer_value=(long)ticket;
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Ордер, на основание которого выполнена сделка (столбец 3)
|
||
|
|
param.type=TYPE_LONG;
|
||
|
|
param.integer_value=HistoryDealGetInteger(ticket,DEAL_ORDER);
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Идентификатор позиции (столбец 4)
|
||
|
|
param.type=TYPE_LONG;
|
||
|
|
param.integer_value=HistoryDealGetInteger(ticket,DEAL_POSITION_ID);
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Тип сделки (столбец 5)
|
||
|
|
param.type=TYPE_STRING;
|
||
|
|
ENUM_DEAL_TYPE deal_type=(ENUM_DEAL_TYPE)HistoryDealGetInteger(ticket,DEAL_TYPE);
|
||
|
|
param.integer_value=deal_type;
|
||
|
|
|
||
|
|
string type="";
|
||
|
|
switch(deal_type)
|
||
|
|
{
|
||
|
|
case DEAL_TYPE_BUY : type="Buy"; break;
|
||
|
|
case DEAL_TYPE_SELL : type="Sell"; break;
|
||
|
|
case DEAL_TYPE_BALANCE : type="Balance"; break;
|
||
|
|
case DEAL_TYPE_CREDIT : type="Credit"; break;
|
||
|
|
case DEAL_TYPE_CHARGE : type="Charge"; break;
|
||
|
|
case DEAL_TYPE_CORRECTION : type="Correction"; break;
|
||
|
|
case DEAL_TYPE_BONUS : type="Bonus"; break;
|
||
|
|
case DEAL_TYPE_COMMISSION : type="Commission"; break;
|
||
|
|
case DEAL_TYPE_COMMISSION_DAILY : type="Commission daily"; break;
|
||
|
|
case DEAL_TYPE_COMMISSION_MONTHLY : type="Commission monthly"; break;
|
||
|
|
case DEAL_TYPE_COMMISSION_AGENT_DAILY : type="Commission agent daily"; break;
|
||
|
|
case DEAL_TYPE_COMMISSION_AGENT_MONTHLY: type="Commission agent monthly"; break;
|
||
|
|
case DEAL_TYPE_INTEREST : type="Interest"; break;
|
||
|
|
case DEAL_TYPE_BUY_CANCELED : type="Buy canceled"; break;
|
||
|
|
case DEAL_TYPE_SELL_CANCELED : type="Sell canceled"; break;
|
||
|
|
case DEAL_DIVIDEND : type="Dividend"; break;
|
||
|
|
case DEAL_DIVIDEND_FRANKED : type="Dividend franked"; break;
|
||
|
|
case DEAL_TAX : type="Tax"; break;
|
||
|
|
default : break;
|
||
|
|
}
|
||
|
|
param.string_value=type;
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Направление сделки (столбец 6)
|
||
|
|
param.type=TYPE_STRING;
|
||
|
|
ENUM_DEAL_ENTRY deal_entry=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticket,DEAL_ENTRY);
|
||
|
|
param.integer_value=deal_entry;
|
||
|
|
|
||
|
|
string entry="";
|
||
|
|
switch(deal_entry)
|
||
|
|
{
|
||
|
|
case DEAL_ENTRY_IN : entry="In"; break;
|
||
|
|
case DEAL_ENTRY_OUT : entry="Out"; break;
|
||
|
|
case DEAL_ENTRY_INOUT : entry="InOut"; break;
|
||
|
|
case DEAL_ENTRY_OUT_BY : entry="OutBy"; break;
|
||
|
|
default : break;
|
||
|
|
}
|
||
|
|
param.string_value=entry;
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Объем сделки (столбец 7)
|
||
|
|
param.type=TYPE_DOUBLE;
|
||
|
|
param.double_value=HistoryDealGetDouble(ticket,DEAL_VOLUME);
|
||
|
|
param.integer_value=2;
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Цена сделки (столбец 8)
|
||
|
|
param.type=TYPE_DOUBLE;
|
||
|
|
param.double_value=HistoryDealGetDouble(ticket,DEAL_PRICE);
|
||
|
|
param.integer_value=(param.double_value>0 ? digits : 1);
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Уровень Stop Loss (столбец 9)
|
||
|
|
param.type=TYPE_DOUBLE;
|
||
|
|
param.double_value=HistoryDealGetDouble(ticket,DEAL_SL);
|
||
|
|
param.integer_value=(param.double_value>0 ? digits : 1);
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Уровень Take Profit (столбец 10)
|
||
|
|
param.type=TYPE_DOUBLE;
|
||
|
|
param.double_value=HistoryDealGetDouble(ticket,DEAL_TP);
|
||
|
|
param.integer_value=(param.double_value>0 ? digits : 1);
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Финансовый результат сделки (столбец 11)
|
||
|
|
param.type=TYPE_DOUBLE;
|
||
|
|
param.double_value=HistoryDealGetDouble(ticket,DEAL_PROFIT);
|
||
|
|
param.integer_value=(param.double_value!=0 ? 2 : 1);
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Magic number для сделки (столбец 12)
|
||
|
|
param.type=TYPE_LONG;
|
||
|
|
param.integer_value=HistoryDealGetInteger(ticket,DEAL_MAGIC);
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Причина или источник проведения сделки (столбец 13)
|
||
|
|
param.type=TYPE_STRING;
|
||
|
|
ENUM_DEAL_REASON deal_reason=(ENUM_DEAL_REASON)HistoryDealGetInteger(ticket,DEAL_REASON);
|
||
|
|
param.integer_value=deal_reason;
|
||
|
|
|
||
|
|
string reason="";
|
||
|
|
switch(deal_reason)
|
||
|
|
{
|
||
|
|
case DEAL_REASON_CLIENT : reason="Client"; break;
|
||
|
|
case DEAL_REASON_MOBILE : reason="Mobile"; break;
|
||
|
|
case DEAL_REASON_WEB : reason="Web"; break;
|
||
|
|
case DEAL_REASON_EXPERT : reason="Expert"; break;
|
||
|
|
case DEAL_REASON_SL : reason="SL"; break;
|
||
|
|
case DEAL_REASON_TP : reason="TP"; break;
|
||
|
|
case DEAL_REASON_SO : reason="StopOut"; break;
|
||
|
|
case DEAL_REASON_ROLLOVER : reason="Rollover"; break;
|
||
|
|
case DEAL_REASON_VMARGIN : reason="VMargin"; break;
|
||
|
|
case DEAL_REASON_SPLIT : reason="Split"; break;
|
||
|
|
case DEAL_REASON_CORPORATE_ACTION: reason="Corporate action"; break;
|
||
|
|
default : break;
|
||
|
|
}
|
||
|
|
param.string_value=reason;
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
|
||
|
|
//--- Комментарий к сделке (столбец 14)
|
||
|
|
param.type=TYPE_STRING;
|
||
|
|
param.string_value=HistoryDealGetString(ticket,DEAL_COMMENT);
|
||
|
|
DataListCreator::AddNewCellParamToRow(row,param);
|
||
|
|
}
|
||
|
|
|
||
|
|
//--- Объявляем и инициализируем заголовок таблицы
|
||
|
|
string headers[]={"Time","Symbol","Ticket","Order","Position","Type","Entry","Volume","Price","SL","TP","Profit","Magic","Reason","Comment"};
|
||
|
|
|
||
|
|
//--- Создаём таблицу на основе созданного списка параметров и массива заголовков
|
||
|
|
CTableByParam *table=new CTableByParam(rows_data,headers);
|
||
|
|
if(table==NULL)
|
||
|
|
return;
|
||
|
|
//--- Распечатываем таблицу в журнале и удаляем созданный объект
|
||
|
|
table.Print();
|
||
|
|
delete table;
|
||
|
|
}
|
||
|
|
/*
|
||
|
|
Результат:
|
||
|
|
Table By Param: Rows total: 797, Columns total: 15:
|
||
|
|
| n/n | Time | Symbol | Ticket | Order | Position | Type | Entry | Volume | Price | SL | TP | Profit | Magic | Reason | Comment |
|
||
|
|
| 0 |2025.01.01 10:20:10 | | 3152565660 | 0 | 0 | Balance | In | 0.00 | 0.0 | 0.0 | 0.0 | 100000.00 | 0 | Client | |
|
||
|
|
| 1 |2025.01.02 00:01:31 | GBPAUD | 3152603334 | 3191672408 | 3191672408 | Sell | In | 0.25 | 2.02111 | 0.0 | 0.0 | 0.0 | 112 | Expert | |
|
||
|
|
| 2 |2025.01.02 02:50:31 | GBPAUD | 3152749152 | 3191820118 | 3191672408 | Buy | Out | 0.25 | 2.02001 | 0.0 | 2.02001 | 17.04 | 112 | TP | [tp 2.02001] |
|
||
|
|
| 3 |2025.01.02 04:43:43 | GBPUSD | 3152949278 | 3191671491 | 3191671491 | Sell | In | 0.10 | 1.25270 | 0.0 | 1.24970 | 0.0 | 12 | Expert | |
|
||
|
|
...
|
||
|
|
...
|
||
|
|
|
||
|
|
| 793 |2025.04.18 03:22:11 | EURCAD | 3602552747 | 3652159095 | 3652048415 | Sell | Out | 0.25 | 1.57503 | 0.0 | 1.57503 | 12.64 | 112 | TP | [tp 1.57503] |
|
||
|
|
| 794 |2025.04.18 04:06:52 | GBPAUD | 3602588574 | 3652200103 | 3645122489 | Sell | Out | 0.25 | 2.07977 | 0.0 | 2.07977 | 3.35 | 112 | TP | [tp 2.07977] |
|
||
|
|
| 795 |2025.04.18 04:06:52 | GBPAUD | 3602588575 | 3652200104 | 3652048983 | Sell | Out | 0.25 | 2.07977 | 0.0 | 2.07977 | 12.93 | 112 | TP | [tp 2.07977] |
|
||
|
|
| 796 |2025.04.18 05:57:48 | AUDJPY | 3602664574 | 3652277665 | 3652048316 | Buy | Out | 0.25 | 90.672 | 0.0 | 90.672 | 19.15 | 112 | TP | [tp 90.672] |
|
||
|
|
*/
|
||
|
|
//+------------------------------------------------------------------+
|