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

rsi_divergence_1.mq5

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

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Индикатор рассчитывает значения RSI заданного периода по ценовым данным и отображает их в отдельном подокне графика. Дополнительно доступно сглаживание линии RSI методом T3 с настраиваемым периодом и коэффициентом кривизны. Индикатор поддерживает работу на разных таймфреймах, включая мультитаймфреймный режим, когда данные берутся с более высокого таймфрейма.

Основная функция — обнаружение дивергенций между линией RSI (или её сглаженной версией) и ценовым действием. Поддерживаются как обычные, так и скрытые дивергенции, с возможностью фильтрации по уровням перекупленности и перепроданности. Дополнительно индикатор определяет точки пересечения линий RSI и сигнальной линии на заданных уровнях.

Встроена система оповещений с воспроизведением звука при срабатывании сигналов о дивергенции или пересечении. Индикатор рисует линии и стрелки на графике, отслеживает пиковые точки (вершины и впадины), а также строит линии LineMan, соединяющие ключевые уровни. Все графические объекты привязаны к префиксу индикатора и удаляются при деинициализации.

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

НастройкаОписание
time frame (timeFrame) Таймфрейм — Таймфрейм, с которого берутся данные для расчёта; 0 означает текущий таймфрейм
show divergence (bCheckDiv) Показывать дивергенцию — Отображение линий и стрелок при обнаружении дивергенций между RSI и ценой
show all divergence or above/below level_hi/lo (bShowAllDiv) Показывать все дивергенции — Показывать все дивергенции или только те, что находятся ниже уровня lo или выше уровня hi
show cross signal (bCheckCross) Показывать сигнал пересечения — Отображение сигнальных стрелок при пересечении линий RSI и сигнальной линии на уровнях перекупленности/перепроданности
show LineMan (bCheckLineMan) Показывать LineMan — Отображение линий LineMan, соединяющих пиковые точки RSI
PlaySound() on signal cross (bAlertCross) Звуковое оповещение при пересечении — Воспроизведение звукового оповещения при пересечении линий RSI на заданном уровне
PlaySound() on divergence (bAlertDiv) Звуковое оповещение при дивергенции — Воспроизведение звукового оповещения при обнаружении дивергенции
PlaySound() on divergence (bAlertLineMan) Звуковое оповещение для LineMan — Воспроизведение звукового оповещения при обновлении линий LineMan
draw lines on chart/window (bDrawOnChart) Рисовать на графике — Отрисовка вспомогательных линий и стрелок непосредственно на графике цены
0/MODE_MAIN:RSI value 1/MODE_SIGNAL:smoothed value(T3) (div_mode) Режим линии RSI — Режим расчёта: 0 — по основной линии RSI, 1 — по сглаженной линии T3
number of bars to check divergence (nCheckBars) Количество баров для проверки — Количество баров, в пределах которых выполняется поиск дивергенций
RSI period (rsi_period) Период RSI — Период расчёта индикатора RSI
RSI period (t3_period) Период T3 — Период сглаживания линии RSI методом T3
when bShowAllDiv is true, show divergence only below this level (level_lo) Нижний уровень — Нижний уровень фильтрации дивергенций (перепроданность), используется при включённом режиме показа всех дивергенций
when bShowAllDiv is true, show divergence only above this level (level_hi) Верхний уровень — Верхний уровень фильтрации дивергенций (перекупленность), используется при включённом режиме показа всех дивергенций
allowable error along divergence line (oscilator) (div_oscErr) Допустимая ошибка осциллятора — Допустимое отклонение вдоль линии дивергенции для показания осциллятора
allowable error along divergence line (PPS), iATR(nCheckBars)*err (div_priceErr) Допустимая ошибка цены — Допустимое отклонение вдоль линии дивергенции для цены, рассчитывается как iATR(nCheckBars) умноженное на err
specify indicator window explicitly, 0: auto (window) Окно отображения — Номер подокна для отображения индикатора; 0 означает автоматический выбор
maximum number of bars to calculate, 0: no limit (nMaxBars) Максимальное количество баров — Максимальное количество баров для расчёта; 0 означает отсутствие ограничений
Получить полный код

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

#define DodgerBlue2  0xaa6014
#define Crimson2     0x280d93

#property  indicator_separate_window

#property indicator_minimum  0
#property indicator_maximum  100

#property  indicator_buffers  8

#property  indicator_color1  SlateBlue     // 0: Rsi line
#property  indicator_color2  MediumOrchid  // 1: Rsi smoothed line(T3)
#property  indicator_color3  Aqua          // 2: Long signal, cross
#property  indicator_color4  Magenta       // 3: Short signal, cross
#property  indicator_color5  DodgerBlue    // 4: Long signal, divergence
#property  indicator_color6  Crimson       // 5: Short signal, divergence
#property  indicator_color7  Crimson2      // 6: Top peak
#property  indicator_color8  DodgerBlue2   // 7: Bottom peak

#property  indicator_width1  1
#property  indicator_width2  1
#property  indicator_width3  1
#property  indicator_width4  1
#property  indicator_width5  1
#property  indicator_width6  1
#property  indicator_width7  1
#property  indicator_width8  1

#property  indicator_style1  STYLE_SOLID
#property  indicator_style2  STYLE_DOT
#property  indicator_style3  STYLE_SOLID
#property  indicator_style4  STYLE_SOLID
#property  indicator_style5  STYLE_SOLID
#property  indicator_style6  STYLE_SOLID
#property  indicator_style7  STYLE_SOLID
#property  indicator_style8  STYLE_SOLID

extern int    timeFrame     = 0;          // time frame
extern bool   bCheckDiv     = true;       // show divergence
extern bool   bShowAllDiv   = false;      // show all divergence or above/below level_hi/lo
extern bool   bCheckCross   = false;      // show cross signal
extern bool   bCheckLineMan = true;       // show LineMan
extern bool   bAlertCross   = false;      // PlaySound() on signal cross
extern bool   bAlertDiv     = false;      // PlaySound() on divergence
extern bool   bAlertLineMan = false;      // PlaySound() on divergence
extern bool   bDrawOnChart  = true;       // draw lines on chart/window
extern int    div_mode      = MODE_MAIN;  // 0/MODE_MAIN:RSI value 1/MODE_SIGNAL:smoothed value(T3)
extern int    nCheckBars    = 120;        // number of bars to check divergence
extern int    rsi_period    = 8;          // RSI period
extern int    t3_period     = 8;          // RSI period
extern double level_lo      = 30;         // when bShowAllDiv is true, show divergence only below this level
extern double level_hi      = 70;         // when bShowAllDiv is true, show divergence only above this level
extern double div_oscErr    = 4.0;        // allowable error along divergence line (oscilator)
extern double div_priceErr  = 0.4;        // allowable error along divergence line (PPS), iATR(nCheckBars)*err
extern int    window        = 0;          // specify indicator window explicitly, 0: auto
extern int    nMaxBars      = 2000;       // maximum number of bars to calculate, 0: no limit

double BufferMain[];     // 0: Rsi main line
double BufferSignal[];   // 1: Rsi smoothed line
double BufferLongCross[];   // 2: Long signal, cross
double BufferShortCross[];  // 3: Short signal, cross
double BufferLongDiv[];     // 4: Long signal, divergence
double BufferShortDiv[];    // 5: Short signal, divergence
double BufferTop[];         // 6: top peak
double BufferBottom[];      // 7: bottom peak

string sIndicatorName;
string sIndSelf = "00-RsiDiv_v104";
string sPrefix;
int    g_window;
int    markLong        = 233;
int    markShort       = 234;
int    markDot         = 167;
color  colRegularLong  = DodgerBlue;  // ( 30, 144, 255)= 0x1e90ff
color  colRegularShort = Crimson;     // (220,  20,  60)= 0xdc143c
color  colHiddenLong   = DodgerBlue2;
color  colHiddenShort  = Crimson2;
color  colLineManUpper = Aqua;
color  colLineManLower = Magenta;
int    wRegular        = 1;
int    wHidden         = 1;
double t3_curvature    = 0.6180;
double t3_e1, t3_e2, t3_e3, t3_e4, t3_e5, t3_e6;
double t3_c1, t3_c2, t3_c3, t3_c4;
double t3_w1, t3_w2, t3_b2, t3_b3;
datetime tAlertLast    = 0;
string indName;

string TimeFrameToStr(int timeFrame)
{
    switch (timeFrame) {
    case 1:     return("M1");
    case 5:     return("M5");
    case 15:    return("M15");
    case 30:    return("M30");
    case 60:    return("H1");
    case 240:   return("H4");
    case 1440:  return("D1");
    case 10080: return("W1");
    case 43200: return("MN");
    }

    return("??");
}

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

void deinit()
{
    int n = ObjectsTotal();
    for (int i = n - 1; i >= 0; i--) {
	string sName = ObjectName(i);
	if (StringFind(sName, sPrefix) == 0) {
	    ObjectDelete(sName);
	}
    }
}

void objLine(string sName, int win, datetime ts, double ps, datetime te, double pe, color col,
	     int width = 1, int style = STYLE_SOLID, bool bBack = true, bool bRay = false)
{
    sName = sPrefix + sName + " w" + win;

    ObjectCreate(sName, OBJ_TREND, win, 0, 0);
    ObjectSet(sName, OBJPROP_TIME1,  ts);
    ObjectSet(sName, OBJPROP_PRICE1, ps);
    ObjectSet(sName, OBJPROP_TIME2,  te);
    ObjectSet(sName, OBJPROP_PRICE2, pe);
    ObjectSet(sName, OBJPROP_COLOR,  col);
    ObjectSet(sName, OBJPROP_WIDTH,  width);
    ObjectSet(sName, OBJPROP_STYLE,  style);
    ObjectSet(sName, OBJPROP_BACK,   bBack);
    ObjectSet(sName, OBJPROP_RAY,    bRay);
}	    

void objArrow(string sName, int win, datetime t, double p, int arrow, color col, int width = 1)
{
    sName = sPrefix + sName + " w" + win;

    ObjectCreate(sName, OBJ_ARROW, win, 0, 0);
    ObjectSet(sName, OBJPROP_TIME1,     t);
    ObjectSet(sName, OBJPROP_PRICE1,    p);
    ObjectSet(sName, OBJPROP_ARROWCODE, arrow);
    ObjectSet(sName, OBJPROP_COLOR,     col);
    ObjectSet(sName, OBJPROP_WIDTH,     width);
}

double getVal(int i)
{
    if (div_mode == MODE_MAIN) {
	return(BufferMain[i]);
    }

    return(BufferSignal[i]);
}

double getLowerPrice(int i)
{
    double hi, lo;

    if (div_mode == MODE_MAIN) {
	hi = High[i];
	lo = Low[i];
    } else {
	hi = iMA(NULL, 0, t3_period, 0, MODE_LWMA, PRICE_HIGH, i);
	lo = iMA(NULL, 0, t3_period, 0, MODE_LWMA, PRICE_LOW, i);
    }

    return(MathMin(hi, lo));
}

double getHigherPrice(int i)
{
    double hi, lo;

    if (div_mode == MODE_MAIN) {
	hi = High[i];
	lo = Low[i];
    } else {
	hi = iMA(NULL, 0, t3_period, 0, MODE_LWMA, PRICE_HIGH, i);
	lo = iMA(NULL, 0, t3_period, 0, MODE_LWMA, PRICE_LOW, i);
    }

    return(MathMax(hi, lo));
}

void intersect(double &x0, double &y0, double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
{
    x0 = 0;
    y0 = 0;

    double a1, a2, b1, b2;

    if (x1 == x2){
	if (x3 != x4) {
	    a1 = (y4 - y3) / (x4 - x3);
	    b1 = y3 - a1 * x3;
	    x0 = x2;
	    y0 = a1 * x0 + b1;
	} else {
	    if (x1 == x3) {
		x0 = x1;
		y0 = y1;
	    }
	}

	return;
    }

    if (x3 == x4){
	a1 = (y2 - y1) / (x2 - x1);
	b1 = y2 - a1 * x2;
	x0 = x3;
	y0 = a1 * x0 + b1;

	return;
    }

    a1 = 0;
    b1 = 0;
    a2 = 0;
    b2 = 0;

    a1 = (y2 - y1) / (x2 - x1);
    b1 = y2 - a1 * x2;

    a2 = (y4 - y3) / (x4 - x3);
    b2 = y3 - a2 * x3;

    if (a1 != a2) {
	x0 = (b1 - b2) / (a2 - a1);
	y0 = a1 * x0 + b1;
    } else {
	if (b1 == b2) {
	    x0 = x1;
	    y0 = y1;
	}
    }
}

bool checkAlert()
{
    bool bPlayed = false;

    if ((bCheckCross && bAlertCross) || (bCheckDiv && bAlertDiv) || (bCheckLineMan && bAlertLineMan)) {
	bool bFireCross = (BufferLongCr

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

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

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

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

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

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

Стоимость полного кода
1 394,90₽ ≈ $17.05