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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.