[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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.