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

Madrimov Ribbon Pullback Strategy v2

madrimovribbonpullback@lifeindreamsworld.mq5

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

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 и перейдите к оплате.

Стоимость полного кода
1 220,50₽ ≈ $14.92