Trader's Dynamic Index
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «tradersdynamicindex.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Trader's Dynamic Index (TDI) — это индикатор для MetaTrader 5, отображающий направление тренда, его силу и волатильность. Индикатор рассчитывает RSI заданного периода и строит на его основе скользящие средние, а также верхнюю и нижнюю границы волатильности на основе стандартного отклонения.
Результат отображается в отдельном окне в виде нескольких линий: зелёная линия RSI Price, красная линия Trade Signal, жёлтая линия Market Base и синие линии волатильности (VB High и VB Low). Поддерживается отображение данных с верхнего таймфрейма.
Индикатор оснащён системой уведомлений: всплывающие, email и push-уведомления срабатывают при пересечении линий. Также рисуются стрелки при различных конфигурациях пересечений, которые можно настраивать по цвету, размеру и типу.
Настройки программы
| Настройка | Описание |
|---|---|
| ____Main | Группа основных настроек индикатора. |
| RSI_Period | Период расчёта индикатора RSI. |
| RSI_Price | Тип цены для расчёта RSI. |
| Volatility_Band | Количество баров, используемых для расчёта полосы волатильности. |
| StdDev | Множитель стандартного отклонения для расчёта границ волатильности. |
| RSI_Price_Line | Период скользящей средней для зелёной линии RSI Price. |
| RSI_Price_Type | Тип скользящей средней для зелёной линии RSI Price. |
| Trade_Signal_Line | Период скользящей средней для красной линии Trade Signal. |
| Trade_Signal_Type | Тип скользящей средней для красной линии Trade Signal. |
| UpperTimeframe | Верхний таймфрейм, данные с которого отображаются при значении выше текущего. |
| ____Alerts | Группа настроек уведомлений. |
| EnableNativeAlerts | Включает или отключает встроенные всплывающие уведомления MetaTrader. |
| EnableEmailAlerts | Включает или отключает отправку email-уведомлений при срабатывании условий. |
| EnablePushAlerts | Включает или отключает отправку push-уведомлений на мобильные устройства. |
| EnableArrowAlerts | Включает или отключает отрисовку стрелок-оповещений на графике при пересечениях. |
| EnableRedYellowCrossAlert | Включает или отключает уведомления при пересечении красной и жёлтой линий. |
| EnableHookAlert | Включает или отключает уведомления при формировании хука (пересечения зелёной линии с границами волатильности). |
| EnableGreenRedCrossAlert | Включает или отключает уведомления при пересечении зелёной и красной линий. |
| EnableYellowGreenCrossAlert | Включает или отключает уведомления при пересечении зелёной и жёлтой линий. |
| TriggerCandle | Свеча, на которой проверяются условия срабатывания уведомлений (текущая или предыдущая). |
| ____Arrows | Группа настроек стрелок. |
| RedYellowCrossArrowBullishColor | Цвет стрелки для бычьего пересечения красной и жёлтой линий. |
| RedYellowCrossArrowBearishColor | Цвет стрелки для медвежьего пересечения красной и жёлтой линий. |
| HookArrowBullishColor | Цвет стрелки для бычьего хука. |
| HookArrowBearishColor | Цвет стрелки для медвежьего хука. |
| GreenRedCrossArrowBullishColor | Цвет стрелки для бычьего пересечения зелёной линии под красной. |
| GreenRedCrossArrowBearishColor | Цвет стрелки для медвежьего пересечения зелёной линии над красной. |
| YellowGreenCrossArrowBullishColor | Цвет стрелки для бычьего пересечения зелёной и жёлтой линий. |
| YellowGreenCrossArrowBearishColor | Цвет стрелки для медвежьего пересечения зелёной и жёлтой линий. |
| RedYellowCrossArrowBullishCode | Код стрелки для бычьего пересечения красной и жёлтой линий. |
| RedYellowCrossArrowBearishCode | Код стрелки для медвежьего пересечения красной и жёлтой линий. |
| HookArrowBullishCode | Код стрелки для бычьего хука. |
| HookArrowBearishCode | Код стрелки для медвежьего хука. |
| GreenRedCrossArrowBullishCode | Код стрелки для бычьего пересечения зелёной линии под красной. |
| GreenRedCrossArrowBearishCode | Код стрелки для медвежьего пересечения зелёной линии над красной. |
| YellowGreenCrossArrowBullishCode | Код стрелки для бычьего пересечения зелёной и жёлтой линий. |
| YellowGreenCrossArrowBearishCode | Код стрелки для медвежьего пересечения зелёной и жёлтой линий. |
| ArrowSize | Размер стрелок, отображаемых на графике. |
| ArrowPrefix | Префикс для имён объектов стрелок на графике. |
Поиск по коду файла
#property version "1.07"
#property strict
#property description "Shows trend direction, strength, and volatility."
#property description "Green line - RSI Price line."
#property description "Red line - Trade Signal line."
#property description "Blue lines - Volatility Band."
#property description "Yellow line - Market Base line."
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_level1 32
#property indicator_level2 50
#property indicator_level3 68
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_levelcolor clrDimGray
#property indicator_levelstyle STYLE_DOT
#property indicator_levelwidth 1
#property indicator_color1 clrNONE
#property indicator_type1 DRAW_NONE
#property indicator_color2 clrMediumBlue
#property indicator_label2 "VB High"
#property indicator_type2 DRAW_LINE
#property indicator_color3 clrYellow
#property indicator_label3 "Market Base Line"
#property indicator_type3 DRAW_LINE
#property indicator_width3 2
#property indicator_color4 clrMediumBlue
#property indicator_label4 "VB Low"
#property indicator_type4 DRAW_LINE
#property indicator_color5 clrGreen
#property indicator_label5 "RSI Price Line"
#property indicator_type5 DRAW_LINE
#property indicator_width5 2
#property indicator_color6 clrRed
#property indicator_label6 "Trade Signal Line"
#property indicator_type6 DRAW_LINE
#property indicator_width6 2
enum enum_arrow_type
{
Buy,
Sell
};
enum enum_candle_to_check
{
Current,
Previous
};
input string ____Main = "";
input int RSI_Period = 13; // RSI_Period: 8-25
input ENUM_APPLIED_PRICE RSI_Price = PRICE_CLOSE;
input int Volatility_Band = 34; // Volatility_Band: 20-40
input double StdDev = 1.6185; // Standard Deviations: 1-3
input int RSI_Price_Line = 2;
input ENUM_MA_METHOD RSI_Price_Type = MODE_SMA;
input int Trade_Signal_Line = 7;
input ENUM_MA_METHOD Trade_Signal_Type = MODE_SMA;
input ENUM_TIMEFRAMES UpperTimeframe = PERIOD_CURRENT; // UpperTimeframe: If above current will display values from that timeframe.
input string ____Alerts = "";
input bool EnableNativeAlerts = false;
input bool EnableEmailAlerts = false;
input bool EnablePushAlerts = false;
input bool EnableArrowAlerts = false;
input bool EnableRedYellowCrossAlert = true; // EnableRedYellowCrossAlert: yellow/red lines alerts.
input bool EnableHookAlert = false; // EnableHookAlert: Enable green line hook alerts.
input bool EnableGreenRedCrossAlert = false; // EnableGreenRedCrossAlert: green/red lines alerts.
input bool EnableYellowGreenCrossAlert = false; // EnableYellowGreenCrossAlert: yellow/green lines alerts.
input enum_candle_to_check TriggerCandle = Previous;
input string ____Arrows = "";
input color RedYellowCrossArrowBullishColor = clrGreen;
input color RedYellowCrossArrowBearishColor = clrRed;
input color HookArrowBullishColor = clrGreen;
input color HookArrowBearishColor = clrRed;
input color GreenRedCrossArrowBullishColor = clrGreen;
input color GreenRedCrossArrowBearishColor = clrRed;
input color YellowGreenCrossArrowBullishColor = clrGreen;
input color YellowGreenCrossArrowBearishColor = clrRed;
input uchar RedYellowCrossArrowBullishCode = 233;
input uchar RedYellowCrossArrowBearishCode = 234;
input uchar HookArrowBullishCode = 71;
input uchar HookArrowBearishCode = 72;
input uchar GreenRedCrossArrowBullishCode = 200;
input uchar GreenRedCrossArrowBearishCode = 201;
input uchar YellowGreenCrossArrowBullishCode = 226;
input uchar YellowGreenCrossArrowBearishCode = 225;
input int ArrowSize = 1;
input string ArrowPrefix = "TDI-";
double RSIBuf[], UpZone[], MdZone[], DnZone[], MaBuf[], MbBuf[];
double _RSIBuf[], _UpZone[], _MdZone[], _DnZone[], _MaBuf[], _MbBuf[]; // For upper timeframe data.
datetime AlertPlayed = 0, HookAlertPlayed = 0, RedGreenAlertPlayed = 0, YellowGreenAlertPlayed = 0;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll(ChartID(), ArrowPrefix, 0, OBJ_ARROW);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[]
)
{
// код доступен только после оплаты
}
int counted_bars = IndicatorCounted();
if (counted_bars > 0) counted_bars--;
int limit = Bars - 1 - counted_bars;
if (PeriodSeconds(UpperTimeframe) == PeriodSeconds(Period()))
{
if (FillIndicatorBuffers((ENUM_TIMEFRAMES)Period(), limit, RSIBuf, UpZone, DnZone, MdZone, MaBuf, MbBuf) < 0) return 0; // Bad value returned. Data not yet ready. Recalculate everything.
}
else
{
static int upper_prev_counted = 0;
if (upper_prev_counted > 0) upper_prev_counted--;
int upper_limit = iBars(Symbol(), UpperTimeframe) - 1 - upper_prev_counted;
if (upper_limit > Bars - Volatility_Band) upper_limit = Bars - Volatility_Band; // Buffers cannot hold more than the current period's bars worth of data!
upper_prev_counted = FillIndicatorBuffers(UpperTimeframe, upper_limit, _RSIBuf, _UpZone, _DnZone, _MdZone, _MaBuf, _MbBuf);
if (upper_prev_counted < -1) return 0; // Bad value returned. Data not yet ready. Recalculate everything.
for (int i = 0, j = 0; Time[i] >= iTime(Symbol(), UpperTimeframe, upper_limit); i++)
{
while ((iTime(Symbol(), UpperTimeframe, j) > Time[i]) && (j < iBars(Symbol(), UpperTimeframe))) j++;
if (j >= iBars(Symbol(), UpperTimeframe)) break;
RSIBuf[i] = _RSIBuf[j];
UpZone[i] = _UpZone[j];
DnZone[i] = _DnZone[j];
MdZone[i] = _MdZone[j];
MaBuf[i] = _MaBuf[j];
MbBuf[i] = _MbBuf[j];
if (i + 1 == Bars) break;
}
}
if (EnableRedYellowCrossAlert)
{
if ((MbBuf[TriggerCandle] > MdZone[TriggerCandle]) && (MbBuf[TriggerCandle + 1] <= MdZone[TriggerCandle + 1]) && (AlertPlayed != Time[0]))
{
if (EnableNativeAlerts) Alert(_Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period) + " - Bullish cross");
if (EnableEmailAlerts)
{
RefreshRates();
SendMail("TDI Alert: BUY " + _Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period), "Current rate = " + DoubleToString(Bid, _Digits) + "/" + DoubleToString(Ask, _Digits) + "\nIndicator buffers:\nVB High = " + DoubleToString(UpZone[TriggerCandle], 1) + "\nMarket Base Line = " + DoubleToString(MdZone[TriggerCandle], 1) + "\nVB Low = " + DoubleToString(DnZone[TriggerCandle], 1) + "\nRSI Price Line = " + DoubleToString(MaBuf[TriggerCandle], 1) + "\nTrade Signal Line = " + DoubleToString(MbBuf[TriggerCandle], 1));
}
if (EnablePushAlerts) SendNotification("TDI Alert: BUY " + _Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period));
AlertPlayed = Time[0];
}
if ((MbBuf[TriggerCandle] < MdZone[TriggerCandle]) && (MbBuf[TriggerCandle + 1] >= MdZone[TriggerCandle + 1]) && (AlertPlayed != Time[0]))
{
if (EnableNativeAlerts) Alert(_Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period) + " - Bearish cross");
if (EnableEmailAlerts)
{
RefreshRates();
SendMail("TDI Alert: SELL " + _Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period), "Current rate = " + DoubleToString(Bid, _Digits) + "/" + DoubleToString(Ask, _Digits) + "\nIndicator buffers:\nVB High = " + DoubleToString(UpZone[TriggerCandle], 1) + "\nMarket Base Line = " + DoubleToString(MdZone[TriggerCandle], 1) + "\nVB Low = " + DoubleToString(DnZone[TriggerCandle], 1) + "\nRSI Price Line = " + DoubleToString(MaBuf[TriggerCandle], 1) + "\nTrade Signal Line = " + DoubleToString(MbBuf[TriggerCandle], 1));
}
if (EnablePushAlerts) SendNotification("TDI Alert: SELL " + _Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period));
AlertPlayed = Time[0];
}
}
if (EnableHookAlert)
{
if ((MaBuf[TriggerCandle] < UpZone[TriggerCandle]) && (MaBuf[TriggerCandle + 1] >= UpZone[TriggerCandle + 1]) && ((MaBuf[TriggerCandle] > 68) || (MaBuf[TriggerCandle + 1] > 68)) && ((UpZone[TriggerCandle] > 68) || (UpZone[TriggerCandle + 1] > 68)) && (HookAlertPlayed != Time[0]))
{
if (EnableNativeAlerts) Alert(_Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period) + " - Bearish Hook");
if (EnableEmailAlerts)
{
RefreshRates();
SendMail("TDI Hook Alert: SELL " + _Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period), "Current rate = " + DoubleToString(Bid, _Digits) + "/" + DoubleToString(Ask, _Digits) + "\nIndicator buffers:\nVB High = " + DoubleToString(UpZone[TriggerCandle], 1) + "\nMarket Base Line = " + DoubleToString(MdZone[TriggerCandle], 1) + "\nVB Low = " + DoubleToString(DnZone[TriggerCandle], 1) + "\nRSI Price Line = " + DoubleToString(MaBuf[TriggerCandle], 1) + "\nTrade Signal Line = " + DoubleToString(MbBuf[TriggerCandle], 1));
}
if (EnablePushAlerts) SendNotification("TDI Hook Alert: SELL " + _Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period));
HookAlertPlayed = Time[0];
}
else if ((MaBuf[TriggerCandle] > DnZone[TriggerCandle]) && (MaBuf[TriggerCandle + 1] <= DnZone[TriggerCandle + 1]) && ((MaBuf[TriggerCandle] < 32) || (MaBuf[TriggerCandle + 1] < 32)) && ((DnZone[TriggerCandle] < 32) || (DnZone[TriggerCandle + 1] < 32)) && (HookAlertPlayed != Time[0]))
{
if (EnableNativeAlerts) Alert(_Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period) + " - Bullish Hook");
if (EnableEmailAlerts)
{
RefreshRates();
SendMail("TDI Hook Alert: BUY " + _Symbol + " @ " + TimeframeToString((ENUM_TIMEFRAMES)_Period), "Current rate = " + DoubleToString(Bid, _Digits) + "/" + DoubleToString(Ask, _Digits) + "\nIndicator buffers:\nVB High = " + DoubleToString(UpZone[TriggerCandle], 1) + "\nMarket Base Line = " + DoubleToString(MdZone[TriggerCandle], 1) + "\nVB Low = " + DoubleToString(DnZone[TriggerCandle], 1) + "\nRSI Price Line = " + DoubleToString(MaBuf[TriggerCandle], 1) + "\nTrade Signal Line = " + DoubleToString(MbBuf[TriggerCandle], 1));
}
if (EnablePushAlerts) SeПоказано первые 50% кода (символов: 17784)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.