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

Swing Failure Pattern [LuxAlgo]

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

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

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

О программе

Индикатор MetaTrader 4, предназначенный для построения Swing Failure Pattern (SFP) на графике цены. Он выявляет уровни пивотов и отслеживает пробои этих уровней свечами, формирующими паттерн разворота тренда. Индикатор рисует линии свингов, линии подтверждения, фитили и текстовые метки, а также может размещать стрелки при обнаружении пробоя тренда.

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

НастройкаОписание
Swings (SwingLength) Длина свинга — Количество баров, используемых для определения пивотных точек
Bullish SFP (ShowBullishSFP) Показать бычий SFP — Включает отображение бычьих паттернов Swing Failure Pattern
Bearish SFP (ShowBearishSFP) Показать медвежий SFP — Включает отображение медвежьих паттернов Swing Failure Pattern
Swing Lines (ShowSwingLines) Показать линии свингов — Отображает линии тренда по уровням свингов
Confirmation Lines (ShowConfirmationLines) Показать линии подтверждения — Отображает пунктирные линии противоположного пивота
Swing Failure Wick (ShowSFPWick) Показать фитиль SFP — Отображает вертикальную линию фитиля свечи, пробившей уровень свинга
Swing Failure Label (ShowSFPLabel) Показать метку SFP — Отображает текстовую метку SFP на графике
Show Debug Info (ShowDebugInfo) Показать отладочную информацию — Включает вывод отладочной информации в комментарий графика
Bullish Color (BullishColor) Цвет бычий — Цвет линий и меток бычьего паттерна SFP
Bearish Color (BearishColor) Цвет медвежий — Цвет линий и меток медвежьего паттерна SFP
Show Trend Break Arrows (ShowTrendBreakArrows) Показать стрелки разрыва тренда — Включает отображение стрелок при обнаружении пробоя тренда
Trend Break Arrow Up Code (TrendBreakArrowUpCode) Код стрелки разрыва вверх — Символ стрелки для сигнала разрыва восходящего тренда
Trend Break Arrow Down Code (TrendBreakArrowDownCode) Код стрелки разрыва вниз — Символ стрелки для сигнала разрыва нисходящего тренда
Trend Break Arrow Up Color (TrendBreakArrowUpColor) Цвет стрелки разрыва вверх — Цвет стрелки для сигнала разрыва восходящего тренда
Trend Break Arrow Down Color (TrendBreakArrowDownColor) Цвет стрелки разрыва вниз — Цвет стрелки для сигнала разрыва нисходящего тренда
Trend Break Arrow Offset (points) (TrendBreakArrowOffset) Смещение стрелки разрыва — Вертикальное смещение стрелок разрыва тренда в пунктах
Trend Break Arrow Size (TrendBreakArrowSize) Размер стрелки разрыва — Размер стрелок разрыва тренда
Получить полный код

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

/*
── Project ─────────────────────────────────────────────────────────────────────

Name:        Swing_Failure_Pattern_LuxAlgo_v2
Version:     1.00
Date:        2025

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

*/

#property strict
#property indicator_chart_window
#property indicator_buffers 2
input int    SwingLength = 5;           // Swings
input bool   ShowBullishSFP = true;     // Bullish SFP
input bool   ShowBearishSFP = true;     // Bearish SFP
input bool   ShowSwingLines = true;     // Swing Lines
input bool   ShowConfirmationLines = true; // Confirmation Lines
input bool   ShowSFPWick = true;        // Swing Failure Wick
input bool   ShowSFPLabel = true;       // Swing Failure Label
input bool   ShowDebugInfo = false;     // Show Debug Info
input color  BullishColor = clrLimeGreen;  // Bullish Color
input color  BearishColor = clrRed;        // Bearish Color
input bool ShowTrendBreakArrows = true; // Show Trend Break Arrows
input int TrendBreakArrowUpCode = 233; // Trend Break Arrow Up Code
input int TrendBreakArrowDownCode = 234; // Trend Break Arrow Down Code
input color TrendBreakArrowUpColor = clrAqua; // Trend Break Arrow Up Color
input color TrendBreakArrowDownColor = clrMagenta; // Trend Break Arrow Down Color
input int TrendBreakArrowOffset = 10; // Trend Break Arrow Offset (points)
input int TrendBreakArrowSize = 3; // Trend Break Arrow Size
double TrendBreakArrowUpBuffer[];
double TrendBreakArrowDownBuffer[];
int sfp_count_bearish = 0;
int sfp_count_bullish = 0;
int pivot_count_high = 0;
int pivot_count_low = 0;
struct SwingData
  {
   int               bar_index;
   double            price;
  };
struct PivotData
  {
   double            swing_price;
   int               swing_bar_index;
   double            opposite_price;
   int               opposite_bar_index;
   bool              active;
   bool              confirmed;
   string            swing_line_name;
   string            opposite_line_name;
   string            wick_line_name;
   string            label_name;
  };
SwingData swingHigh, swingLow;
PivotData pivotHigh, pivotLow;
int max_objects = 500;
int object_counter = 0;

int OnInit()
  {
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0, "SFP_");
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
      // код доступен только после оплаты
   }
   if(rates_total < SwingLength * 2 + 2)
      return(0);
   int limit;
   if(prev_calculated == 0)
     {
      limit = rates_total - SwingLength - 2;
      sfp_count_bearish = 0;
      sfp_count_bullish = 0;
      pivot_count_high = 0;
      pivot_count_low = 0;
     }
   else
     {
      limit = MathMin(50, rates_total - SwingLength - 2);
     }
   for(int i = limit; i >= 0; i--)
     {
      double ph = 0, pl = 0;
      if(i + SwingLength + 1 < rates_total)
        {
         ph = FindPivotHigh(high, i + 1, SwingLength);
         pl = FindPivotLow(low, i + 1, SwingLength);
        }
      if(ShowBearishSFP && ph != 0)
        {
         swingHigh.bar_index = i + 1;
         swingHigh.price = ph;
         if(prev_calculated == 0)
            pivot_count_high++;
        }
      if(ShowBearishSFP && swingHigh.bar_index >= 0 && swingHigh.bar_index > i)
        {
         double sw = swingHigh.price;
         int bx = swingHigh.bar_index;
         if(high[i] > sw && open[i] < sw && close[i] < sw)
           {
            double opposL = sw;
            int opposB = i;
            for(int j = bx - 1; j > i; j--)
              {
               if(low[j] < opposL)
                 {
                  opposL = low[j];
                  opposB = j;
                 }
              }
            string suffix = "H_" + IntegerToString(bx) + "_" + IntegerToString(i);
            string swing_name = "SFP_SwingH_" + suffix;
            if(ObjectFind(0, swing_name) < 0)
              {
               if(prev_calculated == 0)
                  sfp_count_bearish++;
               if(ShowSwingLines)
                 {
                  ObjectCreate(0, swing_name, OBJ_TREND, 0,
                               time[bx], sw, time[i], sw);
                  ObjectSetInteger(0, swing_name, OBJPROP_COLOR, BearishColor);
                  ObjectSetInteger(0, swing_name, OBJPROP_WIDTH, 1);
                  ObjectSetInteger(0, swing_name, OBJPROP_RAY_RIGHT, false);
                  ObjectSetInteger(0, swing_name, OBJPROP_RAY_LEFT, false);
                 }
               if(ShowConfirmationLines)
                 {
                  string oppos_name = "SFP_OpposH_" + suffix;
                  ObjectCreate(0, oppos_name, OBJ_TREND, 0,
                               time[opposB], opposL, time[i], opposL);
                  ObjectSetInteger(0, oppos_name, OBJPROP_COLOR, BearishColor);
                  ObjectSetInteger(0, oppos_name, OBJPROP_STYLE, STYLE_DOT);
                  ObjectSetInteger(0, oppos_name, OBJPROP_RAY_RIGHT, false);
                  ObjectSetInteger(0, oppos_name, OBJPROP_RAY_LEFT, false);
                 }
               if(ShowSFPWick)
                 {
                  string wick_name = "SFP_WickH_" + suffix;
                  ObjectCreate(0, wick_name, OBJ_TREND, 0,
                               time[i], high[i], time[i], sw);
                  ObjectSetInteger(0, wick_name, OBJPROP_COLOR, BearishColor);
                  ObjectSetInteger(0, wick_name, OBJPROP_WIDTH, 3);
                  ObjectSetInteger(0, wick_name, OBJPROP_RAY, false);
                 }
               if(ShowSFPLabel)
                 {
                  string label_name = "SFP_LabelH_" + suffix;
                  ObjectCreate(0, label_name, OBJ_TEXT, 0, time[i], high[i]);
                  ObjectSetString(0, label_name, OBJPROP_TEXT, "SFP");
                  ObjectSetInteger(0, label_name, OBJPROP_COLOR, BearishColor);
                  ObjectSetInteger(0, label_name, OBJPROP_FONTSIZE, 8);
                  ObjectSetInteger(0, label_name, OBJPROP_ANCHOR, ANCHOR_LOWER);
                 }
               pivotHigh.swing_price = sw;
               pivotHigh.swing_bar_index = bx;
               pivotHigh.opposite_price = opposL;
               pivotHigh.opposite_bar_index = opposB;
               pivotHigh.swing_line_name = swing_name;
               pivotHigh.opposite_line_name = "SFP_OpposH_" + suffix;
               pivotHigh.active = true;
               pivotHigh.confirmed = false;
              }
           }
        }
      if(i == 0 && pivotHigh.active && !pivotHigh.confirmed)
        {
         if(close[0] < pivotHigh.opposite_price)
           {
            pivotHigh.confirmed = true;
            if(ShowSFPLabel)
              {
               string suffix_conf = StringSubstr(pivotHigh.swing_line_name, 13);
               string label_name = "SFP_LabelH_" + suffix_conf;
               if(ObjectFind(0, label_name) >= 0)
                 {
                  ObjectSetString(0, label_name, OBJPROP_TEXT, "SFP▼");
                 }
              }
           }
         else
           {
            if(ShowSwingLines && ObjectFind(0, pivotHigh.swing_line_name) >= 0)
              {
               ObjectSetInteger(0, pivotHigh.swing_line_name, OBJPROP_TIME, 1, time[0]);
              }
            if(ShowConfirmationLines && ObjectFind(0, pivotHigh.opposite_line_name) >= 0)
              {
               ObjectSetInteger(0, pivotHigh.opposite_line_name, OBJPROP_TIME, 1, time[0]);
              }
           }
        }
      if(ShowBullishSFP && pl != 0)
        {
         swingLow.bar_ind

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

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

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

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

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

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

Стоимость полного кода
1 139,10₽ ≈ $13.92