Madrimov RP
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «madrimovribbonpullback.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Стрелки Buy/Sell появляются на графике при совпадении разлома структуры с откатом к ленте и подтверждении тренда на старшем таймфрейме. Индикатор может отображать уровни Take Profit и Stop Loss, рассчитанные по множителям ATR, с возможностью подтверждения по закрытой свече.
Настройки программы
| Настройка | Описание |
|---|---|
| MA1 Period (fast anchor) (i_ma1) | Период MA1 (быстрая якорная) — Период быстрой скользящей средней, используемой как верхняя граница ленты |
| MA2 Period (i_ma2) | Период MA2 — Период второй скользящей средней в ленте |
| MA3 Period (i_ma3) | Период MA3 — Период третьей скользящей средней в ленте |
| MA4 Period (slow anchor) (i_ma4) | Период MA4 (медленная якорная) — Период медленной скользящей средней, используемой как нижняя граница ленты |
| Exponential MA (false = SMA) (i_exp) | Экспоненциальная MA — Включает расчёт экспоненциальной MA; при выключении используется простая MA |
| Show Ribbon (i_showRib) | Показать ленту — Отображение линий скользящих средних на графике |
| Slope Lookback (bars) (i_slopeLen) | Длина наклона (баров) — Количество баров для расчёта наклона ленты |
| Slope Sensitivity (i_slopeMult) | Чувствительность наклона — Множитель чувствительности наклона ленты относительно ATR |
| Separation Sensitivity (i_sepMult) | Чувствительность разделения — Множитель минимального разделения между MA1 и MA4 относительно ATR |
| Show CHoCH / BOS labels (i_showInt) | Показать метки CHoCH / BOS — Отображение структурных меток Change of Character и Break of Structure |
| Pivot swing length (i_pivotLen) | Длина разворота — Длина свинг-периода для определения пивотов |
| Require closed candle confirmation (i_confirm) | Требовать подтверждение закрытой свечи — Сигналы формируются только по закрытым свечам |
| Show Buy / Sell arrows (i_showSig) | Показать стрелки Buy / Sell — Отображение стрелок сигналов на графике |
| Show TP / SL levels (i_showTP) | Показать уровни TP / SL — Отображение уровней Take Profit и Stop Loss |
| TP/SL line length (bars) (i_lineLen) | Длина линий TP/SL (баров) — Длина горизонтальных линий TP/SL в барах |
| ATR Length (i_atrLen) | Период ATR — Период расчёта Average True Range |
| TP1 ATR Multiplier (i_tp1Mult) | Множитель TP1 ATR — Множитель ATR для расчёта первого уровня Take Profit |
| TP2 ATR Multiplier (i_tp2Mult) | Множитель TP2 ATR — Множитель ATR для расчёта второго уровня Take Profit |
| SL ATR Multiplier (i_slMult) | Множитель SL ATR — Множитель ATR для расчёта уровня Stop Loss |
Поиск по коду файла
#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 и перейдите к оплате.