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