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

pinbar_1440_mtf@fxsignalspot.mq5

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор для MetaTrader 4, определяющий точки разворота цены (свинг-хаи и свинг-лоу) и отображающий их в виде гистограмм на графике. Поддерживает работу как на текущем таймфрейме, так и на более высоком через внутренний вызов самого себя средствами iCustom. Имеет режим отображения промежуточных свингов и систему оповещений через несколько каналов.

Настройки программы

НастройкаОписание
TimeFrame Таймфрейм — Таймфрейм для расчёта свинг-точек; значение -99 активирует режим возврата номера бара
showSubSwings Показать промежуточные свинги — Включает или выключает отображение дополнительных промежуточных точек разворота
alertsOn Оповещения включены — Общий переключатель системы уведомлений
alertsMessage Сообщение — Отправляет popup-оповещение при обнаружении свинга
alertsSound Звук — Воспроизводит звуковой сигнал при срабатывании оповещения
alertsEmail Email — Отправляет email-уведомление при обнаружении свинга
alertsNotification Push-уведомление — Отправляет push-уведомление на мобильное устройство при обнаружении свинга
Получить полный код

Поиск по коду файла

#property indicator_chart_window
#property indicator_buffers  4
#property indicator_color1   Magenta
#property indicator_color2   Blue
#property indicator_color3   Red
#property indicator_color4   Blue
#property indicator_width1   5
#property indicator_width2   5
#property indicator_style3   STYLE_DOT
#property indicator_style4   STYLE_DOT

extern ENUM_TIMEFRAMES TimeFrame          = 1440;
extern bool            showSubSwings      = false;
extern bool            alertsOn           = true;
extern bool            alertsMessage      = true;
extern bool            alertsSound        = true;
extern bool            alertsEmail        = false;
extern bool            alertsNotification = true;

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)

Показано первые 50% кода (символов: 6861)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

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