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

Multi pair DTOSC ssm rsioma

multi_pair_dtosc_of_ssm_rsioma.mq5

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

!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 2 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 2 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedingvonepointoneone.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedging 1.10 optimized.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedging 1.09 a (2).mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Индикатор для MetaTrader 4, отображающий мультипарный DTOSC (двойной стохастик от SSM-сглаженной RSI) в отдельном окне графика. Рассчитывает RSI несколькими доступными методами, применяет SSM-сглаживание и трансформирует результат через стохастический осциллятор. Обрабатывает несколько валютных пар одновременно, отрисовывая гистограммные буферы, отражающие направление и наклон осциллятора для каждого символа. Между данными каждой пары рисуются разделители с настраиваемыми цветами. При пересечении нулевой линии индикатор может запускать оповещения: всплывающие сообщения, звуковые сигналы и email-уведомления.

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

НастройкаОписание
TimeFrame Таймфрейм — Таймфрейм для расчёта индикатора; значение Current time frame означает использование текущего графика.
RsiPeriod Период RSI — Период расчёта RSI.
RsiMethod Метод RSI — Метод расчёта RSI: стандартный RSI, Wilders, RSX или Cuttler RSI.
PeriodStoch Период стохастика — Период для расчёта стохастика на основе RSI.
PeriodSK Период сглаживания %K — Период SSM-сглаживания для линии %K стохастика.
PeriodSD Период сглаживания %D — Период SSM-сглаживания для линии %D стохастика.
SsmPrice Цена для SSM — Тип цены, используемой для SSM-сглаживания: Close, Open, High, Low, Median, Typical или Weighted.
SsmPeriod Период SSM — Период SSM (Super Smoother) фильтра.
alertsOn Оповещения включены — Включить или выключить систему оповещений.
alertsOnCurrent Оповещения на текущем баре — Если включено, оповещение срабатывает на текущем баре; если выключено — на предыдущем.
alertsMessage Сообщение — Показывать всплывающее оповещение при пересечении нулевой линии.
alertsSound Звук — Воспроизводить звуковой сигнал при пересечении нулевой линии.
alertsEmail Email — Отправлять email-уведомление при пересечении нулевой линии.
BarsPerSymbol Баров на символ — Количество баров, отображаемых для каждой валютной пары.
UniqueID Идентификатор — Идентификатор индикатора, используемый для именования объектов на графике.
_ Разделитель — Метка-разделитель для группы настроек цветов разделителей.
textColor Цвет текста — Цвет текстовых меток названий валютных пар.
backColor Цвет фона — Цвет фона разделителей между парами.
zeroCrossUpColor Цвет пересечения вверх — Цвет разделителя при пересечении нулевой линии вверх.
zeroCrossDownColor Цвет пересечения вниз — Цвет разделителя при пересечении нулевой линии вниз.
separatorWidth Ширина разделителя — Ширина разделительной области между данными разных валютных пар.
Получить полный код

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

#property indicator_separate_window
#property  indicator_buffers 6
#property  indicator_color1  LimeGreen
#property  indicator_color2  LimeGreen
#property  indicator_color3  Orange
#property  indicator_color4  Orange
#property  indicator_color5  DimGray
#property  indicator_color6  Red
#property  indicator_width1  2
#property  indicator_width3  2
#property  indicator_width5  2

enum prices
{
   pr_close,   // Close
   pr_open,    // Open
   pr_high,    // High
   pr_low,     // Low
   pr_median,  // Median
   pr_typical, // Typical
   pr_weighted // Weighted
};
enum rsis
{
   rsi_rsi,   // RSI
   rsi_wil,   // Wilders rsi
   rsi_esx,   // Rsx
   rsi_cut    // Cuttlers RSI
};

extern string TimeFrame          = "Current time frame";
extern int    RsiPeriod          = 14;
extern rsis   RsiMethod          = rsi_rsi;
extern int    PeriodStoch        = 25;
extern int    PeriodSK           = 15;
extern int    PeriodSD           =  6;
extern prices SsmPrice           = pr_close;
extern int    SsmPeriod          = 14;
extern bool   alertsOn           = false;
extern bool   alertsOnCurrent    = true;
extern bool   alertsMessage      = true;
extern bool   alertsSound        = false;
extern bool   alertsEmail        = false;
extern int    BarsPerSymbol      = 100;
extern string Symbols            = "EURUSD;GBPUSD;USDCHF";
extern string UniqueID           = "Multi pair DTOSC ssm rsioma";
extern string _                  = "separator colors";
extern color  textColor          = Black;
extern color  backColor          = DarkGray;
extern color  zeroCrossUpColor   = LimeGreen;
extern color  zeroCrossDownColor = HotPink;
extern int    separatorWidth     = 6;

double histouu[];
double histoud[];
double histodd[];
double histodu[];
double value[];
double work[];
double slope[];
double trend[];
double rsi[];
double stochrsi[];
double sk[];
double sd[];
double ssm[];

int      window;  
string   aPairs[];
string   shortName;
double   minValue;
double   maxValue;
double   maxValues[];
int      timeFrame;
bool     calculateValue;
string   indicatorFileName;

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

int deinit()
{
   for (int i = 0; i < ArraySize(aPairs); i++)
   { 
         ObjectDelete(shortName+i);
         ObjectDelete(shortName+i+i);
   }         
   return(0);
}

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

void plotGraph(string symbol,int limit, int& shift,int element, double max)
{
   for(int i=limit; i>=0; i--)
   {   
      value[i+shift]   = work[i+shift];
      histouu[i+shift] = EMPTY_VALUE;
      histoud[i+shift] = EMPTY_VALUE;
      histodd[i+shift] = EMPTY_VALUE;
      histodu[i+shift] = EMPTY_VALUE;
      if (work[i+shift]>0)
         if (slope[i+shift]==1)
               histouu[i+shift] = work[i+shift];
         else  histoud[i+shift] = work[i+shift];
      if (work[i+shift]<0)
         if (slope[i+shift]==-1)
               histodd[i+shift] = work[i+shift];
         else  histodu[i+shift] = work[i+shift];
   }
   createLabel(symbol,element,shift+limit+separatorWidth-2,max,isSignalCrossing(shift));

   shift += (limit+separatorWidth-1);
}

int isSignalCrossing(int shift)
{
   double res = (work[shift]*work[shift+1]); 
      if (res<=0)
         if (work[shift]>0) return( 1);
         else               return(-1);
   return(0);
}

void calculateIndicator()
{
   int i,counted_bars=IndicatorCounted();
      if(counted_bars<0) return;
      if(counted_bars>0) counted_bars--;
           int limit=MathMax(Bars-counted_bars,Bars-1);

   for(i=limit; i>=0; i--)
   {
      ssm[i] = iSsm(iMA(NULL,0,1,0,MODE_SMA,(int)SsmPrice,i),SsmPeriod,i,0);
      rsi[i] = iRsi(ssm[i],RsiPeriod,RsiMethod,i);      
      double LLV = rsi[ArrayMinimum(rsi,PeriodStoch,i)];
      double HHV = rsi[ArrayMaximum(rsi,PeriodStoch,i)];
      if ((HHV-LLV)!=0)
            stochrsi[i] = 100.0*((rsi[i] - LLV)/(HHV - LLV))-50;
      else  stochrsi[i] = 0;
      sk[i]    = iSsm(stochrsi[i],PeriodSK,i,1);
      sd[i]    = iSsm(sk[i]      ,PeriodSD,i,2);
      value[i] = sk[i];
      slope[i] = slope[i+1];
      trend[i] = trend[i+1];
         if (value[i] > value[i+1]) slope[i] =  1;
         if (value[i] < value[i+1]) slope[i] = -1;
         if (value[i] > 0)          trend[i] =  1;
         if (value[i] < 0)          trend[i] = -1;
   }
   manageAlerts();
}

string rsiMethodNames[] = {"rsi","Wilders rsi","rsx","Cuttler RSI"};
string getRsiName(int& method)
{
   int max = ArraySize(rsiMethodNames)-1;
      method=MathMax(MathMin(method,max),0); return(rsiMethodNames[method]);
}

double workRsi[][13];
#define _price  0
#define _change 1
#define _changa 2

double iRsi(double price, double period, int rsiMode, int i, int instanceNo=0)
{
   if (ArrayRange(workRsi,0)!=Bars) ArrayResize(workRsi,Bars);
      int z = instanceNo*13; 
      int r = Bars-i-1;

   workRsi[r][z+_price] = price;
   switch (rsiMode)
   {
      case 0:
         double alpha = 1.0/period; 
         if (r<period)
            {
               int k; double sum = 0; for (k=0; k<period && (r-k-1)>=0; k++) sum += MathAbs(workRsi[r-k][z+_price]-workRsi[r-k-1][z+_price]);
                  workRsi[r][z+_change] = (workRsi[r][z+_price]-workRsi[0][z+_price])/MathMax(k,1);
                  workRsi[r][z+_changa] =                                         sum/MathMax(k,1);
            }
         else
            {
               double change = workRsi[r][z+_price]-workRsi[r-1][z+_price];
                               workRsi[r][z+_change] = workRsi[r-1][z+_change] + alpha*(        change  - workRsi[r-1][z+_change]);
                               workRsi[r][z+_changa] = workRsi[r-1][z+_changa] + alpha*(MathAbs(change) - workRsi[r-1][z+_changa]);
            }
         if (workRsi[r][z+_changa] != 0)
               return(50.0*(workRsi[r][z+_change]/workRsi[r][z+_changa]+1));
         else  return(50.0);

      case 1 :
         workRsi[r][z+1] = iSmma(0.5*(MathAbs(workRsi[r][z+_price]-workRsi[r-1][z+_price])+(workRsi[r][z+_price]-workRsi[r-1][z+_price])),0.5*(period-1),Bars-i-1,instanceNo*2+0

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

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

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

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

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

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

Стоимость полного кода
1 226,70₽ ≈ $14.99