shved-supply-and-demand.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «shved-supply-and-demand.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 4 на языке MQL4. Он предназначен для выявления и отображения на графике зон спроса и предложения (поддержки и сопротивления), основываясь на анализе быстрых и медленных фрактальных точек цены.
Каждая обнаруженная зона классифицируется по силе воздействия — от слабой до подтверждённой (Proven) — в зависимости от количества тестов ценой и наличия разворота уровня. Зоны визуализируются прямоугольниками с цветовой кодировкой: отдельные цвета для поддержечных и сопротивленческих зон, а также для различных уровней силы.
Индикатор предоставляет настраиваемые параметры отображения: возможность объединения перекрывающихся зон, вывод информационных меток, настройка шрифта и размера текста. Также реализована система уведомлений — всплывающие окна и звуковые сигналы при входе цены в зону. Данные о зонах могут сохраняться в глобальных переменных MetaTrader.
Настройки программы
| Настройка | Описание |
|---|---|
| BackLimit | BackLimit — Глубина анализа в количестве баров для поиска зон и расчёта фракталов |
| zone_show_weak | zone_show_weak — Отображать ли слабые зоны (Weak) |
| zone_show_untested | zone_show_untested — Отображать ли непроверенные зоны (Untested) |
| zone_show_turncoat | zone_show_turncoat — Отображать ли зоны разворота (Turncoat) |
| zone_fuzzfactor | zone_fuzzfactor — Коэффициент нечёткости при определении границ зоны |
| fractals_show | fractals_show — Отображать ли фрактальные точки на графике стрелками |
| fractal_fast_factor | fractal_fast_factor — Множитель для расчёта периода быстрых фракталов |
| fractal_slow_factor | fractal_slow_factor — Множитель для расчёта периода медленных фракталов |
| SetGlobals | SetGlobals — Включает или отключает сохранение данных зон в глобальные переменные MetaTrader |
| zone_solid | zone_solid — Отображать ли зоны как сплошные прямоугольники |
| zone_linewidth | zone_linewidth — Толщина линии прямоугольника зоны |
| zone_style | zone_style — Стиль линии прямоугольника зоны |
| zone_show_info | zone_show_info — Отображать ли текстовые метки для каждой зоны |
| zone_label_shift | zone_label_shift — Смещение горизонтальной позиции метки зоны |
| zone_merge | zone_merge — Объединять ли перекрывающиеся зоны в одну |
| zone_extend | zone_extend — Растягивать ли зоны по вертикали на величину, рассчитанную через ATR |
| zone_show_alerts | zone_show_alerts — Включает или отключает систему уведомлений о входе в зону |
| zone_alert_popups | zone_alert_popups — Включает всплывающие уведомления при входе цены в зону |
| zone_alert_sounds | zone_alert_sounds — Включает звуковые уведомления при входе цены в зону |
| zone_alert_waitseconds | zone_alert_waitseconds — Интервал ожидания в секундах между последовательными уведомлениями |
| Text_size | Text_size — Размер шрифта текста информационных меток зон |
| Text_font | Text_font — Шрифт текста информационных меток зон |
| Text_color | Text_color — Цвет текста информационных меток зон |
| sup_name | sup_name — Название метки для зон поддержки |
| res_name | res_name — Название метки для зон сопротивления |
| test_name | test_name — Название для отображения количества тестов зоны |
| color_support_weak | color_support_weak — Цвет для слабой (Weak) зоны поддержки |
| color_support_untested | color_support_untested — Цвет для непроверенной (Untested) зоны поддержки |
| color_support_verified | color_support_verified — Цвет для проверенной (Verified) зоны поддержки |
| color_support_proven | color_support_proven — Цвет для подтверждённой (Proven) зоны поддержки |
| color_support_turncoat | color_support_turncoat — Цвет для зоны поддержки разворота (Turncoat) |
| color_resist_weak | color_resist_weak — Цвет для слабой (Weak) зоны сопротивления |
| color_resist_untested | color_resist_untested — Цвет для непроверенной (Untested) зоны сопротивления |
| color_resist_verified | color_resist_verified — Цвет для проверенной (Verified) зоны сопротивления |
| color_resist_proven | color_resist_proven — Цвет для подтверждённой (Proven) зоны сопротивления |
| color_resist_turncoat | color_resist_turncoat — Цвет для зоны сопротивления разворота (Turncoat) |
Поиск по коду файла
#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 = 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;
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 == false && FastDnPts[jПоказано первые 50% кода (символов: 14726)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.