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

Shved Supply and Demand

! shved-supply-and-demand (mtf).mq5
Вы автор или правообладатель?

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

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

О программе

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

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

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

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

НастройкаОписание
inpTimeFrame Выбранный таймейф для анализа зон спроса и предложения (встроенный перечень таймфреймов).
inpTimeFrameCustom Числовое значение пользовательского таймфрейма в минутах (используется при выборе пользовательского таймфрейма).
BackLimit Глубина обратного анализа в барах для поиска зон спроса и предложения.
zone_show_weak Включает отображение слабых зон с минимальной силой.
zone_show_untested Включает отображение зон, которые ещё не были протестированы ценой.
zone_show_turncoat Включает отображение перевёрнутых зон, сменивших сторону.
zone_fuzzfactor Коэффициент размытия, определяющий величину расширения границ зон от ATR.
fractals_show Включает или отключает отображение стрелок фрактальных точек на графике.
fractal_fast_factor Множитель периода для расчёта быстрых фрактальных точек.
fractal_slow_factor Множитель периода для расчёта медленных фрактальных точек.
SetGlobals Включает сохранение данных зон в глобальные переменные терминала с префиксом SSSR.
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  clrRed
#property indicator_color2  clrRed
#property indicator_color3  clrDodgerBlue
#property indicator_color4  clrDodgerBlue

enum enTimeFrames
{
         tf_cu  = 0,                                                 // Current time frame
         tf_m1  = PERIOD_M1,                                         // 1 minute
         tf_m5  = PERIOD_M5,                                         // 5 minutes
         tf_m15 = PERIOD_M15,                                        // 15 minutes
         tf_m30 = PERIOD_M30,                                        // 30 minutes
         tf_h1  = PERIOD_H1,                                         // 1 hour
         tf_h4  = PERIOD_H4,                                         // 4 hours
         tf_d1  = PERIOD_D1,                                         // Daily
         tf_w1  = PERIOD_W1,                                         // Weekly
         tf_mn1 = PERIOD_MN1,                                        // Monthly
         tf_n1  = -1,                                                // First higher time frame
         tf_n2  = -2,                                                // Second higher time frame
         tf_n3  = -3,                                                // Third higher time frame
         tf_cus = 12345678                                           // Custom time frame
      };
input enTimeFrames inpTimeFrame      = tf_cu;                 // Time frame to use
input int         inpTimeFrameCustom = 0;                     // Custom time frame to use (if custom time frame used)  
extern int    BackLimit              = 1000;
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 bool   fractals_show          = false;
extern double fractal_fast_factor    = 3.0;
extern double fractal_slow_factor    = 6.0;
extern bool   SetGlobals             = true;
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 bool   zone_show_alerts       = false;
extern bool   zone_alert_popups      = true;
extern bool   zone_alert_sounds      = true;
extern int    zone_alert_waitseconds = 300;
extern int    Text_size              = 8;
extern string Text_font              = "Courier New";
extern color  Text_color             = clrWhite;
extern string sup_name               = "Sup";
extern string res_name               = "Res";
extern string test_name              = "Retests";
extern color  color_support_weak     = clrDarkSlateGray;
extern color  color_support_untested = clrSeaGreen;
extern color  color_support_verified = clrGreen;
extern color  color_support_proven   = clrLimeGreen;
extern color  color_support_turncoat = clrOliveDrab;
extern color  color_resist_weak      = clrIndigo;
extern color  color_resist_untested  = clrOrchid;
extern color  color_resist_verified  = clrCrimson;
extern color  color_resist_proven    = clrRed;
extern color  color_resist_turncoat  = clrDarkOrange;

double FastDnPts[],FastUpPts[],SlowDnPts[],SlowUpPts[],count[];
double ner_lo_zone_P1[],ner_lo_zone_P2[],ner_hi_zone_P1[],ner_hi_zone_P2[];

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;
struct sGlobalStruct
{
   string indicatorFileName;
   int    indicatorTimeFrame;
   int    tfcustom;
};
sGlobalStruct global;
#define _mtfCall(_buff,_ind) iCustom(_Symbol,global.indicatorTimeFrame,global.indicatorFileName,tf_cu,0,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,_buff,_ind)

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;
             

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

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

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

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

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

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

Стоимость полного кода
1 805,40₽ ≈ $22.07