rsi_macd_modisimple.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «rsi_macd_modisimple.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для 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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.