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

ordercache.mqh

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

[{"text":"Библиотека ordercache.mqh представляет собой заголовочный файл для MetaTrader 5, предназначенный для кеширования данных об открытых ордерах и позициях. Она позволяет советникам централизованно получать информацию о количестве открытых позиций по текущему символу, не вызывая repeatedly стандартные функции терминала на каждом тике."},{"text":"Внутренняя логика работы основана на глобальных массивах, которые обновляются только при смене текущего бара, что снижает вычислительные затраты. Диапазон магических номеров определяется параметром baseMagic и охватывает значения от baseMagic*10 до baseMagic*10+9."},{"text":"Библиотека содержит макросы совместимости с MQL4, но основной код ориентирован на MQL5, где для работы с открытыми позициями используются функции PositionsTotal, PositionSelectByTicket и PositionGetInteger. Количество движков по умолчанию задаётся константой ENGINE_COUNT равной 10."}]

Состав библиотеки

Классов: 0 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 4

Функции
Функция void BuildSharedOrderCache(datetime currentBar, int baseMagic)

Формирует кеш открытых ордеров и позиций по текущему символу в диапазоне магических номеров от baseMagic*10 до baseMagic*10+9, сохраняя результаты в глобальные массивы для последующего быстрого доступа.

Функция int CountEAOpenOrders()

Возвращает общее количество открытых ордеров советника, полученное из ранее построенного кеша.

Функция bool HasOtherEngineTrade(int myMagic, int baseMagic)

Проверяет, есть ли открытые сделки у других движков (экспертных советников), кроме того, к которому принадлежит указанный магический номер myMagic.

Функция int GetEngineOrderCount(int engineIndex)

Возвращает количество кешированных ордеров для конкретного движка по его индексу в диапазоне от 0 до ENGINE_COUNT-1.

Получить полный код

Поиск по коду файла

#ifndef ORDER_CACHE_MQH
#define ORDER_CACHE_MQH

#ifndef ENGINE_COUNT
   #define ENGINE_COUNT 10
#endif

#ifndef BASE_MAGIC_DEFAULT
   #define BASE_MAGIC_DEFAULT 1000
#endif

#ifdef __MQL5__

   #define ORDER_TOTAL_FUNC()     PositionsTotal()
   #define ORDER_SELECT_FUNC(i)   PositionSelectByTicket(PositionGetTicket(i))
   #define ORDER_SYMBOL_FUNC()    PositionGetString(POSITION_SYMBOL)
   #define ORDER_MAGIC_FUNC()     (int)PositionGetInteger(POSITION_MAGIC)
#else

   #define ORDER_TOTAL_FUNC()     OrdersTotal()
   #define ORDER_SELECT_FUNC(i)   OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
   #define ORDER_SYMBOL_FUNC()    OrderSymbol()
   #define ORDER_MAGIC_FUNC()     OrderMagicNumber()
#endif

int g_CachedEngineOrders[ENGINE_COUNT];
int g_CachedEAOpenOrders = 0;
datetime g_CachedOrderBar = 0;

void BuildSharedOrderCache(datetime currentBar, int baseMagic = BASE_MAGIC_DEFAULT)
{
   if(g_CachedOrderBar == currentBar)
      return;

   g_CachedOrderBar = currentBar;
   g_CachedEAOpenOrders = 0;

   for(int i = 0; i < ENGINE_COUNT; i++)
      g_CachedEngineOrders[i] = 0;

   const int magicLow  = baseMagic * 10;
   const int magicHigh = magicLow + 9;

   for(int i = ORDER

Показано первые 50% кода (символов: 1865)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
186,50₽ ≈ $2.28