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

czigzag.mqh

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

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

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

О программе

Файл czigzag.mqh представляет собой библиотеку исходного кода для MetaTrader 4, содержащую класс CZigZag. Класс реализует ZigZag-индикатор, который выявляет значимые локальные максимумы и минимумы ценовых данных, сохраняя результаты в двух внутренних буферах для сигналов покупки и продажи.

Конструктор позволяет задать максимальное количество обрабатываемых баров и таймфрейм. Метод Refresh выполняет пересчёт буферов на основе текущих ценовых данных указанного символа, а метод GetArrow возвращает тип стрелки (ARROW_BUY, ARROW_SELL или ARROW_NONE) для конкретного бара.

Расчёты опираются на стандартные функции MQL4 (iLow, iHigh, iLowest, iHighest) и настраиваются через параметры глубины, отклонения и обратного шага. Результаты хранятся в индикаторных буферах, доступных для визуализации или дальнейшего анализа из советников и индикаторов.

Настройки программы

НастройкаОписание
__zigzag ZigZag settings — Текстовый параметр, используемый как заголовок раздела настроек ZigZag в панели параметров.
ExtDepth ExtDepth — Глубина поиска экстремумов цены — количество баров для определения локальных минимумов и максимумов (целое число, по умолчанию 60).
ExtDeviation ExtDeviation — Допустимое отклонение в пунктах для подтверждения экстремума (целое число, по умолчанию 5).
ExtBackstep ExtBackstep — Количество баров для обратной проверки при фильтрации экстремумов (целое число, по умолчанию 3).

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

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

Классы
Класс class CZigZag

Класс CZigZag — реализация ZigZag-индикатора для определения swing-экстремумов цены.

Методы и конструкторы
Конструктор · CZigZag CZigZag(int maxBars, int timePeriod)

Конструктор класса CZigZag с параметрами максимального количества баров и таймфрейма.

Деструктор · CZigZag ~CZigZag()

Деструктор класса CZigZag — освобождение памяти буферов.

Метод · CZigZag void Refresh(string symbol, int startBar)

Метод Refresh — пересчёт ZigZag-буферов для указанного символа и начального бара.

Метод · CZigZag ARROW_TYPE GetArrow(int zigZagBar)

Метод GetArrow — получение типа стрелки (покупка, продажа или отсутствие) для указанного бара.

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

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

#property strict

extern string     __zigzag             = " ------- ZigZag settings------------";
extern int        ExtDepth             = 60;
extern int        ExtDeviation         =  5;
extern int        ExtBackstep          =  3; 

enum ARROW_TYPE
{
   ARROW_NONE,
   ARROW_BUY,
   ARROW_SELL
};

class CZigZag
{
private: 
   double            _zigZagBufferBuy[];
   double            _zigZagBufferSell[];
   int               _maxBars;
   int               _period;

public: 
   int               _extDepth;
   int               _extDeviation;
   int               _extBackstep;

   CZigZag(int maxBars = 500, int timePeriod = 0)
   {
      _extDepth     = ExtDepth;
      _extDeviation = ExtDeviation;
      _extBackstep  = ExtBackstep;
      _maxBars      = maxBars;
      _period       = timePeriod;

      ArrayResize(_zigZagBufferBuy , _maxBars + 5, 0);
      ArrayResize(_zigZagBufferSell, _maxBars + 5, 0);
   }

   ~CZigZag()
   {
      ArrayFree(_zigZagBufferBuy);
      ArrayFree(_zigZagBufferSell);
   }

   void Refresh(string symbol, int startBar = 0)
   {       
      int    shift, back,lasthighpos,lastlowpos;
      double val,res;
      double curlow,curhigh,lasthigh,lastlow;
      lastlow  = 0;
      lasthigh = 0;

      double symbolPoint=MarketInfo(symbol, MODE_POINT);

      ArrayInitialize(_zigZagBufferBuy,  0);
      ArrayInitialize(_zigZagBufferSell, 0);

      for(shift = _maxBars - _extDepth; shift >= 0; shift--)
      {
         val = iLow(symbol, _period, iLowest(symbol, _period, MODE_LOW, _extDepth, shift + startBar));
         if(val == lastlow) 
         {
            val = 0.0;
         }
         else 
         { 
            lastlow = val; 
            if (( iLow(symbol, _period, shift+startBar) - val) > (_extDeviation * symbolPoint)) 
            {
               val = 0.0;
            }
            else
            {
               for(back = 1; back <= _extBackstep; back++)
               {
                  res = _zigZagBufferBuy[shift + back];
                  if ((res != 0) && (res > val)) _zigZagBufferBuy[shift + back] = 0.0; 
               }
            }
         } 
         _zigZagBufferBuy[shift] = val;

         val = iHigh(symbol, _period, iHighest(symbol, _period,MODE_HIGH,_extDepth, shift + startBar));
         if (val == lasthigh) 
         {
  

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

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

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

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

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

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

Стоимость полного кода
268,20₽ ≈ $3.28