Madrimov Ribbon Pullback Strategy v2
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «madrimovribbonpullback@lifeindreamsworld.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Madrimov Ribbon Pullback Strategy v2 — это индикатор для MetaTrader 5, построенный на основе аналитической ленты скользящих средних и анализа внутренней структуры цены. Он отображает четыре настраиваемые линии MA (MA1–MA4), формируя «ленту», чьё относительное положение определяет направление тренда.
Индикатор выявляет структурные пробои (CHoCH и BOS) по пивотным точкам свинга, определяет откат к ленте и формирует сигналы Buy/Sell с возможностью подтверждения закрытой свечой. Для повышения надёжности используется проверка тренда на старшем таймфрейме путём сравнения быстрой и медленной скользящих.
Дополнительно индикатор отрисовывает стрелки сигналов, уровни TP1/TP2 и SL, рассчитанные через ATR с настраиваемыми множителями, а также выводит информационный комментарий с текущим состоянием трендов и сигналов на график.
Настройки программы
| Настройка | Описание |
|---|---|
| i_ma1 | Период быстрой скользящей средней MA1 — верхний якорь ленты при бычьем тренде. |
| i_ma2 | Период скользящей средней MA2 — вторая линия ленты. |
| i_ma3 | Период скользящей средней MA3 — третья линия ленты. |
| i_ma4 | Период медленной скользящей средней MA4 — нижний якорь ленты при бычьем тренде. |
| i_exp | Переключатель типа скользящей средней: true — экспоненциальная (EMA), false — простая (SMA). |
| i_showRib | Отображение или скрытие линий скользящих средних ленты на графике. |
| i_slopeLen | Глубина анализа наклона (количество баров назад) для определения чистого тренда ленты. |
| i_slopeMult | Множитель чувствительности наклона — минимальное изменение MA1 за период наклона для признания чистого бычьего/медвежьего движения. |
| i_sepMult | Множитель чувствительности разделения ленты — минимальный зазор между MA1 и MA4 для признания чистого тренда. |
| i_showInt | Отображение меток структурных пробоев CHoCH и BOS на графике. |
| i_pivotLen | Длина свинга для определения пивотных точек (локальных максимумов и минимумов). |
| i_confirm | При включении сигналы генерируются только на закрытых свечах, исключая формирующуюся свечу бара 0. |
| i_showSig | Отображение стрелок Buy и Sell на графике при появлении сигналов. |
| i_showTP | Отображение горизонтальных уровней TP1, TP2, SL и точки входа на графике. |
| i_lineLen | Длина горизонтальных линий TP/SL в барах от бара сигнала. |
| i_atrLen | Период расчёта ATR (среднего истинного диапазона), используемого для определения волатильности и расчёта уровней TP/SL. |
| i_tp1Mult | Множитель ATR для расчёта первого уровня тейк-профита (TP1) от цены входа. |
| i_tp2Mult | Множитель ATR для расчёта второго уровня тейк-профита (TP2) от цены входа. |
| i_slMult | Множитель ATR для расчёта уровня стоп-лосса от цены входа. |
Поиск по коду файла
#property version "2.10"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots 4
#property indicator_label1 "MA1 (fast)"
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrGray
#property indicator_width1 2
#property indicator_label2 "MA2"
#property indicator_type2 DRAW_LINE
#property indicator_color2 clrGray
#property indicator_width2 1
#property indicator_label3 "MA3"
#property indicator_type3 DRAW_LINE
#property indicator_color3 clrYellow
#property indicator_width3 1
#property indicator_label4 "MA4 (slow)"
#property indicator_type4 DRAW_LINE
#property indicator_color4 clrWhite
#property indicator_width4 2
input group "═══ Ribbon MA Periods ═══"
input int i_ma1 = 5; // MA1 Period (fast anchor)
input int i_ma2 = 13; // MA2 Period
input int i_ma3 = 50; // MA3 Period
input int i_ma4 = 200; // MA4 Period (slow anchor)
input bool i_exp = true; // Exponential MA (false = SMA)
input bool i_showRib = true; // Show Ribbon
input group "═══ Ribbon Filter ═══"
input int i_slopeLen = 5; // Slope Lookback (bars)
input double i_slopeMult = 0.05; // Slope Sensitivity
input double i_sepMult = 0.15; // Separation Sensitivity
input group "═══ Structure Settings ═══"
input bool i_showInt = true; // Show CHoCH / BOS labels
input int i_pivotLen = 5; // Pivot swing length
input group "═══ Entry Settings ═══"
input bool i_confirm = true; // Require closed candle confirmation
input bool i_showSig = true; // Show Buy / Sell arrows
input bool i_showTP = true; // Show TP / SL levels
input int i_lineLen = 100; // TP/SL line length (bars)
input group "═══ Risk Management ═══"
input int i_atrLen = 14; // ATR Length
input double i_tp1Mult = 2.0; // TP1 ATR Multiplier
input double i_tp2Mult = 4.0; // TP2 ATR Multiplier
input double i_slMult = 1.5; // SL ATR Multiplier
double Buf_MA1[], Buf_MA2[], Buf_MA3[], Buf_MA4[];
color C_BULL = (color)0x6B8F7A;
color C_BEAR = (color)0x2F2A25;
double intHighLevel = EMPTY_VALUE;
double intLowLevel = EMPTY_VALUE;
bool intHighCrossed = false;
bool intLowCrossed = false;
int intHighBar = -1;
int intLowBar = -1;
int intTrend = 0; // 0=none 1=bull -1=bear
int iLeg = -1; // 0=highSwing 1=lowSwing
double lastEntry = EMPTY_VALUE;
double lastTP1 = EMPTY_VALUE;
double lastTP2 = EMPTY_VALUE;
double lastSL = EMPTY_VALUE;
int sigDir = 0;
int objCount = 0;
string tp1LineName = "", tp2LineName = "", entLineName = "", slLineName = "";
ENUM_TIMEFRAMES GetHTF()
{
int s = PeriodSeconds();
if(s <= 300) return PERIOD_H1;
if(s <= 1800) return PERIOD_H4;
if(s <= 14400) return PERIOD_D1;
return PERIOD_W1;
}
string ObjName(string prefix)
{
return prefix + "_" + IntegerToString(objCount++);
}
string TimeframeName(int tf)
{
switch(tf)
{
case PERIOD_M1: return "M1"; case PERIOD_M5: return "M5";
case PERIOD_M15: return "M15"; case PERIOD_M30: return "M30";
case PERIOD_H1: return "H1"; case PERIOD_H4: return "H4";
case PERIOD_D1: return "D1"; case PERIOD_W1: return "W1";
case PERIOD_MN1: return "MN";
default: return IntegerToString(tf);
}
}
double CalcMA(const double &src[], int shift, int len, bool useEMA)
{
if(useEMA)
{
double k = 2.0 / (len + 1);
double ema = src[shift + len - 1];
for(int i = len - 2; i >= 0; i--)
ema = src[shift + i] * k + ema * (1.0 - k);
return ema;
}
double sum = 0;
for(int i = 0; i < len; i++) sum += src[shift + i];
return sum / len;
}
double CalcATR(const double &h[], const double &l[], const double &c[], int shift, int len)
{
double sum = 0;
for(int i = 0; i < len; i++)
{
double hl = h[shift+i] - l[shift+i];
double hpc = MathAbs(h[shift+i] - c[shift+i+1]);
double lpc = MathAbs(l[shift+i] - c[shift+i+1]);
sum += MathMax(hl, MathMax(hpc, lpc));
}
return sum / len;
}
double Highest(const double &a[], int shift, int len)
{
double v = a[shift];
for(int i = 1; i < len; i++) if(a[shift+i] > v) v = a[shift+i];
return v;
}
double Lowest(const double &a[], int shift, int len)
{
double v = a[shift];
for(int i = 1; i < len; i++) if(a[shift+i] < v) v = a[shift+i];
return v;
}
void DrawSegment(string name, datetime t1, datetime t2, double price,
color clr, ENUM_LINE_STYLE style, int width)
{
if(ObjectFind(0, name) >= 0) ObjectDelete(0, name);
ObjectCreate(0, name, OBJ_TREND, 0, t1, price, t2, price);
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_STYLE, style);
ObjectSetInteger(0, name, OBJPROP_WIDTH, width);
ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, false);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE,false);
ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
}
void DrawText(string name, datetime t, double price, string txt,
color clr, int fontSize = 8)
{
if(ObjectFind(0, name) >= 0) ObjectDelete(0, name);
ObjectCreate(0, name, OBJ_TEXT, 0, t, price);
ObjectSetString(0, name, OBJPROP_TEXT, txt);
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_FONTSIZE, fontSize);
ObjectSetString(0, name, OBJPROP_FONT, "Arial Bold");
ObjectSetInteger(0, name, OBJPROP_SELECTABLE,false);
ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
}
void DrawArrow(string name, datetime t, double price, bool up, color clr)
{
if(ObjectFind(0, name) >= 0) ObjectDelete(0, name);
ENUM_OBJECT arrowType = up ? OBJ_ARROW_UP : OBJ_ARROW_DOWN;
ObjectCreate(0, name, arrowType, 0, t, price);
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_WIDTH, 3);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE,false);
ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
}
void SafeDelete(string &name)
{
if(name != "" && ObjectFind(0, name) >= 0)
ObjectDelete(0, name);
name = "";
}
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll(0, "MRP_");
Comment("");
}
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[])
{
// код доступен только после оплаты
}
int minBars = i_ma4 + i_atrLen + i_slopeLen + i_pivotLen * 2 + 10;
if(rates_total < minBars) return 0;
ArraySetAsSeries(time, true);
ArraySetAsSeries(high, true);
ArraySetAsSeries(low, true);
ArraySetAsSeries(close, true);
ArraySetAsSeries(open, true);
if(prev_calculated <= 0)
{
intHighLevel = EMPTY_VALUE; intLowLevel = EMPTY_VALUE;
intHighCrossed = false; intLowCrossed = false;
intHighBar = -1; intLowBar = -1;
intTrend = 0; iLeg = -1;
sigDir = 0;
lastEntry = lastTP1 = lastTP2 = lastSL = EMPTY_VALUE;
tp1LineName = tp2LineName = entLineName = slLineName = "";
ObjectsDeleteAll(0, "MRP_");
objCount = 0;
}
ENUM_TIMEFRAMES htfTF = GetHTF();
bool htfBullish = false, htfBearish = false;
{
double htfClose[];
if(CopyClose(_Symbol, htfTF, 0, i_ma4 * 3, htfClose) >= i_ma4)
{
ArraySetAsSeries(htfClose, true);
Показано первые 50% кода (символов: 12205)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.