nmt_ttm_scalper_with_subswings_&_alerts_mtf_2_@fxsignalspot.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «nmt_ttm_scalper_with_subswings_&_alerts_mtf_2_@fxsignalspot.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор TTM Scalper рассчитывает и отображает на графике точки разворота ценовых свингов — максимумы и минимумы, определяемые на основе анализа скользящих средних (SMA). Основные свинги выводятся в виде гистограмм двух цветов, отражающих текущее направление тренда.
При включении параметра showSubSwings индикатор дополнительно рисует подсвечивания промежуточных свингов (subswings), позволяя визуально отслеживать более мелкие разворотные точки внутри основного тренда.
Индикатор поддерживает мультитайминговый анализ: при выборе временного периода, отличного от текущего, он вызывает собственный экземпляр на другом таймфрейме через iCustom и корректно отображает данные на графике.
Система уведомлений позволяет настраивать типы алертов: сообщения в чат, звуковые сигналы, email-рассылку и push-уведомления. Алерты срабатывают при формировании новых свинговых баров.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Временной период — Устанавливает таймфрейм, на котором рассчитываются свинги и отображается индикатор. При значении PERIOD_CURRENT расчёт выполняется на текущем графике; при выборе другого периода включается мультитайминговый режим. |
| showSubSwings | Показывать подсвечивания — При значении true индикатор дополнительно отрисовывает подсвечивания промежуточных (sub) свингов в виде отдельных гистограмм, отображая мелкие разворотные точки внутри основного тренда. |
| alertsOn | Включить уведомления — Главный переключатель системы уведомлений. При значении false все типы алертов отключены независимо от настроек отдельных каналов. |
| alertsMessage | Сообщения в чат — При значении true выводит текстовое уведомление о новом свинговом баре в окно чата графика через функцию Alert. |
| alertsSound | Звуковой сигнал — При значении true воспроизводит звуковой файл alert2.wav при формировании нового свингового бара. |
| alertsEmail | Email-уведомления — При значении true отправляет email-сообщение с информацией о новом свинговом баре через функцию SendMail. |
| alertsNotification | Push-уведомления — При значении true отправляет push-уведомление на мобильное устройство через функцию SendNotification. |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Red
#property indicator_color3 DeepSkyBlue
#property indicator_color4 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_style3 STYLE_DOT
#property indicator_style4 STYLE_DOT
extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT;
extern bool showSubSwings = false;
extern bool alertsOn = false;
extern bool alertsMessage = true;
extern bool alertsSound = false;
extern bool alertsEmail = false;
extern bool alertsNotification = false;
double upBuffer[];
double dnBuffer[];
double upsBuffer[];
double dnsBuffer[];
double trendBuffer[];
double swing[];
double subswing[];
string indicatorFileName;
bool returnBars;
int init()
{
// код доступен только после оплаты
}
int deinit() { return(0); }
#define trendUp 1
#define trendDown -1
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);
for (int k=3,i=limit;i<(Bars-1) && k>0;i++) if (dnBuffer[i]!=EMPTY_VALUE) k--;
limit = MathMax(limit,MathMin(Bars-1,i));
if (returnBars) { upBuffer[0] = limit+1; return(0); }
if (TimeFrame == Period())
{
int swingBar;
for(i=limit; i>=0; i--)
{
upBuffer[i] = EMPTY_VALUE;
dnBuffer[i] = EMPTY_VALUE;
upsBuffer[i] = EMPTY_VALUE;
dnsBuffer[i] = EMPTY_VALUE;
if (i==Bars-1)
trendBuffer[i] = 1;
else trendBuffer[i] = trendBuffer[i+1];
swing[i] = 0;
subswing[i] = 0;
if (trendBuffer[i] == trendUp)
{
for (k=1; (i+k)<Bars; k++)
if (upBuffer[i+k]!=EMPTY_VALUE && trendBuffer[i+k]==trendDown) break;
swingBar = swingHighBar(i,1,PRICE_HIGH,2,k);
if (swingBar>-1)
if (isLess(Close[i],Low[swingBar-1]) && isLess(High[iHighest(NULL,0,MODE_HIGH,swingBar-i,i)],High[swingBar]))
{
upBuffer[swingBar] = High[swingBar];
dnBuffer[swingBar] = Low[swingBar];
trendBuffer[i] = trendDown;
swing[swingBar] = trendDown;
continue;
}
}
if (trendBuffer[i] == trendDown)
{
for (k=1;(i+k)<Bars;k++)
if (dnBuffer[i+k]!=EMPTY_VALUE && trendBuffer[i+k]==trendUp) break;
swingBar = swingLowBar(i,1,PRICE_LOW,2,k);
if (swingBar>-1)
if (isGreater(Close[i],High[swingBar-1]) && isGreater(Low[iLowest(NULL,0,MODE_LOW,swingBar-i,i)],Low[swingBar]))
{
dnBuffer[swingBar] = High[swingBar];
upBuffer[swingBar] = Low[swingBar];
trendBuffer[i] = trendUp;
swing[swingBar] = trendUp;
}
}
if (!showSubSwings) continue;
swingBar = swingHighBar(i,1,PRICE_HIGH,2,k);
if (swingBar>-1) { upsBuffer[swingBar] = High[swingBar]; dnsBuffer[swingBar] = Low[swingBar]; subswing[swingBar] = trendDown;}
swingBar = swingLowBar(i,1,PRICE_LOW,2,k);
if (swingBar>-1) { dnsBuffer[swingBar] = High[swingBar]; upsBuffer[swingBar] = Low[swingBar]; subswing[swingBar] = trendUp; }
}
manageAlerts();
return(0);
}
limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,TimeFrame,indicatorFileName,-99,0,0)*TimeFrame/Period()));
for (i=limit; i>=0; i--)
{
int y = iBarShift(NULL,TimeFrame,Time[i]);
int x = iBarShift(NULL,TimeFrame,Time[i+1]);
if (x!=y)
{
upBuffer[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,showSubSwings,alertsOn,alertsMessage,alertsSound,alertsEmail,alertsNotification,0,y);
dnBuffer[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,showSubSwings,alertsOn,alertsMessage,alertsSound,alertsEmail,alertsNotification,1,y);
upsBufferПоказано первые 50% кода (символов: 6949)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.