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

[ORT] Supply_Demand_v3

[ort] supply_demand_v3 bt.mq5
Вы автор или правообладатель?

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

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

О программе

Индикатор [ORT] Supply_Demand_v3 предназначен для анализа ценовых графиков в MetaTrader 5. Он рассчитывает зоны спроса и предложения на основе фрактального анализа ценовых данных и отображает их на графике в виде цветных прямоугольников.

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

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

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

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

НастройкаОписание
BackLimit Глубина анализа — Глубина анализа в барах — максимальное количество баров назад, в которых ищутся зоны.
TimeFrame Таймфрейм — Таймфрейм, на котором рассчитываются зоны спроса и предложения.
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_info_fontsize Размер шрифта меток — Размер шрифта текстовых меток зон на графике.
zone_info_color_support Цвет меток поддержки — Цвет текста меток для зон поддержки.
zone_info_color_resistance Цвет меток сопротивления — Цвет текста меток для зон сопротивления.
"Century Gothic"; (zone_info_ftype) Шрифт меток — Шрифт, используемый для текстовых меток зон на графике.
zone_label_shift Смещение меток — Смещение текстовых меток зон относительно их позиционирования по горизонтали.
zone_show_alerts Показ оповещений — Включает или отключает систему оповещений о входе цены в зону.
zone_alert_popups Всплывающие оповещения — Включает или отключает всплывающие уведомления при входе цены в зону.
zone_alert_sounds Звуковые оповещения — Включает или отключает звуковые оповещения при входе цены в зону.
zone_alert_waitseconds Задержка оповещений — Минимальный интервал в секундах между последовательными оповещениями.
zone_merge Объединение зон — Включает или отключает объединение пересекающихся зон в одну.
zone_extend Расширение зон — Включает или отключает расширение зон за пределы фрактальных точек.
fractals_show Показ фракталов — Включает или отключает отображение маркеров фракталов на графике.
fractal_fast_factor Множитель быстрых фракталов — Множитель для расчёта быстрых фракталов — определяет чувствительность поиска ценовых пиков.
fractal_slow_factor Множитель медленных фракталов — Множитель для расчёта медленных фракталов — определяет период усреднения для поиска пиков.
SetGlobals Запись в глобальные переменные — Включает или отключает сохранение данных зон в глобальные переменные терминала.
button_note1 Заметка 1 — Текстовая заметка, отображаемая над кнопкой.
What window to put the button on. If <0, the button will use the same sub-window as the indicator. (btn_Subwindow) Подокно кнопки — Подокно графика, в котором размещается кнопка. Если значение меньше нуля, кнопка размещается в том же подокне, что и индикатор.
button corner on chart for anchoring (btn_corner) Угол размещения кнопки — Угол графика, в котором якорно закрепляется кнопка.
a button name (btn_text) Текст кнопки — Текст, отображаемый на кнопке.
button font name (btn_Font) Шрифт кнопки — Шрифт текста на кнопке управления.
button font size (btn_FontSize) Размер шрифта кнопки — Размер шрифта текста на кнопке в пикселях.
ON color when the button is turned on (btn_text_ON_color) Цвет текста кнопки (вкл) — Цвет текста кнопки при включённом состоянии индикатора.
OFF color when the button is turned off (btn_text_OFF_color) Цвет текста кнопки (выкл) — Цвет текста кнопки при выключенном состоянии индикатора.
background color of the button (btn_background_color) Фон кнопки — Фоновый цвет кнопки.
border color the button (btn_border_color) Рамка кнопки — Цвет рамки кнопки.
x coordinate of the button (button_x) Позиция кнопки по X — Горизонтальная координата кнопки на графике в пикселях.
y coordinate of the button (button_y) Позиция кнопки по Y — Вертикальная координата кнопки на графике в пикселях.
button width (btn_Width) Ширина кнопки — Ширина кнопки управления в пикселях.
button height (btn_Height) Высота кнопки — Высота кнопки управления в пикселях.
Unique ID for each button (UniqueButtonID) Идентификатор кнопки — Уникальный идентификатор кнопки на графике для различения нескольких экземпляров индикатора.
button_note2 Заметка 2 — Текстовая заметка, отображаемая под кнопкой.
Получить полный код

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

#property description "not for sale, rent, nor auction"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 clrRed
#property indicator_color2 clrRed
#property indicator_color3 clrDodgerBlue
#property indicator_color4 clrDodgerBlue

extern int BackLimit = 10000;
extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT;

extern color color_support_weak     = clrMidnightBlue;
extern color color_support_untested = clrDarkSlateGray;
extern color color_support_verified = clrDarkBlue;
extern color color_support_proven   = clrDarkBlue;
extern color color_support_turncoat = clrMediumBlue;
extern color color_resist_weak      = clrMaroon;
extern color color_resist_untested  = clrDarkSlateGray;
extern color color_resist_verified  = clrMaroon;
extern color color_resist_proven    = clrMaroon;
extern color color_resist_turncoat  = clrMaroon;

extern bool zone_show_weak = true;
extern double zone_fuzzfactor = 0.5;
extern bool zone_solid = true;
extern int zone_linewidth = 1;
extern int zone_style = 0;
extern bool zone_show_info = true;
extern int zone_info_fontsize = 8;
extern color zone_info_color_support = clrGreen;
extern color zone_info_color_resistance = clrRed;
extern string zone_info_ftype = "Arial"; //"Century Gothic";
extern int zone_label_shift = -5;
extern bool zone_show_alerts = true;
extern bool zone_alert_popups = true;
extern bool zone_alert_sounds = false;
extern int zone_alert_waitseconds = 300; 
extern bool zone_merge = true;
extern bool zone_extend = true;

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

extern string             button_note1          = "------------------------------";
extern int                btn_Subwindow         = 0;                               // What window to put the button on.  If <0, the button will use the same sub-window as the indicator.
extern ENUM_BASE_CORNER   btn_corner            = CORNER_LEFT_UPPER;               // button corner on chart for anchoring
extern string             btn_text              = "SUP DEM";                       // a button name
extern string             btn_Font              = "Arial";                         // button font name
extern int                btn_FontSize          = 9;                               // button font size               
extern color              btn_text_ON_color     = clrLime;                         // ON color when the button is turned on
extern color              btn_text_OFF_color    = clrRed;                          // OFF color when the button is turned off
extern color              btn_background_color  = clrDimGray;                      // background color of the button
extern color              btn_border_color      = clrBlack;                        // border color the button
extern int                button_x              = 20;                              // x coordinate of the button     
extern int                button_y              = 155;                             // y coordinate of the button     
extern int                btn_Width             = 80;                              // button width
extern int                btn_Height            = 20;                              // button height
extern string             UniqueButtonID        = "SupplyDemand";                  // Unique ID for each button        
extern string             button_note2          = "------------------------------";

bool show_data, recalc=false;
string IndicatorObjPrefix, buttonId;

double FastDnPts[], FastUpPts[], SlowDnPts[], SlowUpPts[], zone_hi[1000], zone_lo[1000];
int    zone_start[1000], zone_hits[1000], zone_type[1000], zone_strength[1000], zone_count = 0, time_offset = 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 OnInit()
{
      // код доступен только после оплаты
   }

void createButton(string buttonID,string buttonText,int width2,int height,string font,int fontSize,color bgColor,color borderColor,color txtColor)
{
      ObjectDelete    (0,buttonID);
      ObjectCreate    (0,buttonID,OBJ_BUTTON,btn_Subwindow,0,0);
      ObjectSetInteger(0,buttonID,OBJPROP_COLOR,txtColor);
      ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,bgColor);
      ObjectSetInteger(0,buttonID,OBJPROP_BORDER_COLOR,borderColor);
      ObjectSetInteger(0,buttonID,OBJPROP_BORDER_TYPE,BORDER_RAISED);
      ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,width2);
      ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,height);
      ObjectSetString (0,buttonID,OBJPROP_FONT,font);
      ObjectSetString (0,buttonID,OBJPROP_TEXT,buttonText);
      ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,fontSize);
      ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
      ObjectSetInteger(0,buttonID,OBJPROP_CORNER,btn_corner);
      ObjectSetInteger(0,buttonID,OBJPROP_HIDDEN,1);
      ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,9999);
      ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,9999);

      ObjectSetInteger(0, buttonId, OBJPROP_STATE, true);
}

void OnDeinit(const int reason) 
{

   if(reason != REASON_CHARTCHANGE) ObjectDelete(buttonId);
   deinit2();
}

void OnChartEvent(const int id, //don't change anything here
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{

   if(id==CHARTEVENT_OBJECT_CREATE || id==CHARTEVENT_OBJECT_DELETE) return; // This appears to make this indy compatible with other programs that enabled CHART_EVENT_OBJECT_CREATE and/or CHART_EVENT_OBJECT_DELETE
   if(id==CHARTEVENT_MOUSE_MOVE    || id==CHARTEVENT_MOUSE_WHEEL)   return; // If this, or another program, enabled mouse-events, these are not needed below, so skip it unless actually needed. 

   if (id==CHARTEVENT_OBJECT_CLICK && sparam == buttonId)
   {
      show_data = ObjectGetInteger(0, buttonId, OBJPROP_STATE);

      if (show_data)
      {
         ObjectSetInteger(0,buttonId,OBJPROP_COLOR,btn_text_ON_color); 
         init2();

         recalc=true;
         mystart();
      }
      else
      {
         ObjectSetInteger(0,buttonId,OBJPROP_COLOR,btn_text_OFF_color);
         deinit2();
         for (int Forex=0; Forex<indicator_buffers; Forex++)
              SetIndexStyle(Forex,DRAW_NONE);
      }
   }
}

int init2()
{
   IndicatorBuffers(4);

   SetIndexBuffer(0, SlowDnPts);
   SetIndexBuffer(1, SlowUpPts);
   SetIndexBuffer(2, FastDnPts);
   SetIndexBuffer(3, FastUpPts);

   if (fractals_show == true)
   {
      SetIndexStyle(0, DRAW_ARROW, 0, 1);
      SetIndexStyle(1, DRAW_ARROW, 0, 1);
      SetIndexStyle(2, DRAW_ARROW, 0, 0);
      SetIndexStyle(3, DRAW_ARROW, 0, 0);
      SetIndexArrow(0, 218);
      SetIndexArrow(1, 217);
      SetIndexArrow(2, 218);
      SetIndexArrow(3, 217);
   }
   else
   {
      SetIndexStyle(0, DRAW_NONE);
      SetIndexStyle(1, DRAW_NONE);
      SetIndexStyle(2, DRAW_NONE);
      SetIndexStyle(3, DRAW_NONE);
   }
   TimeFrame         = MathMax(TimeFrame,_Period);
   return(0);
}

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

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

int mystart()
  {
   if (show_data)
      {
        if(recalc) 
        {

           recalc=false;
        }
      int old_zone_count = zone_count;

      FastFractals();
      SlowFractals();
      DeleteZones();
      FindZones();
      DrawZones();
      if (zone_count < old_zone_count)
         DeleteOldGlobalVars(old_zone_count);

   if (zone_show_info == true)
   {
      color use_color = clrGray;
      for (int i=0; i<zone_count; i++)
      {
         string lbl;
         if (zone_strength[i] == ZONE_PROVEN)
            lbl = "Strong";
         else if (zone_strength[i] == ZONE_VERIFIED)
            lbl = "Verified";
         else if (zone_strength[i] == ZONE_UNTESTED)
            lbl = "Untested";
         else if (zone_strength[i] == ZONE_TURNCOAT)
            lbl = "Turncoat";
         else
            lbl = "Weak";

         if (zone_type[i] == ZONE_SUPPORT){
            lbl = lbl + " Support zone";
            use_color=zone_info_color_support;}
         else{
            lbl = lbl + " Resistance zone";
            use_color=zone_info_color_resistance;}

         if (zone_hits[i] > 0 && zone_strength[i] > ZONE_UNTESTED)
         {
            if (zone_hits[i] == 1)
               lbl = lbl + ",Test:" + zone_hits[i];
            else
               lbl = lbl + ",Test:" + zone_hits[i];
         }

         int adjust_hpos;
         int wbpc = WindowBarsPerChart();
         int k;

         k = Period() * 60 + (20 + StringLen(lbl));

         if (wbpc < 80)  
            adjust_hpos = Time[0] + k * 4;
         else if (wbpc < 125)  
            adjust_hpos = Time[0] + k * 8;
         else if (wbpc < 250)
            adjust_hpos = Time[0] + k * 15;
         else if (wbpc < 480)
            adjust_hpos = Time[0] + k * 29;
         else if (wbpc < 950)
            adjust_hpos = Time[0] + k * 58;
         else
            adjust_hpos = Time[0] + k * 115;

         int shift = k * zone_label_shift;
         double vpos = zone_hi[i] - (zone_hi[i] - zone_lo[i]) / 2;

         string s = "SSSR#"+i+"LBL";
         ObjectCreate(s, OBJ_TEXT, 0, 0, 0);
         ObjectSet(s, OBJPROP_TIME1, adjust_hpos + shift);
         ObjectSet(s, OBJPROP_PRICE1, vpos);
         ObjectSetText(s, StringRightPad(lbl, 36, " "),zone_info_fontsize,zone_info_ftype,use_color);
      }
   }

   CheckAlerts();
      } //if (show_data)  
   return(0);
}

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++) // check for entries
   {
      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");
         }

         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;

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

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

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

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

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

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

Стоимость полного кода
1 832,10₽ ≈ $22.39