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

SS_SupportResistance

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

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

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

О программе

SS_SupportResistance — индикатор для платформы MetaTrader 4, предназначенный для выявления и визуализации зон поддержки и сопротивления на ценовых графиках. Программа анализирует ценовые данные заданного таймфрейма, определяет ключевые уровни и формирует зоны различной силы.

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

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

Данные о зонах могут сохраняться в глобальных переменных платформы для обеспечения персистентности между перезапусками терминала. Версия кода — v04c.

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

НастройкаОписание
BackLimit Глубина анализа — Глубина анализа в количестве баров для поиска зон поддержки и сопротивления.
TimeFrame Таймфрейм — Таймфрейм для анализа ценовых данных. Допустимые значения: 0 (текущий), 60 (H1), 240 (H4), 1440 (D1), 10080 (W1), 43200 (MN).
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_show_info Показывать информацию о зонах — Включает или отключает отображение информационных меток с данными о зоне на графике.
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 Использовать глобальные переменные — Включает или отключает сохранение данных зон в глобальных переменных платформы.
Получить полный код

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

#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   = 300;
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.25;
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  = 5;
extern bool zone_show_alerts  = false;
extern bool zone_alert_popups = true;
extern bool zone_alert_sounds = true;
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) + ": Support Zone Entered");
               else
                  Alert(Symbol() + TimeFrameToString(TimeFrame) + ": Resistance Zone Entered");
            }

            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("SS_SupRes_v04c alert", msg);
            }
            else
            {
               dir = "Resistance";
               SendMail("SS_SupRes_v04c 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))
            {

         

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

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

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

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

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

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

Стоимость полного кода
1 486,80₽ ≈ $18.17