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

shved_supply_and_demand.mq5

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

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

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

О программе

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

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

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

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

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

НастройкаОписание
BackLimit Глубина поиска — Глубина поиска зон в количестве баров от текущего бара.
zone_show_weak Показывать слабые зоны — Включает или отключает отображение слабых зон.
zone_show_untested Показывать нетестированные зоны — Включает или отключает отображение нетестированных зон.
zone_show_turncoat Показывать переключённые зоны — Включает или отключает отображение зон, сменивших сторону.
zone_fuzzfactor Коэффициент нечёткости — Коэффициент нечёткости, определяющий ширину зоны при расчёте.
fractals_show Показывать фракталы — Включает или отключает отображение фрактальных точек на графике.
fractal_fast_factor Множитель быстрого фрактала — Множитель периода для быстрого определения фрактальных точек.
fractal_slow_factor Множитель медленного фрактала — Множитель периода для медленного определения фрактальных точек.
SetGlobals Использовать глобальные переменные — Включает или отключает сохранение данных зон в глобальных переменных терминала.
zone_solid Заливка зон — Определяет, заполняются ли зоны цветом или отображаются только границами.
zone_linewidth Толщина линии зоны — Толщина линии границы зоны на графике.
zone_style Стиль линии зоны — Стиль линии границы зоны (сплошная, пунктир и т.д.).
zone_show_info Показывать информацию о зонах — Включает или отключает отображение текстовых меток с информацией о зонах.
zone_label_shift Сдвиг метки — Сдвиг горизонтального положения текстовой метки зоны.
zone_merge Слияние зон — Включает или отключает слияние перекрывающихся зон в одну.
zone_extend Расширение зон — Включает или отключает расширение границ зоны на основе коэффициента нечёткости.
zone_show_alerts Показывать оповещения — Включает или отключает проверку и отправку оповещений при входе цены в зону.
zone_alert_popups Всплывающие оповещения — Включает или отключает всплывающие уведомления при входе цены в зону.
zone_alert_sounds Звуковые оповещения — Включает или отключает звуковой сигнал при входе цены в зону.
zone_alert_waitseconds Пауза между оповещениями — Интервал ожидания в секундах между последовательными оповещениями.
Text_size Размер шрифта меток — Размер шрифта текста меток зон на графике.
Text_font Шрифт меток — Шрифт текста меток зон на графике.
Text_color Цвет текста меток — Цвет текста меток зон на графике.
sup_name Название поддержки — Текстовая метка для обозначения зон поддержки.
res_name Название сопротивления — Текстовая метка для обозначения зон сопротивления.
test_name Название тестов — Текстовая метка для обозначения количества тестов зоны.
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 Цвет переключённого сопротивления — Цвет зоны сопротивления, сменившей сторону.
Получить полный код

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

#property description "edited by eevviill"
#property description "on-off zones,build 600+,nearest zones in buffers"

#property indicator_chart_window
#property indicator_buffers 8
#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;

double ner_lo_zone_P1[];
double ner_lo_zone_P2[];
double ner_hi_zone_P1[];
double ner_hi_zone_P2[];

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=

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

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

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

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

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

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

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