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

ZSR V1

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

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

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

О программе

Данный продукт представляет собой индикатор для платформы MetaTrader 5, который рассчитывает и отображает на графике зоны поддержки и сопротивления. Зоны формируются на основе анализа фрактальных точек ценового движения и окрашиваются в различные цвета в зависимости от их силы и статуса.

Индикатор поддерживает настройку временных периодов, отображение фракталов, а также систему оповещений — всплывающие уведомления, звуковые сигналы и отправку электронной почты при касании ценой определённых зон. Пользователь может управлять видимостью, стилем отрисовки и объединением зон.

Настройки позволяют гибко управлять визуальным представлением: цвета для каждого уровня силы, толщина и стиль линий, сдвиг подписей. Доступна также работа с глобальными переменными терминала для хранения данных о зонах между сессиями.

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

НастройкаОписание
BackLimit Граница поиска (баров) — Задаёт максимальное количество баров назад, в пределах которых рассчитываются фрактальные точки и формируются зоны поддержки и сопротивления.
TimeFrame Таймфрейм расчёта — Устанавливает таймфрейм, на котором выполняется расчёт зон поддержки и сопротивления.
TimeString Справка таймфреймов — Отображает справочную строку с соответствием числовых значений таймфреймов их стандартным обозначениям.
color_support_weak Цор слабой поддержки — Цор залегочной зоны слабой поддержки.
color_support_untested Цор непроверенной поддержки — Цор залегочной зоны поддержки, которая ещё не была проверена ценой.
color_support_verified Цор верифицированной поддержки — Цор залегочной зоны поддержки с уровнем верификации.
color_support_proven Цор доказанной поддержки — Цор залегочной зоны поддержки с уровнем доказанности.
color_support_turncoat Цор разворотной поддержки — Цор залегочной зоны поддержки разворотного типа.
color_resist_weak Цор слабого сопротивления — Цор залегочной зоны слабого сопротивления.
color_resist_untested Цор непроверенного сопротивления — Цор залегочной зоны сопротивления, которая ещё не была проверена ценой.
color_resist_verified Цор верифицированного сопротивления — Цор залегочной зоны сопротивления с уровнем верификации.
color_resist_proven Цор доказанного сопротивления — Цор залегочной зоны сопротивления с уровнем доказанности.
color_resist_turncoat Цор разворотного сопротивления — Цор залегочной зоны сопротивления разворотного типа.
zone_show_weak Показывать слабые зоны — Включает или отключает отображение зон слабой силы на графике.
zone_fuzzfactor Коэффициент неопределённости зон — Коэффициент неопределённости, используемый при расчёте верхней и нижней границ зон.
zone_solid Сплошная залегочка — Управляет стилем залегочки зон — сплошная залегочка или прозрачная.
zone_linewidth Толщина линий зон — Устанавливает толщину линий, используемых для отрисовки зон на графике.
zone_style Стиль линий зон — Устанавливает стиль линий зон (сплошной, пунктирный и т. д.) на графике.
zone_label_shift Сдвиг подписей зон — Задаёт величину сдвига подписей зон на графике относительно их стандартного положения.
zone_show_alerts Показывать оповещения о зонах — Включает или отключает систему оповещений при касании ценой зон поддержки и сопротивления.
zone_alert_popups Всплывающие оповещения — Включает или отключает всплывающие уведомления на графике при касании ценой зоны.
zone_alert_sounds Звуковые оповещения — Включает или отключает воспроизведение звукового сигнала при касании ценой зоны.
send_email Отправлять email-уведомления — Включает или отключает отправку электронного письма при касании ценой зоны.
zone_alert_waitseconds Пауза между оповещениями (сек) — Задаёт интервал в секундах между последовательными оповещениями о касании зон.
zone_merge Объединять зоны — Включает или отключает объединение пересекающихся или смежных зон в одну.
zone_extend Расширять границы зон — Включает или отключает расширение границ зон на основе коэффициента неопределённости.
fractals_show Отображать фракталы — Включает или отключает отображение фрактальных точек на графике в виде стрелок.
fractal_fast_factor Коэффициент быстрых фракталов — Коэффициент, определяющий чувствительность быстрого расчёта фрактальных точек.
fractal_slow_factor Коэффициент медленных фракталов — Коэффициент, определяющий чувствительность медленного расчёта фрактальных точек.
SetGlobals Использовать глобальные переменные — Включает или отключает сохранение данных о зонах в глобальных переменных терминала MetaTrader 5 для доступа между сессиями.
Получить полный код

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

#property version   "4.00"

#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 int TimeFrame   = 0;
extern string TimeString  = "0=Current, 60=H1, 240=H4, 1440=Day, 10080=Week, 43200=Month";

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;

extern bool zone_show_weak  = true;
extern double zone_fuzzfactor = 0.40;
extern bool zone_solid = true;
extern int zone_linewidth = 1;
extern int zone_style = 0;
bool zone_show_info    = false;
extern int zone_label_shift  = 5;
extern bool zone_show_alerts  = false;
extern bool zone_alert_popups = false;
extern bool zone_alert_sounds = false;
extern bool send_email        = false;
extern int zone_alert_waitseconds = 300; 
extern bool zone_merge = true;
extern bool zone_extend = true;

extern bool fractals_show = false;
extern double fractal_fast_factor = 3.0;
extern double fractal_slow_factor = 6.0;
extern bool SetGlobals = true;

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(TimeFrame) + ": Касание зоны поддержки");
               else
                  Alert(Symbol() + TimeFrameToString(TimeFrame) + ": Касание зоны сопротивления");
            }

            if (zone_alert_sounds == true)
               PlaySound("alert.wav");
         }

         if (send_email == true)
         {
            string dir = "";
            string msg = StringConcatenate(Symbol(), "-", TimeFrameToString(TimeFrame), " at ", TimeToStr(Time[0], TIME_DATE|TIME_SECONDS),
                                           " ", dir, " Zone Entered");
            if (zone_type[i] == ZONE_SUPPORT)
            {
               dir = "Support";
               SendMail("ZSR alert", msg);
            }
            else
            {
               dir = "Resistance";
               SendMail("ZSR alert", msg);
            }
         }
         return(true);
      }
   }

   return(false);
}

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

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

   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()+TimeFrame+i);
      GlobalVariableDel("SSSR_LO_"+Symbol()+TimeFrame+i);
      GlobalVariableDel("SSSR_HITS_"+Symbol()+TimeFrame+i);
      GlobalVariableDel("SSSR_STRENGTH_"+Symbol()+TimeFrame+i);
      GlobalVariableDel("SSSR_AGE_"+Symbol()+TimeFrame+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(iBars(NULL, TimeFrame)-1, BackLimit); shift>5; shift--)
   {
      double atr = iATR(NULL, TimeFrame, 7, shift);
      double fu = atr/2 * zone_fuzzfactor;
      bool isWeak;
      bool touchOk = false;
      bool isBust = false;
      double close = iClose(NULL, TimeFrame, shift);
      double high  = iHigh(NULL, TimeFrame, shift);
      double low   = iLow(NULL, TimeFrame, shift);
      double hi_i;
      double lo_i;

      if (FastUpPts[shift] > 0.001)
      {

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

         hival = high;
         if (zone_extend == true)
            hival += fu;

         loval = MathMax(MathMin(close, high-fu), high-fu*2);
         turned = false;
         hasturned = false;
         isBust = false;

         bustcount = 0;
         testcount = 0;

         for (i=shift-1; i>=0; i--)
         {
            hi_i = iHigh(NULL, TimeFrame, i);
            lo_i = iLow(NULL, TimeFrame, 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 && hi_i > hival) ||
                (turned == true && lo_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;
         if (zone_extend == true)
            loval -= fu;

         hival = MathMin(MathMax(close, low+fu), low+fu*2);
         turned = false;
         hasturned = false;

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

         for (i=shift-1; i>=0; i--)
         {
            hi_i = iHigh(NULL, TimeFrame, i);
            lo_i = iLow(NULL, TimeFrame, i);

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

               touchOk = tr

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

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

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

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

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

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

Стоимость полного кода
1 483,20₽ ≈ $18.13