← К каталогу
Исходный код · ID 3103

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 и перейдите к оплате.

Стоимость полного кода
694,90₽ ≈ $8.49