← К каталогу
Исходный код · ID 4331

TradeHistoryMonitor

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 и перейдите к оплате.

Стоимость полного кода
259,70₽ ≈ $3.17