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

Psar marsi adaptive Macd

!!parabolic_marsi_adaptive_macd_alerts_+_arrows_+_mtf.mq5

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

pro +.pineTradingView · 3 общих теговofada_gold_trader_v230.mq5MQL5 / MetaTrader 5 · 3 общих теговmulti strategy algo combined by enigma mode.pineTradingView · 3 общих теговmelona ob strategy 6th update (by 3dots).pineTradingView · 3 общих теговsmc+ict+indicators+scalping master.pineTradingView · 3 общих теговpremium_super_scalping killer algo.pineTradingView · 3 общих тегов
Вы автор или правообладатель?

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

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

О программе

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

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

Система алертов позволяет настраивать отправку сообщений, звуковых сигналов, push-уведомлений и email-оповещений при смене тренда SAR. Линия сигнала поддерживает пять типов скользящих средних (SMA, EMA, SMMA, LWMA, TEMA), а параметры накопления управляют чувствительностью параболического SAR. Все визуальные и алертные параметы настраиваются пользователем.

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

НастройкаОписание
Time frame (TimeFrame) TimeFrame — Таймфрейм для расчётов
First rsi period (RsiPeriod1) RsiPeriod1 — Первый период RSI
First rsi speed (Speed1) Speed1 — Скорость первой скользящей RSI
Second rsi period (RsiPeriod2) RsiPeriod2 — Второй период RSI
Second rsi speed (Speed2) Speed2 — Скорость второй скользящей RSI
Signal period (SignalPeriod) SignalPeriod — Период сигнальной линии
Signal average type (SignalMethod) SignalMethod — Тип скользящей средней для сигнальной линии
Accumulation step (AccStep) AccStep — Шаг накопления для параболического SAR
Accumulation limit (AccLimit) AccLimit — Предел накопления для параболического SAR
Turn alerts on? (alertsOn) alertsOn — Включает систему оповещений
Alerts on still opened bar? (alertsOnCurrent) alertsOnCurrent — Включает оповещения на текущей открытой свече
Alerts should display message? (alertsMessage) alertsMessage — Включает отображение сообщений-оповещений
Alerts should play a sound? (alertsSound) alertsSound — Включает воспроизведение звуковых оповещений
Alerts should send a notification? (alertsNotify) alertsNotify — Включает отправку push-уведомлений
Alerts should send an email? (alertsEmail) alertsEmail — Включает отправку email-оповещений
Sound file (soundFile) soundFile — Файл звука для оповещений
Arrows visible true/false? (arrowsVisible) arrowsVisible — Видимость стрелок на графике
Arrows drawn on newest bar of higher time frame bar true/false? (arrowsOnNewest) arrowsOnNewest — Отрисовка стрелок на newest-свече старшего таймфрейма
Unique ID for arrows (arrowsIdentifier) arrowsIdentifier — Уникальный идентификатор для стрелок на графике
Upper arrow gap (arrowsUpperGap) arrowsUpperGap — Отступ верхней стрелки от цены
Lower arrow gap (arrowsLowerGap) arrowsLowerGap — Отступ нижней стрелки от цены
Up arrow color (arrowsUpColor) arrowsUpColor — Цвет стрелки для направления вверх
Down arrow color (arrowsDnColor) arrowsDnColor — Цвет стрелки для направления вниз
Up arrow code (arrowsUpCode) arrowsUpCode — Код стрелки для направления вверх
Down arrow code (arrowsDnCode) arrowsDnCode — Код стрелки для направления вниз
Up arrow size (arrowsUpSize) arrowsUpSize — Размер стрелки для направления вверх
Down arrow size (arrowsDnSize) arrowsDnSize — Размер стрелки для направления вниз
Interpolate in mtf mode (Interpolate) Interpolate — Включает интерполяцию данных в многотаймфреймном режиме
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 10
#property indicator_color1  clrLimeGreen
#property indicator_color2  clrLimeGreen
#property indicator_color3  clrPaleVioletRed
#property indicator_color4  clrPaleVioletRed
#property indicator_color5  clrDimGray  
#property indicator_color6  clrGold
#property indicator_color7  clrBlue
#property indicator_color8  clrRed
#property indicator_color9  clrBlue
#property indicator_color10 clrRed
#property indicator_width1  2
#property indicator_width3  2
#property indicator_width5  2
#property indicator_width6  2
#property indicator_width9  3
#property indicator_width10 3
#property strict

enum enMaTypes
{
   ma_sma,    // Simple moving average
   ma_ema,    // Exponential moving average
   ma_smma,   // Smoothed MA
   ma_lwma,   // Linear weighted MA
   ma_tema    // Triple exponential moving average - TEMA
};

extern ENUM_TIMEFRAMES    TimeFrame       = PERIOD_CURRENT;  // Time frame
extern int                RsiPeriod1      = 14;              // First rsi period
extern double             Speed1          = 1.2;             // First rsi speed
extern int                RsiPeriod2      = 34;              // Second rsi period
extern double             Speed2          = 0.8;             // Second rsi speed
extern int                SignalPeriod    = 9;               // Signal period
extern enMaTypes          SignalMethod    = ma_sma;          // Signal average type
extern double             AccStep         = 0.01;            // Accumulation step
extern double             AccLimit        = 0.1;             // Accumulation limit
extern bool               alertsOn        = false;           // Turn alerts on?
extern bool               alertsOnCurrent = false;           // Alerts on still opened bar?
extern bool               alertsMessage   = true;            // Alerts should display message?
extern bool               alertsSound     = false;           // Alerts should play a sound?
extern bool               alertsNotify    = false;           // Alerts should send a notification?
extern bool               alertsEmail     = false;           // Alerts should send an email?
extern string             soundFile       = "alert2.wav";    // Sound file
input bool                arrowsVisible   = false;            // Arrows visible true/false?
input bool                arrowsOnNewest  = false;            // Arrows drawn on newest bar of higher time frame bar true/false?
input string              arrowsIdentifier= "sar Arrows1";    // Unique ID for arrows
input double              arrowsUpperGap  = 1.0;              // Upper arrow gap
input double              arrowsLowerGap  = 1.0;              // Lower arrow gap
input color               arrowsUpColor   = clrBlue;          // Up arrow color
input color               arrowsDnColor   = clrCrimson;       // Down arrow color
input int                 arrowsUpCode    = 221;              // Up arrow code    
input int                 arrowsDnCode    = 222;              // Down arrow code
input int                 arrowsUpSize    = 2;                // Up arrow size
input int                 arrowsDnSize    = 2;                // Down arrow size
extern bool               Interpolate     = true;             // Interpolate in mtf mode

double machuu[],machud[],machdd[],machdu[],macd[],signal[],sarUp[],sarDn[],saraUp[],saraDn[],slope[],trend[],count[];
string indicatorFileName;
#define _mtfCall(_buff,_ind) iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,RsiPeriod1,Speed1,RsiPeriod2,Speed2,SignalPeriod,SignalMethod,AccStep,AccLimit,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsNotify,alertsEmail,soundFile,arrowsVisible,arrowsOnNewest,arrowsIdentifier,arrowsUpperGap,arrowsLowerGap,arrowsUpColor,arrowsDnColor,arrowsUpCode,arrowsDnCode,arrowsUpSize,arrowsDnSize,_buff,_ind)

int init()
{
      // код доступен только после оплаты
   }
void OnDeinit(const int reason)  {  ObjectsDeleteAll(0,arrowsIdentifier+":"); }

int start()
{
      // код доступен только после оплаты
   }
   int i,counted_bars=IndicatorCounted();
      if(counted_bars<0) return(-1);
      if(counted_bars>0) counted_bars--;
         int limit = fmin(Bars-counted_bars,Bars-1); count[0]=limit;
            if (TimeFrame!=_Period)
            {
               limit = (int)fmax(limit,fmin(Bars-1,_mtfCall(12,0)*TimeFrame/_Period));
               for (i=limit;i>=0 && !_StopFlag; i--)
               {
                  int y = iBarShift(NULL,TimeFrame,Time[i]);
                  int x = (i<Bars-1) ? iBarShift(NULL,TimeFrame,Time[i+1]) : y;
                     macd[i]   = _mtfCall(4,y);
                     signal[i] = _mtfCall(5,y);
                     sarUp[i]  = _mtfCall(6,y);
                     sarDn[i]  = _mtfCall(7,y);
                     slope[i]  = _mtfCall(10,y);
                     saraUp[i] = EMPTY_VALUE;
                     saraDn[i] = EMPTY_VALUE;
                     machuu[i] = EMPTY_VALUE;
                     machud[i] = EMPTY_VALUE;
                     machdd[i] = EMPTY_VALUE;
                     machdu[i] = EMPTY_VALUE;
                     if (x!=y)
                     {
                        saraUp[i] = _mtfCall(8,y);
                        saraDn[i] = _mtfCall(9,y);
                     }

                     if (!Interpolate || (i>0 && y==iBarShift(NULL,TimeFrame,Time[i-1]))) continue;
                        #define _interpolate(buff) buff[i+k] = buff[i]+(buff[i+n]-buff[i])*k/n
                        int n,k; datetime time = iTime(NULL,TimeFrame,y);
                           for(n = 1; (i+n)<Bars && Time[i+n] >= time; n++) continue;	
                           for(k = 1; k<n && (i+n)<Bars && (i+k)<Bars; k++) 
                           {
                              _interpolate(macd);
                              _interpolate(signal);
                              if (sarUp[i+n] != EMPTY_VALUE && sarUp[i] != EMPTY_VALUE) _interpolate(sarUp);                      
                              if (sarDn[i+n] != EMPTY_VALUE && sarDn[i] != EMPTY_VALUE) _interpolate(sarDn);              
                           }                           
               }
               for(i=limit; i>=0; i--) 
               {
                  if (macd[i]>0)
                  if (slope[i]==1)
                        machuu[i] = macd[i];
                  else  machud[i] = macd[i];
                  if (macd[i]<0)
                  if (slope[i]==1)
                        machdu[i] = macd[i];
                  else  machdd[i] = macd[i];
                }
    return(0);
    }

   for(i=limit; i>=0; i--) 
   {
      double sarClose,sarOpen,sarPosition,sarChange;
      double macdHi = iMaRsi((int)High[i],RsiPeriod1,Speed1,i,0) - iMaRsi((int)High[i],RsiPeriod2,Speed2,i,1);
      double macdLo = iMaRsi((int)Low[i], RsiPeriod1,Speed1,i,2) - iMaRsi((int)Low[i], RsiPeriod2,Speed2,i,3);
      double macdMi = (macdHi+macdLo)*0.5;
      macd[i]       = iMaRsi((int)macdMi,RsiPeriod1,Speed1,i,4)-iMaRsi((int)macdMi,RsiPeriod2,Speed2,i,5);
      signal[i]     = iCustomMa(SignalMethod,macd[i],SignalPeriod,i);
      iParabolic(macd[i],macd[i],AccStep,AccLimit,sarClose,sarOpen,sarPosition,sarChange,i);

      sarUp[i]  = sarDn[i] = saraUp[i] = saraDn[i] = EMPTY_VALUE;
      machuu[i] = machud[i]= machdd[i] = machdu[i] = EMPTY_VALUE;
      slope[i] = (i<Bars-1) ? (macd[i]>macd[i+1]) ? 1 : (macd[i]<macd[i+1]) ? -1 : slope[i+1] : 0;

      if (macd[i]>0)
      if (slope[i]==1)
            machuu[i] = macd[i];
      else  machud[i] = macd[i];
      if (macd[i]<0)
        if (slope[i]==1)
              machdu[i] = macd[i];
        else  machdd[i] = macd[i];

      if (sarPosition==1)
            sarUp[i] = sarClose;
      else  sarDn[i] = sarClose;
      if (sarChange!=0)
         if (sarPosition==1)
               saraUp[i] = sarClose;
         else  saraDn[i] = sarClose;
         trend[i] = (i<Bars-1) ? (saraUp[i]!=EMPTY_VALUE && saraUp[i+1]==EMPTY_VALUE) ?  1 :
                                 (saraDn[i]!=EMPTY_VALUE && saraDn[i+1]==EMPTY_VALUE) ? -1 : trend[i+1] : 0;

         if (arrowsVisible)
         {
           string lookFor = arrowsIdentifier+":"+(string)Time[i]; if (ObjectFind(0,lookFor)==0) ObjectDelete(0,lookFor);                       
           if (i<(Bars-1) && trend[i] != trend[i+1])
           {
             if (trend[i] == 1) drawArrow(i,arrowsUpColor,arrowsUpCode,arrowsUpSize,false);
             if (trend[i] ==-1) drawArrow(i

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

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

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

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

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

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

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