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

swingcache.mqh

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

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

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

О программе

Библиотека на языке MQL предназначена для построения общих кэшей свингов (локальных экстремумов) по данным текущего символа и периода. Она хранит глобальные массивы свингов и объединённых свингов для трёх уровней силы, а также служебные счётчики и данные High/Low. Основная точка входа — функция BuildAllSharedSwingCaches, которая обновляет кэши не чаще одного раза на бар. Библиотека не содержит пользовательских настроек и не раскрывает торговых правил.

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

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

Функции
Функция void BuildAllSharedSwingCaches(datetime currentBar, int lookbackBars)

Строит общие кэши свингов для текущего бара: загружает данные High/Low, формирует свинги трёх уровней силы и их объединённые версии; повторный вызов на том же баре не выполняет работу.

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

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

#ifndef SWING_CACHE_MQH
#define SWING_CACHE_MQH

#include "PatternTypes.mqh"

Swing g_SharedSwings2[];
Swing g_SharedSwings3[];
Swing g_SharedSwings4[];

int g_SharedSwingCount2 = 0;
int g_SharedSwingCount3 = 0;
int g_SharedSwingCount4 = 0;

datetime g_SharedSwingBar = 0;

double g_SharedHigh[];
double g_SharedLow[];
int    g_SharedSwingDataSize = 0;

Swing g_SharedMergedSwings2[];
Swing g_SharedMergedSwings3[];
Swing g_SharedMergedSwings4[];

int g_SharedMergedCount2 = 0;
int g_SharedMergedCount3 = 0;
int g_SharedMergedCount4 = 0;

void BuildSharedSwingCache(
   int strength,
   Swing &cache[],
   int &cacheCount
)
{
   cacheCount = 0;

   int requiredSize = g_SharedSwingDataSize;

   if(requiredSize < 1)
      return;

   if(requiredSize <= strength * 2)
      return;

   if(ArraySize(cache) < requiredSize)
      ArrayResize(cache, requiredSize);

   int limit = requiredSize;

   for(int i = strength; i < limit - strength; i++)
   {
      double h = g_SharedHigh[i];
      double l = g_SharedLow[i];

      bool isHigh = true;
      bool isLow  = true;

      for(int j = 1; j <= strength; j++)
      {
         if(h <= g_SharedHigh[i+j] || h <= g_SharedHigh[i-j])
            isHigh = false;

         if(l >= g_SharedLow[i+j] || l >= g_SharedLow[i-j])
            isLow = false;

         if(!isHigh && !isLow)
            break;
      }

      if(isHigh)
      {
         cache[cacheCount].bar   = i;
         cache[cacheCount].price = h;
         cache[cacheCount].type  = 1;
         cacheCount++;
      }
      else if(isLow)
      {
         cache[cacheCount].bar   = i;
         cache[cacheCount].price = l;
         cache[cacheCount].type  = -1;
         cacheCount++;
      }
   }
}

void BuildSharedMergedSwingCache(
   Swing &source[],
   int sourceCount,
   Swing &merged[],
   int &mergedCount
)
{
   mergedCount = 0;

   if(sourceCount < 1)
      return;

   if(ArraySize(merged) < sourceCount)
      ArrayResize(merged, sourceCount);

   int i = 0;

   while(i < sourceCount)
   {
      Swing current;
      current.bar   = source[i].bar;
      current.price = source[i].price;
      current.type  = source[i].type;

      while(i + 1 < sourceCount)
      {
         Swing next;
         next.bar   = source[i + 1].bar;
         next.price = source[i + 1].price;
         next.type  = source[i + 1].type;

         if(next.type != current.type)
            break;

         if(current.type == 1)
         {
            if(next.price > current.price)
            {
               current.bar   = next.bar;

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

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

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

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

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

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

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