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

rsi_macd_modisimple.mq4

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

xauusd_gold_perfect.mq4MQL4 / MetaTrader 4 · 2 общих теговtm sniper pro.pineTradingView · 2 общих теговsniper pro.mq5MQL5 / MetaTrader 5 · 2 общих теговpro +.pineTradingView · 2 общих теговofada_gold_trader_v230.mq5MQL5 / MetaTrader 5 · 2 общих теговmulti strategy algo combined by enigma mode.pineTradingView · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Индикатор для MetaTrader 4, объединяющий анализ осцилляторов RSI и MACD с визуализацией трейл-стопа на графике цены. Он рассчитывает значения RSI и MACD, формирует производную линию на основе RSI и применяет множество настраиваемых условий для формирования сигналов покупки и продажи. Когда условия RSI и MACD совпадают, индикатор отображает маркеры на графике.

Дополнительно индикатор рассчитывает уровни трейл-стопа с использованием различных методов построения и ATR-множителей. Уровни отрисовываются в виде линий и стрелок на графике, позволяя визуально отслеживать динамику защитных уровней. Все параметры поведения настраиваются через внешние переключатели и числовые значения.

Индикатор работает в стандартном окне графика MetaTrader 4, использует 5 буферов отрисовки и поддерживает полную настройку отображения каждого компонента. Автор кода — Max Berilo.

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

НастройкаОписание
ShowBody Показать тела свечей — Переключатель отображения тел свечей при совпадении сигналов.
UseRSI Использовать RSI — Переключатель включения/отключения использования RSI для формирования сигналов.
UseRSIaccel Ускорение RSI — Переключатель условия ускорения (ускорение) для сигнала RSI.
UseRSIvalue Значение RSI — Переключатель условия абсолютного значения RSI для сигнала.
UseRSIdir Направление RSI — Переключатель условия направления для сигнала RSI.
UseRSIhist Гистограмма RSI — Переключатель условия гистограммы для сигнала RSI.
UseRSIisect Пересечение RSI — Переключатель условия пересечения сигнальной линии для сигнала RSI.
UseRSIsign Знак RSI — Переключатель условия знака (положительное/отрицательное значение) для сигнала RSI.
RSIperiod Период RSI — Период расчёта индикатора RSI.
RSIfastMA Быстрая MA RSI — Быстрая скользящая средняя для расчёта производной RSI.
RSIslowMA Медленная MA RSI — Медленная скользящая средняя для расчёта производной RSI.
RSIsignalMA Сигнальная MA RSI — Сигнальная скользящая средняя для производной RSI.
RSIbuyThreshold Порог покупки RSI — Пороговое значение RSI для сигнала покупки.
RSIsellThreshold Порог продажи RSI — Пороговое значение RSI для сигнала продажи.
UseMACD Использовать MACD — Переключатель включения/отключения использования MACD для формирования сигналов.
UseMACDaccel Ускорение MACD — Переключатель условия ускорения (ускорение) для сигнала MACD.
UseMACDvalue Значение MACD — Переключатель условия абсолютного значения MACD для сигнала.
UseMACDdir Направление MACD — Переключатель условия направления для сигнала MACD.
UseMACDhist Гистограмма MACD — Переключатель условия гистограммы для сигнала MACD.
UseMACDisect Пересечение MACD — Переключатель условия пересечения сигнальной линии для сигнала MACD.
UseMACDsign Знак MACD — Переключатель условия знака (положительное/отрицательное значение) для сигнала MACD.
FastMA Быстрая MA — Быстрая скользящая средняя для расчёта линии MACD.
SlowMA Медленная MA — Медленная скользящая средняя для расчёта линии MACD.
SignalMA Сигнальная MA — Сигнальная скользящая средняя для расчёта линии сигнала MACD.
SigMAmode Режим сигнальной MA — Режим сигнальной скользящей средней (применяется к производным линиям RSI и MACD).
ShowTrail Показать трейл-стоп — Переключатель отображения уровней трейл-стопа на графике.
TrlComment Комментарий трейл-стопа — Текстовый параметр — комментарий для уровней трейл-стопа.
TrlMethod Метод трейл-стопа — Метод расчёта базового значения трейл-стопа (включает несколько встроенных вариантов).
TrlPeriod Период трейл-стопа — Период скользящей средней, используемой в некоторых методах расчёта трейл-стопа.
TrlInitMul Начальный множитель трейл-стопа — Начальный множитель ATR при первоначальном расчёте трейл-стопа.
TrlMul Множитель трейл-стопа — Множитель ATR для последующего расчёта трейл-стопа после инициализации.
TrlAtrPer Период ATR трейл-стопа — Период индикатора ATR, используемый для расчёта трейл-стопа.
TrlTrap Значение ловушки трейл-стопа — Начальное значение ловушки трейл-стопа.
TrlUseMax Использовать максимум трейл-стопа — Переключатель ограничения трейл-стопа максимальным значением ловушки.
TrlMaxTrap Максимальная ловушка трейл-стопа — Максимальное значение ловушки трейл-стопа, ограничивающее уровень при активном использовании максимума.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_color2 LimeGreen
#property indicator_color3 Black
#property indicator_color4 Red
#property indicator_color5 Green
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 0
#property indicator_width4 1
#property indicator_width5 1

extern bool ShowBody     = True;
extern bool UseRSI       = True;
extern bool UseRSIaccel  = True;
extern bool UseRSIvalue  = False;
extern bool UseRSIdir    = True;
extern bool UseRSIhist   = True;
extern bool UseRSIisect  = True;
extern bool UseRSIsign   = False;
extern int  RSIperiod    = 14;
extern int  RSIfastMA      = 12;
extern int  RSIslowMA      = 26;
extern int  RSIsignalMA    = 9;

extern int  RSIbuyThreshold  = 40;
extern int  RSIsellThreshold = 60;
extern bool UseMACD      = True;
extern bool UseMACDaccel = True;
extern bool UseMACDvalue = False;
extern bool UseMACDdir   = True;
extern bool UseMACDhist  = False;
extern bool UseMACDisect = False;
extern bool UseMACDsign  = False;
extern int  FastMA       = 12;
extern int  SlowMA       = 26;
extern int  SignalMA     =  9;
extern int  SigMAmode    =  1;

extern bool   ShowTrail   = True;
extern string TrlComment  = "SATL-1,FATL-2,EMA(HLC/3)-3,(HLC/3)-4,EMA(C)-5,C-6";
extern int    TrlMethod   = 5;
extern int    TrlPeriod   = 5;
extern double TrlInitMul  = 1.0;
extern double TrlMul      = 2.0;
extern int    TrlAtrPer   = 21;
extern int    TrlTrap     = 0;
extern bool   TrlUseMax   = False;
extern int    TrlMaxTrap  = 45;

double ExtMap1[];
double ExtMap2[];
double TrlBegin[];
double TrlStopDn[];
double TrlStopUp[];
double RSI[];
double RSImacd[];
double MACD[];

int nFATL = 39;
int nSATL = 65;

double Spread;
static int nDrawBegin;

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

int deinit()
  {
   return(0);
  }

double CalcTrailStop(int shift, bool uptrend, bool initial)
  {
    double res, atr, sl = TrlTrap;
    if(!initial) {
      shift++;
    }
    atr = iATR(NULL, 0, TrlAtrPer, shift) / Point;
    if(initial) {
      sl  += TrlInitMul * atr;
    } else {
      sl  += TrlMul * atr;
    }
    if(TrlUseMax && sl > TrlMaxTrap) {
      sl = TrlMaxTrap;
    }
    switch(TrlMethod) {
      case 1:
        res = CalcSATLonMedian(shift);
        break;
      case 2:
        res = CalcFATLonMedian(shift);
        break;
      case 3:
        res = iMA(NULL, 0, TrlPeriod, 0, MODE_EMA, PRICE_TYPICAL, shift);
        break;
      case 4:
        res = (High[shift] + Low[shift] + Close[shift]) / 3.0;
        break;
      case 5:
        res = iMA(NULL, 0, TrlPeriod, 0, MODE_EMA, PRICE_CLOSE, shift);
        break;
      case 6:
      default:
        res = Close[shift];
        break;
    }
    if(uptrend) {
      res -= sl * Point;
    } else {
      res += (sl + Spread) * Point;
    }
    res = NormalizeDouble(res, Digits);
    return(res);
  }

int start()
  {
      // код доступен только после оплаты
   }
    int    limit, shift, counted_bars = IndicatorCounted();
    double val1, val2, ma, signal, prevsign, atr;
    bool   buy, sell, bRSIbuy, bRSIsell, bMACDbuy, bMACDsell;

    double StopLoss;
    bool   TrlLong, TrlPrevLong, TrlShort, TrlPrevShort;

    Spread = MarketInfo(Symbol(), MODE_SPREAD);
    if(!ShowTrail) {
      SetIndexDrawBegin(2, Bars);
      SetIndexDrawBegin(3, Bars);
      SetIndexDrawBegin(4, Bars);
    }

    if(Bars <= RSIperiod) return(0);
    if(counted_bars > 0) {
      counted_bars--;
    } else {
      ArrayInitialize(TrlBegin,  EMPTY_VALUE);
      ArrayInitialize(TrlStopDn, EMPTY_VALUE);
      ArrayInitialize(TrlStopUp, EMPTY_VALUE);
    }
    limit = Bars - counted_bars - 1;

    for(shift = limit; shift >= 0; shift--) {
      if(UseRSI) {
        RSI[shift] = iRSI(NULL, 0, RSIperiod, PRICE_CLOSE, shift);
      } else {
        RSI[shift] = 0;
      }
      if(UseMACD) {
        MACD[shift] = iMACD(NULL, 0, FastMA, SlowMA, SignalMA, PRICE_CLOSE, MODE_MAIN, shift);
      } else {
        MACD[shift] = 0;
      }
    }

    for(shift = limit; UseRSI && (shift >= 0); shift--) {
      if(shift < Bars - (RSIperiod + RSIslowMA)) {
        RSImacd[shift] = iMAOnArray(RSI,0,RSIfastMA,0,SigMAmode,shift)-iMAOnArray(RSI,0,RSIslowMA,0,SigMAmode,shift);
      } else {
        RSImacd[shift] = 0;
      }
    }

    for(shift = limit; shift >= 0; shift--) {
      val1 = EMPTY_VALUE; val2 = EMPTY_VALUE;
      if(UseRSI) {
        bRSIbuy  = False; bRSIsell = False;
        if(shift < Bars - (RSIperiod+RSIslowMA+2)) {
          if(UseRSIaccel) {
            prevsign = iMAOnArray(RSImacd,0,RSIsignalMA,0,SigMAmode,shift+1);
            signal   = iMAOnArray(RSImacd,0,RSIsignalMA,0,SigMAmode,shift);
            bRSIbuy  = (RSImacd[shift] - signal) > (RSImacd[shift+1] - prevsign);
            bRSIsell = (RSImacd[shift] - signal) < (RSImacd[shift+1] - prevsign);
          }
          if(UseRSIvalue) {
            buy  = RSI[shift] > RSIbuyThreshold;
            sell = RSI[shift] < RSIsellThreshold;
            if(UseRSIaccel) {
              bRSIbuy  = bRSIbuy  && buy;
              bRSIsell = bRSIsell && sell;
            } else {
              bRSIbuy  = buy;
              bRSIsell = sell;
            }
          }
          if(UseRSIdir) {
            buy  = (RSImacd[shift] > RSImacd[shift+1]);
            sell = (RSImacd[shift] < RSImacd[shift+1]);
            if(UseRSIaccel || UseRSIvalue) {
              bRSIbuy  = bRSIbuy  && buy;
              bRSIsell = bRSIsell && sell;
            } else {
              bRSIbuy  = buy;
              bRSIsell = sell;
            }
          }
          if(UseRSIhist) {
            buy  = RSImacd[shift] > RSImacd[shift+2];
            sell = RSImacd[shift] < RSImacd[shift+2];
            if(UseRSIaccel || UseRSIvalue || UseRSIdir) {
              bRSIbuy  = bRSIbuy  && buy;
              bRSIsell = bRSIsell && sell;
            } else {
              bRSIbuy  = buy;
              bRSIsell = sell;
            }
          }
          if(UseRSIisect) {
            if(!UseRSIaccel) {
              signal = iMAOnArray(RSImacd,0,RSIsignalMA,0,SigMAmode,shift);
            }
            buy  = RSImacd[shift] > signal;
            sell = RSImacd[shift] < signal;
            if(UseRSIaccel || UseRSIvalue || UseRSIdir || UseRSIhist) {
              bRSIbuy  = bRSIbuy  && buy;
              bRSIsell = bRSIsell && sell;
            } else {
              bRSIbuy  = buy;
              bRSIsell = sell;
            }
          }
          if(UseRSIsign) {
            bRSIbuy  = bRSIbuy  && (RSImacd[shift] >= 0);
            bRSIsell = bRSIsell && (RSImacd[shift] <= 0);
            if(UseRSIaccel || UseRSIvalue || UseRSIdir || UseRSIhist || UseRSIisect) {
              bRSIbuy  = bRSIbuy  && buy;
              bRSIsell = bRSIsell && sell;
            } else {
              bRSIbuy  = buy;
              bRSIsell = sell;
            }
          }
        }
      }
      if(UseMACD) {
        bMACDbuy  = False; bMACDsell = False;
        if(shift <= Bars -

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

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

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

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

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

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

Стоимость полного кода
1 126,60₽ ≈ $13.77