dynamic_zones_pa_composite_rsi_2_mtf.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «dynamic_zones_pa_composite_rsi_2_mtf.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 4, отображаемый в отдельном подокне графика. Он рассчитывает адаптивный составной RSI с использованием фазового анализа Хилберта и отображает динамические зоны вероятности покупки и продажи, полученные через внешнюю DLL-библиотеку.
Индикатор поддерживает работу на различных таймфреймах, включая мультитаймфреймовый режим, при котором данные старших периодов интерполируются на текущий график. Доступны визуальные буферы для отрисовки уровней динамических зон и линий тренда.
Система уведомлений позволяет настраивать оповещения при пересечении уровней, изменении наклона индикатора и других событиях. Уведомления могут отправляться через всплывающие сообщения, звуковые сигналы, push-уведомления и электронную почту.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Временной период — Временной период, на котором работает индикатор |
| PaCycles | Количество циклов — Параметр количества циклов для адаптивного расчёта периода индикатора |
| PaFilter | Фильтр фазы — Параметр фильтра, влияющий на определение фазовой динамики |
| RsiPrice | Тип цены для RSI — Тип цены, используемой для расчёта индикатора |
| RsiDepth | Глубина RSI — Глубина расчёта составного RSI (количество периодов) |
| RsiFast | Быстрый режим RSI — Переключатель между стандартным и ускоренным режимом расчёта RSI |
| DzLookBack | Период обзора динамических зон — Количество баров, используемых для расчёта динамических зон |
| DzBuyProbability | Вероятность покупки — Пороговое значение вероятности для формирования сигнала покупки в динамической зоне |
| DzSellProbability | Вероятность продажи — Пороговое значение вероятности для формирования сигнала продажи в динамической зоне |
| alertsOn | Уведомления включены — Главный переключатель для включения всей системы уведомлений |
| alertsOnCurrent | Уведомления для текущего бара — Определяет, будут ли уведомления срабатывать на текущем баре |
| alertsOnSlope | Уведомления при изменении наклона — Включает уведомления при изменении направления наклона индикатора |
| alertsOnLevels | Уведомления при пересечении уровней — Включает уведомления при пересечении индикатором уровней динамических зон |
| alertsMessage | Сообщения — Включает или отключает всплывающие сообщения-уведомления |
| alertsSound | Звуковые уведомления — Включает или отключает звуковые уведомления |
| alertsNotify | Push-уведомления — Включает или отключает push-уведомления |
| alertsEmail | Email-уведомления — Включает или отключает отправку уведомлений по электронной почте |
| soundFile | Файл звука — Имя звукового файла, воспроизводимого при срабатывании звукового уведомления |
| Interpolate | Интерполяция — Включает или отключает интерполяцию значений между барами при мультитаймфреймовом режиме |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 DarkGray
#property indicator_color2 PaleVioletRed
#property indicator_color3 LimeGreen
#property indicator_color4 LimeGreen
#property indicator_color5 PaleVioletRed
#property indicator_color6 PaleVioletRed
#property indicator_style1 STYLE_DOT
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_DOT
#property indicator_width4 2
#property indicator_width5 2
#property indicator_width6 2
#property indicator_minimum -0.1
#property indicator_maximum 1.1
#property indicator_levelcolor DarkGray
#import "dynamicZone.dll"
double dzBuyP(double& sourceArray[],double probabiltyValue, int lookBack, int bars, int i, double precission );
double dzSellP(double& sourceArray[],double probabiltyValue, int lookBack, int bars, int i, double precission );
#import
extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT;
extern double PaCycles = 1.0;
extern double PaFilter = 1.0;
extern ENUM_APPLIED_PRICE RsiPrice = PRICE_CLOSE;
extern int RsiDepth = 10;
extern bool RsiFast = false;
extern int DzLookBack = 35;
extern double DzBuyProbability = 0.90;
extern double DzSellProbability = 0.90;
extern bool alertsOn = false;
extern bool alertsOnCurrent = true;
extern bool alertsOnSlope = true;
extern bool alertsOnLevels = true;
extern bool alertsMessage = true;
extern bool alertsSound = false;
extern bool alertsNotify = false;
extern bool alertsEmail = false;
extern string soundFile = "alert2.wav";
extern bool Interpolate = true;
double rsi[];
double zli[];
double bli[];
double sli[];
double rsiDa[];
double rsiDb[];
double slope[];
double trendu[];
double trendz[];
double trendd[];
string indicatorFileName;
bool returnBars;
int init()
{
// код доступен только после оплаты
}
int deinit() { return(0); }
int start()
{
// код доступен только после оплаты
}
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars - counted_bars,Bars-1);
if (returnBars) { zli[0] = limit+1; return(0); }
if (TimeFrame == Period())
{
if (slope[limit]==-1) CleanPoint(limit,rsiDa,rsiDb);
for(int i = limit; i >= 0 ; i--)
{
double price = iMA(NULL,0,1,0,MODE_SMA,RsiPrice,i);
int RsiPeriod = MathMax(3,iHilbertPhase(price,PaFilter,PaCycles,i));
rsi[i] = iCompRsi(price,RsiPeriod,RsiDepth,RsiFast,i);
rsiDa[i] = EMPTY_VALUE;
rsiDb[i] = EMPTY_VALUE;
slope[i] = slope[i+1];
trendu[i] = trendu[i+1];
trendz[i] = trendz[i+1];
trendd[i] = trendd[i+1];
if (rsi[i] > rsi[i+1]) slope[i] = 1;
if (rsi[i] < rsi[i+1]) slope[i] = -1;
if (slope[i]==-1) PlotPoint(i,rsiDa,rsiDb,rsi);
bli[i] = dzBuyP (rsi, DzBuyProbability, DzLookBack, Bars, i, 0.0001);
sli[i] = dzSellP(rsi, DzSellProbability, DzLookBack, Bars, i, 0.0001);
zli[i] = dzSellP(rsi, 0.5, DzLookBack, Bars, i, 0.0001);
if (rsi[i] > zli[i]) trendz[i] = 1;
if (rsi[i] < zli[i]) trendz[i] =-1;
if (rsi[i] > bli[i]) trendu[i] = 1;
if (rsi[i] < bli[i]) trendu[i] =-1;
if (rsi[i] > sli[i]) trendd[i] = 1;
if (rsi[i] < sli[i]) trendd[i] =-1;
}
if (alertsOn)
{
if (alertsOnCurrent)
int whichBar = 0;
else whichBar = 1;
static datetime time1 = 0;
static string mess1 = "";
if (alertsOnLevels && trendu[whichBar] != trendu[whichBar+1])
{
if (trendu[whichBar] == 1 ) doAlert(time1,mess1,whichBar,"crossed upper level up");
if (trendu[whichBar] == -1 ) doAlert(time1,mess1,whichBar,"crossed upper level down");
}
static datetime time2 = 0;
static string mess2 = "";
if (alertsOnLevels && trendz[whichBar] != trendz[whichBar+1])
{
if (trendz[whichBar] == 1 ) doAlert(time2,mess2,whichBar,"crossed zero line up");
if (trendz[whichBar] == -1 ) doAlert(time2,mess2,whichBar,"crossed zero line down");
}
static datetime time3 = 0;
static string mess3 = "";
if (alertsOnLevels && trendd[whichBar] != trendd[whichBar+1])
{
if (trendd[whichBar] == 1 ) doAlert(time3,mess3,whichBar,"crossed lower level up");
if (trendd[whichBar] == -1 ) doAlert(time3,mess3,whichBar,"crossed lower level down");
}
static datetime time4 = 0;
static string mess4 = "";
if (alertsOnSlope && slope[whichBar] != slope[whichBar+1])
{
if (slope[whichBar] == 1 ) doAlert(time4,mess4,whichBar,"slope changed to up");
if (slope[whichBar] == -1 ) doAlert(time4,mess4,whichBar,"slope changed to down");
}
}
return(0);
}
limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,TimeFrame,indicatorFileName,-99,0,0)*TimeFrame/Period()));
if (slope[limit]==-1) CleanPoint(limit,rsiDa,rsiDb);
for(i=limit; i >= 0; i--)
{
int y = iBarShift(NULL,TimeFrame,Time[i]);
zli[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,PaCycles,PaFilter,RsiPrice,RsiDepth,RsiFast,DzLookBack,DzBuyProbability,DzSellProbability,alertsOn,alertsOnCurrent,alertsOnSlope,alertsOnLevels,alertsMessage,alertsSound,alertsNotify,alertsEmail,soundFile,0,y);
bli[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,PaCycles,PaFilter,RsiPrice,RsiDepth,RsiFast,DzLookBack,DzBuyProbability,DzSellProbability,alertsOn,alertsOnCurrent,alertsOnSlope,alertsOnLevels,alertsMessage,alertsSound,alertsNotify,alertsEmaiПоказано первые 50% кода (символов: 10292)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.