SS_SupportResistance
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ss_supportresistance_v04c nmc.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
SS_SupportResistance — индикатор для платформы MetaTrader 4, предназначенный для выявления и визуализации зон поддержки и сопротивления на ценовых графиках. Программа анализирует ценовые данные заданного таймфрейма, определяет ключевые уровни и формирует зоны различной силы.
Зоны классифицируются по пяти уровням силы: от слабых до подтверждённых. Каждая зона отображается на графике с настраиваемым цветом в зависимости от типа (поддержка или сопротивление) и степени подтверждения.
Индикатор поддерживает систему оповещений, включающую всплывающие уведомления, звуковые сигналы и отправку электронной почты при входе цены в зону. Также доступна отрисовка фрактальных точек и объединение пересекающихся зон.
Данные о зонах могут сохраняться в глобальных переменных платформы для обеспечения персистентности между перезапусками терминала. Версия кода — v04c.
Настройки программы
| Настройка | Описание |
|---|---|
| BackLimit | Глубина анализа — Глубина анализа в количестве баров для поиска зон поддержки и сопротивления. |
| TimeFrame | Таймфрейм — Таймфрейм для анализа ценовых данных. Допустимые значения: 0 (текущий), 60 (H1), 240 (H4), 1440 (D1), 10080 (W1), 43200 (MN). |
| TimeString | Строка таймфрейма — Строковый параметр, содержащий описание допустимых значений таймфрейма. |
| 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_label_shift | Смещение метки — Смещение горизонтального положения информационной метки зоны в барах. |
| zone_show_alerts | Показывать оповещения — Включает или отключает проверку и срабатывание оповещений при входе цены в зону. |
| zone_alert_popups | Всплывающие оповещения — Включает или отключает всплывающие уведомления при входе цены в зону. |
| zone_alert_sounds | Звуковые оповещения — Включает или отключает звуковые сигналы при входе цены в зону. |
| send_email | Отправлять email — Включает или отключает отправку электронной почты при срабатывании оповещения о входе в зону. |
| zone_alert_waitseconds | Интервал ожидания оповещений — Интервал в секундах между последовательными оповещениями. |
| zone_merge | Объединять зоны — Включает или отключает объединение пересекающихся или смежных зон. |
| zone_extend | Расширять зоны — Включает или отключает расширение зон за пределы фрактальных точек. |
| fractals_show | Показывать фракталы — Включает или отключает отображение фрактальных точек на графике. |
| fractal_fast_factor | Коэффициент быстрых фракталов — Коэффициент для расчёта периода быстрых фрактальных точек. |
| fractal_slow_factor | Коэффициент медленных фракталов — Коэффициент для расчёта периода медленных фрактальных точек. |
| SetGlobals | Использовать глобальные переменные — Включает или отключает сохранение данных зон в глобальных переменных платформы. |
Поиск по коду файла
#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 = 300;
extern int TimeFrame = 0;
extern string TimeString = "0=Current, 60=H1, 240=H4, 1440=Day, 10080=Week, 43200=Month";
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;
extern bool zone_show_weak = true;
extern double zone_fuzzfactor = 0.25;
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 = 5;
extern bool zone_show_alerts = false;
extern bool zone_alert_popups = true;
extern bool zone_alert_sounds = true;
extern bool send_email = false;
extern int zone_alert_waitseconds = 300;
extern bool zone_merge = true;
extern bool zone_extend = true;
extern bool fractals_show = false;
extern double fractal_fast_factor = 3.0;
extern double fractal_slow_factor = 6.0;
extern bool SetGlobals = true;
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(TimeFrame) + ": Support Zone Entered");
else
Alert(Symbol() + TimeFrameToString(TimeFrame) + ": Resistance Zone Entered");
}
if (zone_alert_sounds == true)
PlaySound("alert.wav");
}
if (send_email == true)
{
string dir = "";
string msg = StringConcatenate(Symbol(), "-", TimeFrameToString(TimeFrame), " at ", TimeToStr(Time[0], TIME_DATE|TIME_SECONDS),
" ", dir, " Zone Entered");
if (zone_type[i] == ZONE_SUPPORT)
{
dir = "Support";
SendMail("SS_SupRes_v04c alert", msg);
}
else
{
dir = "Resistance";
SendMail("SS_SupRes_v04c alert", msg);
}
}
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;
break;
}
}
if (touchOk == true)
{
bustcount = 0;
testcount++;
}
}
if ((turned == false && hi_i > hival) ||
(turned == true && lo_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;
if (zone_extend == true)
loval -= fu;
hival = MathMin(MathMax(close, low+fu), low+fu*2);
turned = false;
hasturned = false;
bustcount = 0;
testcount = 0;
isBust = false;
for (i=shift-1; i>=0; i--)
{
hi_i = iHigh(NULL, TimeFrame, i);
lo_i = iLow(NULL, TimeFrame, i);
if ((turned == true && FastUpPts[i] >= loval && FastUpPts[i] <= hival) ||
(turned == false && FastDnPts[i] <= hival && FastDnPts[i] >= loval))
{
Показано первые 50% кода (символов: 14868)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.