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

Barros Swing

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

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

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

О программе

Индикатор Barros Swing рассчитывает свинг-поинты на двух таймфреймах и отображает их на графике цены. Используется для анализа импульсных движений и определения гармонических паттернов XABC.

Индикатор вычисляет среднее значение импульса на основе разниц между свинг-поинтами, а затем идентифицирует паттерны XABC, включая точки X, A, B и далее по алфавиту. Для каждого паттерна строятся зоны первичной покупки и продажи, границы и уровни максимального расширения.

Результаты расчёта отображаются в виде графических объектов на графике: текстовые метки с буквенными обозначениями свинг-поинтов, трендовые линии зон и границ. Пользователь может настраивать период расчёта, отображение свинг-поинтов и параметры визуализации XABC.

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

НастройкаОписание
period Период расчёта свинг-поинтов для основного индикаторного сигнала
show_d1_swing Отображение свинг-поинтов 1-периода на графике в виде выделенных участков
XABC_setting Текстовый параметр, служащий разделителем настроек XABC
XABC_enabled Включение или выключение распознавания и отображения паттернов XABC
D'2008.12.1 00:00'; (XABC_spec_time) Специальная дата и время для расчёта свинг-поинтов XABC; если равно нулю, используется текущее время
XABC_font Шрифт для текстовых меток и подписей на графике
XABC_font_size Размер шрифта для текстовых меток и подписей на графике
XABC_font_color Цвет текста меток и подписей XABC на графике
XABC_ME_line_color Цвет линий максимального расширения и зон XABC на графике
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 OrangeRed
#property indicator_color2 MediumPurple
#property indicator_color3 Red
#property indicator_color4 Black
#property indicator_color5 Black
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 4

extern int       period = 18;
extern bool      show_d1_swing = false;

extern string    XABC_setting = "<<-- XABC Settings -->>";
extern bool      XABC_enabled = true;
extern datetime  XABC_spec_time = 0; //D'2008.12.1 00:00';
extern string    XABC_font = "Arial";
extern int       XABC_font_size = 16;
extern color     XABC_font_color = White;
extern color     XABC_ME_line_color = Yellow;

#define LINE_DIRECT_UP  1
#define LINE_DIRECT_DN  -1
#define LINE_NO_DIRECT  -2

#define XABC_A             0
#define XABC_A_BAR         1
#define XABC_B             2
#define XABC_B_BAR         3
#define XABC_C             4
#define XABC_C_BAR         5
#define XABC_UPPER_ME      6
#define XABC_LOWER_ME      7
#define XABC_PBZ           8
#define XABC_PSZ           9
#define XABC_SWING_COUNT   10

double d1_swing[];
double dn_swing[];
double XABC[];
double imean[];
double signals[];
double d1_line_direct[];
double dn_line_direct[];

int init()
  {
      // код доступен только после оплаты
   }

int deinit()
  {

      clear_label();

   return(0);
  }

int start()
  {
      // код доступен только после оплаты
   }

int d1_direct(int idx){
   double shd_h, shd_l;

   shd_h = High[idx] - High[idx+1];
   shd_l = Low[idx+1] - Low[idx];

   if (shd_h > shd_l && shd_h > 0) 
      return (LINE_DIRECT_UP);

   if (shd_h < shd_l && shd_l > 0) 
      return (LINE_DIRECT_DN);

   return (LINE_NO_DIRECT);
}

int dn_direct(int idx, int n){
   double shd_h, shd_l, nHigh, nLow, ten_pc;
   double val_1, val_2;
   int i, j;

   nHigh = High[idx+1]; nLow = Low[idx+1];
   for (i=1; i<=n; i++){
      nHigh = MathMax(nHigh, High[idx+i]);
      nLow = MathMin(nLow, Low[idx+i]);
   }

   j = idx+1; val_1 = 0; val_2 = 0;
   while(val_2 == 0 && j <= Bars){
      if (d1_swing[j] > 0){
         if (val_1 <= 0){
            val_1 = d1_swing[j];
         } else {
            val_2 = d1_swing[j];
         }
      }
      j++;   
   }
   ten_pc = 0;   
   if(val_1 > 0 && val_2 > 0) ten_pc = MathAbs(val_1 - val_2) * 10 / 100;

   nHigh += ten_pc; nLow -= ten_pc;

   shd_h = High[idx] - nHigh;
   shd_l = nLow - Low[idx];

   if (shd_h > shd_l && shd_h > 0) 
      return (LINE_DIRECT_UP);

   if (shd_h < shd_l && shd_l > 0) 
      return (LINE_DIRECT_DN);

   return (LINE_NO_DIRECT);
}

int num_label = 0;
int total_swing_pt = 0;
datetime sDateTime[];
double swing_point[];

int total_XABC_swing_pt = 0;
datetime XABC_DateTime[];
double XABC_swing_point[];

void identify_XABC(){
   clear_label();
   clear_swing_pts();
   if(XABC_spec_time > 0) 
      catch_swing_pt_ex(); 
   else 
      catch_swing_pt();   
   catch_XABC();
   show_XABC();   
}

void catch_XABC(){
   double X_pt, A_pt, B_pt, ME, XA_10pc, AB_20pc, A_Max, A_Min, B_Max, B_Min, imp_mean;
   datetime X_dt, A_dt, B_dt, sp_dt;
   int i, j, A_pos, B_pos;
   bool is_A_Vtop, is_B_Vtop;

   clear_XABC_swing_pts();

   if (XABC_spec_time > 0){
      sp_dt = XABC_spec_time; 
      imp_mean = imean[iBarShift(NULL, 0, sp_dt)];
   } else {
      sp_dt = TimeCurrent();
      imp_mean = imean[0];
   }

   X_pt = swing_point[total_swing_pt - 1];
   X_dt = sDateTime[total_swing_pt - 1];

   A_pt = swing_point[total_swing_pt - 2];
   A_dt = sDateTime[total_swing_pt - 2];
   A_pos = 2;

   B_pt = swing_point[total_swing_pt - 3];
   B_dt = sDateTime[total_swing_pt - 3];
   B_pos = 3;

   XA_10pc = MathAbs(A_pt - X_pt) * 10 / 100;
   AB_20pc = MathAbs(B_pt - A_pt) * 20 / 100;

   ME = MathMax(XA_10pc, AB_20pc);

   if (A_pt > X_pt) is_A_Vtop = true; else is_A_Vtop = false;
   if (B_pt > A_pt) is_B_Vtop = true; else is_B_Vtop = false;

   A_Max = A_pt; A_Min = A_pt;

   for(i=4; i<total_swing_pt-1; i+=2){
      if (is_A_Vtop){
         A_Max = MathMax(A_Max, swing_point[total_swing_pt - i]);
         if (swing_point[total_swing_pt - i] >= A_pt && swing_point[total_swing_pt - i] <= A_pt + ME 
            && swing_point[total_swing_pt - i] >= A_Max && sDateTime[total_swing_pt - i] < sp_dt){
            A_pt = swing_point[total_swing_pt - i];
            A_dt = sDateTime[total_swing_pt - i];

            for (j=i-1; j>=0; j-=2){
               if(MathAbs(swing_point[total_swing_pt - j] - A_pt) >= imp_mean){
                  X_pt = swing_point[total_swing_pt - j];
                  X_dt = sDateTime[total_swing_pt - j];
                  break;
               }
            }

            XA_10pc = MathAbs(A_pt - X_pt) * 10 / 100;

            ME = MathMax(XA_10pc, AB_20pc);

            if (A_pt > X_pt) is_A_Vtop = true; else is_A_Vtop = false;

            A_pos = i;            
         }
         if (swing_point[total_swing_pt - i - 1] < A_pt && swing_point[total_swing_pt - i] > A_pt + ME 
            && swing_point[total_swing_pt - i] >= A_Max && sDateTime[total_swing_pt - i] < sp_dt){
            A_pt = swing_point[total_swing_pt - i];
            A_dt = sDateTime[total_swing_pt - i];

            for (j=i-1; j>=0; j-=2){
               if(MathAbs(swing_point[total_swing_pt - j] - A_pt) >= imp_mean){
                  X_pt = swing_point[total_swing_pt - j];
                  X_dt = sDateTime[total_swing_pt - j];
                  break;
               }
            }

            XA_10pc = MathAbs(A_pt - X_pt) * 10 / 100;

            ME = MathMax(XA_10pc, AB_20pc);

            if (A_pt > X_pt) is_A_Vtop = true; else is_A_Vtop = false;

            A_pos = i;            
         }         
      } else {
         A_Min = MathMin(A_Min, swing_point[total_swing_pt - i]);
         if (swing_point[total_swing_pt - i] <= A_pt && swing_point[total_swing_pt - i] >= A_pt - ME 
            && swing_point[total_swing_pt - i] <= A_Min && sDateTime[total_swing_pt - i] < sp_dt){
            A_pt = swing_point[total_swing_pt - i];
            A_dt = sDateTime[total_swing_pt - i];

            for (j=i-1; j>=0; j-=2){
               if(MathAbs(swing_point[total_swing_pt - j] - A_pt) >= imp_mean){
                  X_pt = swing_point[total_swing_pt - j];
                  X_dt = sDateTime[total_swing_pt - j];
                  break;
               }
            }

            XA_10pc = MathAbs(A_pt - X_pt) * 10 / 100;

            ME = MathMax(XA_10pc, AB_20pc);

            if (A_pt > X_pt) is_A_Vtop = true; else is_A_Vtop = false;

            A_pos = i;            
         }
         if (swing_point[total_swing_pt - i - 1] > A_pt && swing_point[total_swing_pt - i] < A_pt - ME 
            && swing_point[total_swing_pt - i] <= A_Min && sDateTime[total_swing_pt - i] < sp_dt){
            A_pt = swing_point[total_swing_pt - i];
            A_dt = sDateTime[total_swing_pt - i];

            

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

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

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

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

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

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

Стоимость полного кода
1 876,50₽ ≈ $22.93