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

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

Стоимость полного кода
740,10₽ ≈ $9.05