trade_history_v3.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «trade_history_v3.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Скрипт для платформы MetaTrader 5, предназначенный для экспорта истории торговых операций в CSV-файл. Скрипт обращается к историческим сделкам и позициям, собирает данные по каждой закрытой позиции и записывает их в текстовый файл с указанным разделителем. Результат сохраняется в каталог MQL5/Files терминала. Пользователь может ограничить выборку по инструменту, магическому номеру и диапазону дат.
Настройки программы
| Настройка | Описание |
|---|---|
| OutputFileName | Имя выходного файла — Задаёт имя файла, в который будет записан экспортированный отчёт |
| OnlySymbol | Фильтр по символу — Если поле не пустое, в отчёт попадают только сделки указанного инструмента |
| MagicFilter | Фильтр по магическому номеру — Если значение не равно -1, в отчёт включаются только позиции с соответствующим магическим номером |
| UseSemicolon | Использовать точку с запятой — Определяет разделитель полей в выходном файле: точка с запятой или запятая |
| StartDate | Дата начала — Начало периода, за который выполняется выборка исторических данных |
| EndDate | Дата окончания — Конец периода выборки; ноль означает текущее время |
Поиск по коду файла
#property strict
#property script_show_inputs
input string OutputFileName = "TradeHistory.csv";
input string OnlySymbol = "";
input int MagicFilter = -1;
input bool UseSemicolon = true;
input datetime StartDate = D'2026.01.01 00:00'; // inizio intervallo
input datetime EndDate = 0; // 0 = fino ad adesso
string D(double value)
{
string s = DoubleToString(value, 2);
StringReplace(s, ".", ",");
return s;
}
string FormatDate(datetime t)
{
MqlDateTime dt;
TimeToStruct(t, dt);
return StringFormat("%02d/%02d/%04d", dt.day, dt.mon, dt.year);
}
string FormatTime(datetime t)
{
MqlDateTime dt;
TimeToStruct(t, dt);
return StringFormat("%02d:%02d", dt.hour, dt.min);
}
int CollectPositionIDs(long &posIDs[])
{
int total = HistoryDealsTotal();
int count = 0;
ArrayResize(posIDs, 0);
for(int i = 0; i < total; i++)
{
ulong dealTicket = HistoryDealGetTicket(i);
if(dealTicket == 0) continue;
long posID = HistoryDealGetInteger(dealTicket, DEAL_POSITION_ID);
if(posID == 0) continue;
bool found = false;
for(int j = 0; j < count; j++)
{
if(posIDs[j] == posID) { found = true; break; }
}
if(!found)
{
ArrayResize(posIDs, count + 1);
posIDs[count] = posID;
count++;
}
}
return count;
}
int OnStart()
{
// код доступен только после оплаты
}
datetime endSel = (EndDate == 0) ? TimeCurrent() : EndDate;
if(!HistorySelect(StartDate, endSel))
{
Print("Errore HistorySelect: ", GetLastError());
return 0;
}
int handle = FileOpen(OutputFileName, FILE_WRITE | FILE_TXT | FILE_ANSI);
if(handle == INVALID_HANDLE)
{
Print("Errore apertura file: ", GetLastError());
return 0;
}
string sep = UseSemicolon ? ";" : ",";
FileWriteString(handle, "Broker" + sep + AccountInfoString(ACCOUNT_SERVER) + "\r\n");
FileWriteString(handle, "Account" + sep + IntegerToString((int)AccountInfoInteger(ACCOUNT_LOGIN)) + "\r\n");
FileWriteString(handle, "Currency" + sep + AccountInfoString(ACCOUNT_CURRENCY) + "\r\n");
FileWriteString(handle, "ExportDate" + sep + FormatDate(TimeCurrent()) + " " + FormatTime(TimeCurrent()) + "\r\n");
FileWriteString(handle, "RangeFrom" + sep + FormatDate(StartDate) + " " + FormatTime(StartDate) + "\r\n");
FileWriteString(handle, "RangeTo" + sep + FormatDate(endSel) + " " + FormatTime(endSel) + "\r\n");
FileWriteString(handle, "\r\n");
FileWriteString(handle,
"Ticket" + sep + "Symbol" + sep + "Type" + sep + "Lots" + sep +
"OpenDate" + sep + "OpenTime" + sep + "OpenPrice" + sep +
"CloseDate" + sep + "CloseTime" + sep + "ClosePrice" + sep +
"SL" + sep + "TP" + sep +
"Profit" + sep + "Commission" + sep + "Swap" + sep +
"NetProfit" + sep + "Magic" + sep + "Comment" + sep +
"DurationMin\r\n"
);
long posIDs[];
int posCount = CollectPositionIDs(posIDs);
int exported = 0;
for(int p = 0; p < posCount; p++)
{
long posID = posIDs[p];
if(!HistorySelectByPosition(posID))
continue;
int dealsInPos = HistoryDealsTotal();
if(dealsInPos <= 0) continue;
datetime openTime = 0, closeTime = 0;
double openPrice = 0, closePrice = Показано первые 50% кода (символов: 4745)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.