int OrdersHistoryTotal()
Получение общего количества исторических ордеров
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «tradehistorymonitor.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Библиотека TradeHistoryMonitor предназначена для мониторинга закрытых торговых операций в MetaTrader 4. Она обеспечивает автоматическое обнаружение новых закрытых позиций в истории и фиксацию момента их завершения.
Основной механизм работы заключается в переборе исторических ордеров, вычислении итогового результата сделки (прибыль, своп, комиссия) и определении направления и исхода операции. При обнаружении незакрытых ранее позиций библиотека делает скриншот графика с заданными параметрами.
Для предотвращения повторной обработки используется кольцевой буфер отслеживания тикетов. Модуль также предоставляет вспомогательные функции для работы с историей ордеров и создания снимков экрана.
Классов: 0 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 13
int OrdersHistoryTotal()
Получение общего количества исторических ордеров
bool OrderSelect(int index, int select, int pool)
Выбор ордера из истории по указанному индексу
int OrderTicket()
Получение тикета выбранного ордера
datetime OrderCloseTime()
Получение времени закрытия ордера
double OrderProfit()
Получение прибыли ордера
double OrderSwap()
Получение свопа ордера
double OrderCommission()
Получение комиссии ордера
int OrderType()
Определение типа ордера
string TimeToStr(datetime value, int mode)
Преобразование значения времени в строку
bool TakeScreenshot(string filename, int width, int height)
Сделать скриншот графика с заданными размерами
void InitTradeHistoryMonitor()
Инициализация монитора истории торгов
bool IsTicketProcessed(int ticket)
Проверка, был ли тикет обработан ранее
void MarkTicketProcessed(int ticket)
Пометить тикет как обработанный
#ifndef __TRADEHISTORYMONITOR_MQH__
#define __TRADEHISTORYMONITOR_MQH__
#ifndef OP_BUY
#define OP_BUY 0
#endif
#ifndef OP_SELL
#define OP_SELL 1
#endif
#ifndef SELECT_BY_POS
#define SELECT_BY_POS 0
#endif
#ifndef MODE_HISTORY
#define MODE_HISTORY 1
#endif
#ifndef TIME_DATE
#define TIME_DATE 1
#endif
#ifndef TIME_MINUTES
#define TIME_MINUTES 2
#endif
int OrdersHistoryTotal();
bool OrderSelect(int index, int select, int pool);
int OrderTicket();
datetime OrderCloseTime();
double OrderProfit();
double OrderSwap();
double OrderCommission();
int OrderType();
string TimeToStr(datetime value, int mode=0);
bool TakeScreenshot(string filename, int width, int height)
{
ChartSetInteger(0, CHART_WIDTH_IN_PIXELS, width);
ChartSetInteger(0, CHART_HEIGHT_IN_PIXELS, height);
bool ok = ChartScreenShot(0, filename, width, height);
ChartRedraw(0);
return ok;
}
#define THM_BUFFER_SIZE 50
int g_thm_buffer[THM_BUFFER_SIZE];
int g_thm_buffer_head = 0;
int g_thm_buffer_count = 0;
int g_thm_history_count = 0;
void InitTradeHistoryMonitor()
{
g_thm_history_count = OrdersHistoryTotal();
ArrayInitialize(g_thm_buffer, -1);
g_thm_buffer_head = 0;
g_thm_buffer_count = 0;
}
bool IsTicketProcessed(int ticket)
{
for(int i = 0; i < g_thm_buffer_count; i++)
{
int idx =
(g_thm_buffer_head -
g_thm_buffer_count +
i +
THM_BUFFER_SIZE) %
THM_BUFFER_SIZE;
if(g_thm_buffer[idx] == ticket)
return true;
}
return false;
}
void MarkTicketProcessed(int ticket)
{
g_thm_buffer[g_thm_buffer_head] = ticket;
g_thm_buffer_head =
(g_thm_buffer_head + 1) % THM_BUFFER_SIZE;
if(g_thm_buffer_count < THM_BUFFER_SIZE)
g_thm_buffer_count++;
}
void ProcessTradeHistory(
string ext_png,
int screenshotWidth,
int screenshotHeight
)
{
Показано первые 50% кода (символов: 2597)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.