dynamic_zone_rsi_3.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «dynamic_zone_rsi_3.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный индикатор рассчитывает значение RSI несколькими методами и отображает результаты анализа динамических зон на отдельном окне графика. Поддерживаются пять вариантов расчёта RSI: стандартный RSI, Wilders RSI, RSX, Cuttler RSI и T3 RSI. Для вычисления динамических зон используется внешняя библиотека dynamicZone.dll через механизм импорта.
Индикатор использует шесть буферов для отрисовки: линии зон покупок и продаж, центральная граница зоны, значения RSI, дополнительные линии и состояние. Результаты отображаются в отдельном подокне с различными цветами и стилями линий.
В основе расчётов лежит собственная реализация алгоритмов сглаживания (SMMA и T3), применяемых при вычислении различных вариантов RSI. Параметры задаются через внешние переменные, позволяющие настраивать метод, период, тип цены и пороги вероятности для динамических зон.
Настройки программы
| Настройка | Описание |
|---|---|
| RsiMethod | Rsi Method — Выбор метода расчёта RSI: 0 — RSI, 1 — Wilders RSI, 2 — RSX, 3 — Cuttler RSI, 4 — T3 RSI |
| RsiLength | Rsi Length — Период расчёта RSI, используется как длина усреднения в различных методах расчёта |
| RsiPrice | Rsi Price — Тип цены для расчёта RSI: 0 — Close, 1 — Open, 2 — High, 3 — Low, 4 — Median, 5 — Typical, 6 — Weighted |
| T3Hot | T3 Hot — Параметр нагрева (hot) для алгоритма T3, влияет на коэффициенты сглаживания |
| T3Original | T3 Original — Переключатель использования оригинальной формулы расчёта alpha в алгоритме T3 |
| DzLookBackBars | Dz Look Back Bars — Количество баров для анализа динамических зон, передаётся в функции dzBuy и dzSell из dynamicZone.dll |
| DzStartBuyProbability | Dz Start Buy Probability — Начальное значение вероятности для расчёта линии покупок в динамической зоне |
| DzStartSellProbability | Dz Start Sell Probability — Начальное значение вероятности для расчёта линии продаж в динамической зоне |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 DarkOrange
#property indicator_color2 LimeGreen
#property indicator_color3 DarkGray
#property indicator_color4 LimeGreen
#property indicator_color5 DarkOrange
#property indicator_color6 DarkOrange
#property indicator_width4 2
#property indicator_width5 2
#property indicator_width6 2
#property indicator_style1 STYLE_DOT
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_DOT
#import "dynamicZone.dll"
double dzBuy(double& sourceArray[],double probabiltyValue, int lookBack, int bars, int i );
double dzSell(double& sourceArray[],double probabiltyValue, int lookBack, int bars, int i );
#import
extern int RsiMethod = 4;
extern int RsiLength = 50;
extern int RsiPrice = PRICE_CLOSE;
extern double T3Hot = 0.8;
extern bool T3Original = false;
extern int DzLookBackBars = 70;
extern double DzStartBuyProbability = 0.10;
extern double DzStartSellProbability = 0.10;
double rsi[];
double rsida[];
double rsidb[];
double bli[];
double sli[];
double zli[];
double state[];
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int start()
{
// код доступен только после оплаты
}
void ClearPoint(int i,double& first[],double& second[])
{
if ((second[i] != EMPTY_VALUE) && (second[i+1] != EMPTY_VALUE))
second[i+1] = EMPTY_VALUE;
else
if ((first[i] != EMPTY_VALUE) && (first[i+1] != EMPTY_VALUE) && (first[i+2] == EMPTY_VALUE))
first[i+1] = EMPTY_VALUE;
}
void PlotPoint(int i,double& first[],double& second[],double& from[])
{
if (first[i+1] == EMPTY_VALUE)
{
if (first[i+2] == EMPTY_VALUE)
{
first[i] = from[i];
first[i+1] = from[i+1];
second[i] = EMPTY_VALUE;
}
else
{
second[i] = from[i];
second[i+1] = from[i+1];
first[i] = EMPTY_VALUE;
}
}
else
{
first[i] = from[i];
second[i] = EMPTY_VALUE;
}
}
string rsiMethodNames[] = {"rsi","Wilders rsi","rsx","Cuttler RSI","T3 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]);
Показано первые 50% кода (символов: 7785)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.