ttm-scalper-with-subswings-mt4.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ttm-scalper-with-subswings-mt4.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 4, который отображает на графике точки разворота ценовых свингов в виде гистограмм. Индикатор определяет свинг-хаи и свинг-лоу с помощью анализа на основе скользящих средних и рисует их соответствующими цветами (оранжевый и красный). Поддерживается отображение основных свингов, а также дополнительных суб-свингов, которые можно включить отдельной настройкой.
Продукт обладает многотаймфреймной функциональностью: он способен анализировать данные на указанном таймфрейме и отображать результаты на графике текущего таймфрейма. Встроенная система уведомлений позволяет оповещать пользователя о формировании новых свинг-баров через всплывающие сообщения, звуковые сигналы, электронную почту или push-уведомления. Доступен фильтр отображения только завершённых свингов.
Индикатор использует несколько буферов для отрисовки: два основных буфера для основных свингов и два дополнительных для суб-свингов, а также внутренние буферы для отслеживания текущего тренда и состояния свингов. Настройки позволяют гибко управлять отображением и уведомлениями.
Настройки программы
| Настройка | Описание |
|---|---|
| Time frame to use (TimeFrame) | Таймфрейм — Таймфрейм, на котором выполняется расчёт индикатора |
| Display sub-swings? (showSubSwings) | Показывать суб-свинги — Отображать суб-свинги на графике |
| Turn alerts on? (alertsOn) | Уведомления включены — Включить или выключить систему уведомлений |
| Alerts should show popup message? (alertsMessage) | Всплывающие сообщения — Показывать всплывающие сообщения при срабатывании уведомлений |
| Alerts should play alert sound? (alertsSound) | Звуковой сигнал — Воспроизводить звуковой сигнал при срабатывании уведомлений |
| Alerts should send an email? (alertsEmail) | Email-уведомления — Отправлять уведомления по электронной почте |
| Alert should send push notification? (alertsNotification) | Push-уведомления — Отправлять push-уведомления |
| Sho only completed swings/sub-swings (OnlyCompleted) | Только завершённые — Отображать только завершённые свинги и суб-свинги |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Orange
#property indicator_color2 Red
#property indicator_color3 Orange
#property indicator_color4 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_style3 STYLE_DOT
#property indicator_style4 STYLE_DOT
#property strict
extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; // Time frame to use
extern bool showSubSwings = false; // Display sub-swings?
extern bool alertsOn = false; // Turn alerts on?
extern bool alertsMessage = true; // Alerts should show popup message?
extern bool alertsSound = false; // Alerts should play alert sound?
extern bool alertsEmail = false; // Alerts should send an email?
extern bool alertsNotification = false; // Alert should send push notification?
extern bool OnlyCompleted = false; // Sho only completed swings/sub-swings
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 k,i,counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars-counted_bars,Bars-1);
for (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 (OnlyCompleted && i<2) continue;
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 = (int)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[(int)MathMin(i+1,Bars-1)]);
if (x!=y)
{
double dummy = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,showSubSwings,alertsOn,alertsMessage,alertsSound,alertsEmail,alertsNotification,OnlyCompleted,0,y);
if (dummy!=EMPTY_VALUE)
{
if (dummy>iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,showSubSwings,alertsOn,alertsMessage,alertsSounПоказано первые 50% кода (символов: 7401)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.