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

shved-supply-and-demand.mq5

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

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

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

О программе

Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 4 на языке MQL4. Он предназначен для выявления и отображения на графике зон спроса и предложения (поддержки и сопротивления), основываясь на анализе быстрых и медленных фрактальных точек цены.

Каждая обнаруженная зона классифицируется по силе воздействия — от слабой до подтверждённой (Proven) — в зависимости от количества тестов ценой и наличия разворота уровня. Зоны визуализируются прямоугольниками с цветовой кодировкой: отдельные цвета для поддержечных и сопротивленческих зон, а также для различных уровней силы.

Индикатор предоставляет настраиваемые параметры отображения: возможность объединения перекрывающихся зон, вывод информационных меток, настройка шрифта и размера текста. Также реализована система уведомлений — всплывающие окна и звуковые сигналы при входе цены в зону. Данные о зонах могут сохраняться в глобальных переменных MetaTrader.

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

НастройкаОписание
BackLimit BackLimit — Глубина анализа в количестве баров для поиска зон и расчёта фракталов
zone_show_weak zone_show_weak — Отображать ли слабые зоны (Weak)
zone_show_untested zone_show_untested — Отображать ли непроверенные зоны (Untested)
zone_show_turncoat zone_show_turncoat — Отображать ли зоны разворота (Turncoat)
zone_fuzzfactor zone_fuzzfactor — Коэффициент нечёткости при определении границ зоны
fractals_show fractals_show — Отображать ли фрактальные точки на графике стрелками
fractal_fast_factor fractal_fast_factor — Множитель для расчёта периода быстрых фракталов
fractal_slow_factor fractal_slow_factor — Множитель для расчёта периода медленных фракталов
SetGlobals SetGlobals — Включает или отключает сохранение данных зон в глобальные переменные MetaTrader
zone_solid zone_solid — Отображать ли зоны как сплошные прямоугольники
zone_linewidth zone_linewidth — Толщина линии прямоугольника зоны
zone_style zone_style — Стиль линии прямоугольника зоны
zone_show_info zone_show_info — Отображать ли текстовые метки для каждой зоны
zone_label_shift zone_label_shift — Смещение горизонтальной позиции метки зоны
zone_merge zone_merge — Объединять ли перекрывающиеся зоны в одну
zone_extend zone_extend — Растягивать ли зоны по вертикали на величину, рассчитанную через ATR
zone_show_alerts zone_show_alerts — Включает или отключает систему уведомлений о входе в зону
zone_alert_popups zone_alert_popups — Включает всплывающие уведомления при входе цены в зону
zone_alert_sounds zone_alert_sounds — Включает звуковые уведомления при входе цены в зону
zone_alert_waitseconds zone_alert_waitseconds — Интервал ожидания в секундах между последовательными уведомлениями
Text_size Text_size — Размер шрифта текста информационных меток зон
Text_font Text_font — Шрифт текста информационных меток зон
Text_color Text_color — Цвет текста информационных меток зон
sup_name sup_name — Название метки для зон поддержки
res_name res_name — Название метки для зон сопротивления
test_name test_name — Название для отображения количества тестов зоны
color_support_weak color_support_weak — Цвет для слабой (Weak) зоны поддержки
color_support_untested color_support_untested — Цвет для непроверенной (Untested) зоны поддержки
color_support_verified color_support_verified — Цвет для проверенной (Verified) зоны поддержки
color_support_proven color_support_proven — Цвет для подтверждённой (Proven) зоны поддержки
color_support_turncoat color_support_turncoat — Цвет для зоны поддержки разворота (Turncoat)
color_resist_weak color_resist_weak — Цвет для слабой (Weak) зоны сопротивления
color_resist_untested color_resist_untested — Цвет для непроверенной (Untested) зоны сопротивления
color_resist_verified color_resist_verified — Цвет для проверенной (Verified) зоны сопротивления
color_resist_proven color_resist_proven — Цвет для подтверждённой (Proven) зоны сопротивления
color_resist_turncoat color_resist_turncoat — Цвет для зоны сопротивления разворота (Turncoat)
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 DodgerBlue
#property indicator_color4 DodgerBlue

extern int BackLimit   = 1000;

extern string pus1 = "/////////////////////////////////////////////////";
extern bool zone_show_weak  = true;
extern bool zone_show_untested = true;
extern bool zone_show_turncoat = false;
extern double zone_fuzzfactor = 0.75; 

extern string pus2 = "/////////////////////////////////////////////////";
extern bool fractals_show = false;
extern double fractal_fast_factor = 3.0;
extern double fractal_slow_factor = 6.0;
extern bool SetGlobals = true;

extern string pus3 = "/////////////////////////////////////////////////";
extern bool zone_solid = true;
extern int zone_linewidth = 1;
extern int zone_style = 0;
extern bool zone_show_info    = true;
extern int zone_label_shift  = 4;
extern bool zone_merge = true;
extern bool zone_extend = true;

extern string pus4 = "/////////////////////////////////////////////////";
extern bool zone_show_alerts  = false;
extern bool zone_alert_popups = true;
extern bool zone_alert_sounds = true;
extern int zone_alert_waitseconds = 300;

extern string pus5 = "/////////////////////////////////////////////////";
extern int Text_size = 8; 
extern string Text_font = "Courier New";
extern color Text_color = White;
extern string sup_name = "Sup";
extern string res_name = "Res";
extern string test_name = "Retests";
extern color color_support_weak     = DarkSlateGray;
extern color color_support_untested = SeaGreen;
extern color color_support_verified = Green;
extern color color_support_proven   = LimeGreen;
extern color color_support_turncoat = OliveDrab;
extern color color_resist_weak      = Indigo;
extern color color_resist_untested  = Orchid;
extern color color_resist_verified  = Crimson;
extern color color_resist_proven    = Red;
extern color color_resist_turncoat  = DarkOrange;

double FastDnPts[], FastUpPts[];
double SlowDnPts[], SlowUpPts[];

double zone_hi[1000], zone_lo[1000];
int    zone_start[1000], zone_hits[1000], zone_type[1000], zone_strength[1000], zone_count = 0;
bool   zone_turn[1000];

#define ZONE_SUPPORT 1
#define ZONE_RESIST  2

#define ZONE_WEAK      0
#define ZONE_TURNCOAT  1
#define ZONE_UNTESTED  2
#define ZONE_VERIFIED  3
#define ZONE_PROVEN    4

#define UP_POINT 1
#define DN_POINT -1

int time_offset = 0;

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

int deinit()
{
   DeleteZones();
   DeleteGlobalVars();
   return(0);
}

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

void CheckAlerts()
{
   static int lastalert = 0;

   if (zone_show_alerts == false)
      return;

   if (Time[0] - lastalert > zone_alert_waitseconds)
      if (CheckEntryAlerts() == true)
         lastalert = Time[0];
}

bool CheckEntryAlerts()
{

   for (int i=0; i<zone_count; i++)
   {
      if (Close[0] >= zone_lo[i] && Close[0] < zone_hi[i])
      {
         if (zone_show_alerts == true)
         {
            if (zone_alert_popups == true)
            {
               if (zone_type[i] == ZONE_SUPPORT)
                  Alert(Symbol() + TimeFrameToString(Period()) + ": Support Zone Entered");
               else
                  Alert(Symbol() + TimeFrameToString(Period()) + ": Resistance Zone Entered");
            }

            if (zone_alert_sounds == true)
               PlaySound("alert_wav");
         }

         return(true);
      }
   }

   return(false);
}

void DeleteGlobalVars()
{
   if (SetGlobals == false)
      return;

   GlobalVariableDel("SSSR_Count_"+Symbol()+Period());
   GlobalVariableDel("SSSR_Updated_"+Symbol()+Period());

   int old_count = zone_count;
   zone_count = 0;
   DeleteOldGlobalVars(old_count);
}

void DeleteOldGlobalVars(int old_count)
{
   if (SetGlobals == false)
      return;

   for (int i=zone_count; i<old_count; i++)
   {
      GlobalVariableDel("SSSR_HI_"+Symbol()+Period()+i);
      GlobalVariableDel("SSSR_LO_"+Symbol()+Period()+i);
      GlobalVariableDel("SSSR_HITS_"+Symbol()+Period()+i);
      GlobalVariableDel("SSSR_STRENGTH_"+Symbol()+Period()+i);
      GlobalVariableDel("SSSR_AGE_"+Symbol()+Period()+i);
   }
}

void FindZones()
{
   int i, j, shift, bustcount=0, testcount = 0;
   double hival, loval;
   bool turned = false, hasturned = false;

   double temp_hi[1000], temp_lo[1000];
   int    temp_start[1000], temp_hits[1000], temp_strength[1000], temp_count = 0;
   bool   temp_turn[1000], temp_merge[1000];
   int merge1[1000], merge2[1000], merge_count = 0;

   for (shift=MathMin(Bars-1, BackLimit); shift>5; shift--)
   {
      double atr = iATR(NULL, 0, 7, shift);
      double fu = atr/2 * zone_fuzzfactor;
      bool isWeak;
      bool touchOk = false;
      bool isBust = false;

      if (FastUpPts[shift] > 0.001)
      {

         isWeak = true;
         if (SlowUpPts[shift] > 0.001)
            isWeak = false;

         hival = High[shift];
         if (zone_extend == true)
            hival += fu;

         loval = MathMax(MathMin(Close[shift], High[shift]-fu), High[shift]-fu*2);
         turned = false;
         hasturned = false;
         isBust = false;

         bustcount = 0;
         testcount = 0;

         for (i=shift-1; i>=0; i--)
         {
            if ((turned == false && FastUpPts[i] >= loval && FastUpPts[i] <= hival) ||
                (turned == true && FastDnPts[i] <= hival && FastDnPts[i] >= loval))
            {

               touchOk = true;
               for (j=i+1; j<i+11; j++)
               {
                  if ((turned == false && FastUpPts[j] >= loval && FastUpPts[j] <= hival) ||
                      (turned == true && FastDnPts[j] <= hival && FastDnPts[j] >= loval))
                  {
                     touchOk = false;
                     break;
                  }
               }

               if (touchOk == true)
               {

                  bustcount = 0;
                  testcount++;
               }
            }

            if ((turned == false && High[i] > hival) ||
                (turned == true && Low[i] < loval))
            {

               bustcount++;

               if (bustcount > 1 || isWeak == true)
               {

                  isBust = true;
                  break;
               }

               if (turned == true)
                  turned = false;
               else if (turned == false)
                  turned = true;

               hasturned = true;

               testcount = 0;
            }
         }

         if (isBust == false)
         {

            temp_hi[temp_count] = hival;
            temp_lo[temp_count] = loval;
            temp_turn[temp_count] = hasturned;
            temp_hits[temp_count] = testcount;
            temp_start[temp_count] = shift;
            temp_merge[temp_count] = false;

            if (testcount > 3)
               temp_strength[temp_count] = ZONE_PROVEN;
            else if (testcount > 0)
               temp_strength[temp_count] = ZONE_VERIFIED;
            else if (hasturned == true)
               temp_strength[temp_count] = ZONE_TURNCOAT;
            else if (isWeak == false)
               temp_strength[temp_count] = ZONE_UNTESTED;
            else
               temp_strength[temp_count] = ZONE_WEAK;

            temp_count++;
         }
      }
      else if (FastDnPts[shift] > 0.001)
      {

         isWeak = true;
         if (SlowDnPts[shift] > 0.001)
            isWeak = false;

         loval = Low[shift];
         if (zone_extend == true)
            loval -= fu;

         hival = MathMin(MathMax(Close[shift], Low[shift]+fu), Low[shift]+fu*2);
         turned = false;
         hasturned = false;

         bustcount = 0;
         testcount = 0;
         isBust = false;

         for (i=shift-1; i>=0; i--)
         {
            if ((turned == true && FastUpPts[i] >= loval && FastUpPts[i] <= hival) ||
                (turned == false && FastDnPts[i] <= hival && FastDnPts[i] >= loval))
            {

               touchOk = true;
               for (j=i+1; j<i+11; j++)
               {
                  if ((turned == true && FastUpPts[j] >= loval && FastUpPts[j] <= hival) ||
                      (turned == false && FastDnPts[j

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

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

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

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

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

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

Стоимость полного кода
1 472,60₽ ≈ $18.00