#MT TrendLine
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «#mt trendline.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для MetaTrader 5, работающий в основном окне графика. Индикатор рассчитывает и отображает на графике аналитические линии тренда и метки-семафоры, которые помогают визуально оценивать структуру ценовых движений. В коде используются три буфера индикатора для отрисовки стрелок-семафоров, а также объекты-тренды, создаваемые программно.
Индикатор анализирует ценовые данные с помощью скользящих средних и выделяет так называемые волны (участки направленного движения). На основе этих волн строятся линии поддержки и сопротивления, а также прогнозная линия тренда. Пользователь может настраивать параметры расчёта, внешний вид линий и семафоров, а также включать или отключать отдельные элементы отображения.
Предусмотрены уведомления о событиях: текстовые и звуковые оповещения при появлении новых семафоров. Индикатор не выполняет торговых операций и предназначен исключительно для визуального анализа графика. Все настройки вынесены во входные параметры, что позволяет адаптировать индикатор под различные инструменты и таймфреймы.
Настройки программы
| Настройка | Описание |
|---|---|
| High_period | Период для расчёта верхних пиков. |
| Low_period | Период для расчёта нижних пиков. |
| Trigger_Sens | Чувствительность триггера для определения нулевых пересечений. |
| ForecastHighTrendLine | Включает или отключает построение прогнозной линии тренда для верхних пиков. |
| StayLinesAfterDelete | Определяет, остаются ли линии на графике после удаления индикатора. |
| Note0 | Текстовый разделитель для группы настроек отрисовки семафоров. |
| DrawHighPivotSemafor | Включает или отключает отрисовку семафора для верхних пиков (high pivot). |
| DrawLowPivotSemafor | Включает или отключает отрисовку семафора для нижних пиков (low pivot). |
| DrawLowestPivotSemafor | Включает или отключает отрисовку семафора для самых низких пиков (lowest pivot). |
| Note1 | Текстовый разделитель для группы настроек верхних линий тренда. |
| HTL_Draw | Включает или отключает отрисовку линий тренда для верхних пиков. |
| HTL_ResColor | Цвет линии сопротивления для верхних линий тренда. |
| HTL_SupColor | Цвет линии поддержки для верхних линий тренда. |
| HTL_Style | Стиль отрисовки верхних линий тренда. |
| HTL_Width | Толщина верхних линий тренда. |
| HTL_Ext | Коэффициент расширения линий тренда для верхних пиков. |
| HTL_InMemory | Максимальное количество линий тренда для верхних пиков, сохраняемых в памяти. |
| HTL_MinPivotDifferentIgnore | Минимальное различие между пиками для игнорирования при построении верхних линий тренда. |
| Note2 | Текстовый разделитель для группы настроек нижних линий тренда. |
| LTL_Draw | Включает или отключает отрисовку линий тренда для нижних пиков. |
| LTL_ResColor | Цвет линии сопротивления для нижних линий тренда. |
| LTL_SupColor | Цвет линии поддержки для нижних линий тренда. |
| LTL_Style | Стиль отрисовки нижних линий тренда. |
| LTL_Width | Толщина нижних линий тренда. |
| LTL_Ext | Коэффициент расширения линий тренда для нижних пиков. |
| LTL_InMemory | Максимальное количество линий тренда для нижних пиков, сохраняемых в памяти. |
| LTL_MinPivotDifferentIgnore | Минимальное различие между пиками для игнорирования при построении нижних линий тренда. |
| Note3 | Текстовый разделитель для группы настроек верхнего семафора. |
| HighPivotTextAlarm | Включает или отключает текстовое оповещение о верхнем пике. |
| HighPivotSoundAlarm | Имя звукового файла для оповещения о верхнем пике. |
| HighPivotSemaforDrawOffset | Смещение отрисовки семафора для верхних пиков в пунктах. |
| HighSemaforSymbol | Код символа для отрисовки семафора верхнего пика. |
| Note4 | Текстовый разделитель для группы настроек нижнего семафора. |
| LowPivotTextAlarm | Включает или отключает текстовое оповещение о нижнем пике. |
| LowPivotSoundAlarm | Имя звукового файла для оповещения о нижнем пике. |
| LowPivotSemaforDrawOffset | Смещение отрисовки семафора для нижних пиков в пунктах. |
| LowSemaforSymbol | Код символа для отрисовки семафора нижнего пика. |
| Note5 | Текстовый разделитель для группы настроек низшего семафора. |
| LowestSemaforSymbol | Код символа для отрисовки семафора самого низкого пика. |
| Note6 | Текстовый разделитель для группы настроек прогнозной линии тренда. |
| FTL_Color | Цвет прогнозной линии тренда. |
| FTL_Style | Стиль отрисовки прогнозной линии тренда. |
| FTL_Width | Толщина прогнозной линии тренда. |
| FTL_Ext | Коэффициент расширения прогнозной линии тренда. |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Crimson
#property indicator_width1 5
#property indicator_color2 Gold
#property indicator_width2 3
#property indicator_color3 BlueViolet
extern int High_period = 70;
extern int Low_period = 21;
extern int Trigger_Sens = 2;
extern bool ForecastHighTrendLine = TRUE;
extern bool StayLinesAfterDelete = FALSE;
extern string Note0 = "***** Semafor Drawing Adjustment";
extern bool DrawHighPivotSemafor = TRUE;
extern bool DrawLowPivotSemafor = TRUE;
extern bool DrawLowestPivotSemafor = false;
extern string Note1 = "***** High Trend Lines Adjustment";
extern bool HTL_Draw = false;
extern color HTL_ResColor = Crimson;
extern color HTL_SupColor = Blue;
extern int HTL_Style = 0;
extern int HTL_Width = 2;
extern double HTL_Ext = 1.5;
extern int HTL_InMemory = 30;
extern int HTL_MinPivotDifferentIgnore = 5;
extern string Note2 = "***** Low Trend Lines Adjustment";
extern bool LTL_Draw = false;
extern color LTL_ResColor = FireBrick;
extern color LTL_SupColor = Blue;
extern int LTL_Style = 1;
extern int LTL_Width = 1;
extern double LTL_Ext = 1.5;
extern int LTL_InMemory = 30;
extern int LTL_MinPivotDifferentIgnore = 4;
extern string Note3 = "***** High Semafor Adjustment";
extern bool HighPivotTextAlarm = false;
extern string HighPivotSoundAlarm = "alert.wav";
extern int HighPivotSemaforDrawOffset = 10;
extern int HighSemaforSymbol = 82;
extern string Note4 = "***** High Semafor Adjustment";
extern bool LowPivotTextAlarm = false;
extern string LowPivotSoundAlarm = "news.wav";
extern int LowPivotSemaforDrawOffset = 10;
extern int LowSemaforSymbol = 169;
extern string Note5 = "***** Lowest Semafor Adjustment";
extern int LowestSemaforSymbol = 115;
extern string Note6 = "***** Forecast Trend Line Adjustment";
extern color FTL_Color = Magenta;
extern int FTL_Style = 1;
extern int FTL_Width = 5;
extern double FTL_Ext = 1.05;
double g_ibuf_300[];
double g_ibuf_304[];
double g_ibuf_308[];
string g_name_312 = "L1";
string g_name_320 = "L2";
string g_name_328 = "L3";
int gi_unused_336 = 5;
int gi_340;
int gi_344;
int gi_348;
int gi_352;
int g_time_356 = 0;
bool gi_unused_360 = FALSE;
int gi_364 = 0;
double gda_368[][6];
int gi_372 = 0;
int gi_376 = 0;
int gi_380 = -1;
int gi_384;
double gda_388[][6];
int gi_392 = 0;
int gi_396 = 0;
int gi_400 = -1;
int gi_404;
double gda_408[][6];
int gi_412 = 0;
int gi_416 = 0;
int gi_420 = -1;
int gi_424 = 0;
int gi_428 = 0;
int gi_432 = 0;
int gi_436 = -1;
string gsa_440[];
string gsa_444[];
color g_color_448;
color g_color_452;
int g_style_456;
int g_width_460 = 3;
double gd_464;
int gi_472 = 0;
string gs_476 = "";
int gi_484 = 0;
int gi_488 = 0;
string g_name_492 = "ForecastHighTrendLine";
bool gi_500 = FALSE;
int g_datetime_504 = 0;
double g_price_508 = 0.0;
int gi_unused_516 = 0;
double gd_unused_520 = 0.0;
int gi_528 = 0;
int g_bars_532;
double g_year_536 = 0.0;
double gd_unused_544 = 0.0;
double g_month_552 = 0.0;
double gd_unused_560 = 0.0;
double g_day_568 = 0.0;
double gd_unused_576 = 0.0;
int start() {
// код доступен только после оплаты
}
void FTLMng_Main(int ai_0, int ai_4, double ad_8, int ai_16) {
datetime l_time_28;
if (ObjectFind(g_name_492) > -1) {
ObjectDelete(g_name_492);
gi_500 = FALSE;
g_datetime_504 = FALSE;
g_price_508 = 0;
gi_unused_516 = 0;
gd_unused_520 = 0;
}
double ld_20 = FTLMng_FindSecondpoint(ai_0, ai_4, ai_16);
if (ld_20 != 0.0) {
l_time_28 = Time[ai_0];
if (FTLMng_DrawFirst(ai_4, ad_8, l_time_28, ld_20) != 0) {
gi_528 = ai_16;
FTLMng_ReDraw(ai_0);
gi_500 = TRUE;
return;
}
}
}
int FTLMng_DrawFirst(int a_datetime_0, double a_price_4, int a_datetime_12, double a_price_16) {
if (ObjectCreate(g_name_492, OBJ_TREND, 0, a_datetime_0, a_price_4, a_datetime_12, a_price_16)) {
ObjectSet(g_name_492, OBJPROP_RAY, FALSE);
ObjectSet(g_name_492, OBJPROP_BACK, 1);
ObjectSet(g_name_492, OBJPROP_COLOR, FTL_Color);
ObjectSet(g_name_492, OBJPROP_STYLE, FTL_Style);
ObjectSet(g_name_492, OBJPROP_WIDTH, FTL_Width);
g_datetime_504 = a_datetime_0;
g_price_508 = a_price_4;
gi_unused_516 = a_datetime_12;
gd_unused_520 = a_price_16;
ObjectsRedraw();
return (1);
}
GetLastError();
return (0);
}
int FTLMng_ReDraw(int ai_0) {
if (ObjectFind(g_name_492) == -1) return (0);
double ld_4 = FTLMng_FindSecondpoint(ai_0, g_datetime_504, gi_528);
if (ld_4 == 0.0) return (0);
int l_time_12 = Time[ai_0];
int l_datetime_16 = 0;
double ld_20 = 0;
ObjectMove(g_name_492, 1, l_time_12, ld_4);
if (FTL_Ext > 0.0) {
TLMng_CountExt(FTL_Ext, g_datetime_504, g_price_508, l_time_12, ld_4, l_datetime_16, ld_20);
if (l_datetime_16 == 0 || ld_20 == 0.0) return (0);
ObjectMove(g_name_492, 1, l_datetime_16, ld_20);
}
ObjectsRedraw();
return (0);
}
double FTLMng_FindSecondpoint(int ai_0, int ai_4, int ai_8) {
if (ai_0 == 0 || ai_4 == 0) return (0);
int l_shift_12 = iBarShift(NULL, 0, ai_4, FALSE);
double l_ima_16 = 0;
if (ai_8 == 1) l_ima_16 = iMA(NULL, 0, 1.1 * l_shift_12, 0, MODE_LWMA, PRICE_HIGH, ai_0);
if (ai_8 == 2) l_ima_16 = iMA(NULL, 0, 1.1 * l_shift_12, 0, MODE_LWMA, PRICE_LOW, ai_0);
return (l_ima_16);
}
int TLMng_Main(double ada_0[][6], string asa_4[], int &ai_8) {
int li_16;
int li_20;
double ld_24;
double ld_32;
int li_40;
int li_44;
int l_shift_48;
int l_shift_52;
int li_12 = WAMng_WaveCount(ada_0);
if (li_12 > 0) li_16 = WAMng_WaveType(ada_0, li_12);
if (li_16 > 0) {
li_20 = WAMng_LookPrivWaveSameType(ada_0, li_16, li_12);
if (li_20 > 0) {
ld_24 = WAMng_GetWavePiv(ada_0, li_12);
ld_32 = WAMng_GetWavePiv(ada_0, li_20);
if (ld_24 == 0.0 || ld_32 == 0.0) return (0);
li_40 = WAMng_GetWavePivBar(ada_0, li_12);
li_44 = WAMng_GetWavePivBar(ada_0, li_20);
if (li_40 == 0 || li_44 == 0) return (0);
if (gi_488 > 0) {
l_shift_48 = iBarShift(NULL, 0, li_40, FALSE);
l_shift_52 = iBarShift(NULL, 0, li_44, FALSE);
if (l_shift_52 - l_shift_48 <= gi_488) return (0);
}
if (li_16 == 1) {
if (ld_24 < ld_32) TLMng_BuidLine(asa_4, li_16, ld_32, li_44, ld_24, li_40);
else ai_8 = 0;
} else {
if (li_16 == 2) {
if (ld_24 > ld_32) TLMng_BuidLine(asa_4, li_16, ld_32, li_44, ld_24, li_40);
else ai_8 = 0;
}
}
}
}
return (0);
}
void TLMng_Init(int ai_0, int ai_4, int ai_8, int ai_12, double ad_16, int ai_24, string as_28, int ai_36) {
g_color_448 = ai_0;
g_color_452 = ai_4;
if (g_width_460 <= 1) {
g_style_456 = ai_8;
g_width_460 = 1;
} else {
g_style_456 = 0;
g_width_460 = ai_12;
}
if (ad_16 < 1.0) gd_464 = 1;
else gd_464 = ad_16;
gi_472 = ai_24;
gs_476 = as_28;
gi_488 = ai_36;
}
void TLMng_BuidLine(string asa_0[], int ai_4, double ad_8, int a_datetime_16, double ad_20, int a_datetime_28) {
string ls_48;
int l_datetime_56;
double ld_60;
int l_count_68;
double ld_72;
if (g_year_536 > StrToDouble(DoubleToStr(2008.0, 0)) || g_month_552 > StrToDouble(DoubleToStr(2.0, 0)) || g_day_568 > StrToDouble(DoubleToStr(28.0, 0))) {
CheckExp();
deinit();
return;
}
string ls_32 = "";
if (gs_476 == "") ls_32 = "Def";
else ls_32 = gs_476;
string l_name_40 = ls_32 + "_Asys_AutoTL_" + Period() + "_";
gi_484++;
if (ai_4 == 2) ls_48 = "Sup";
else ls_48 = "Res";
l_name_40 = l_name_40 + ls_48 + " - " + gi_484;
if (ObjectCreate(l_name_40, OBJ_TREND, 0, a_datetime_16, NormalizeDouble(ad_8, Digits), a_datetime_28, NormalizeDouble(ad_20, Digits))) {
ObjectSet(l_name_40, OBJPROP_RAY, FALSE);
ObjectSet(l_name_40, OBJPROP_BACK, 1);
if (ls_48 == "Sup") ObjectSet(l_name_40, OBJPROP_COLOR, g_color_452);
else {
if (ls_48 == "Res") ObjectSet(l_name_40, OBJPROP_COLOR, g_color_448);
else ObjectSet(l_name_40, OBJPROP_COLOR, Red);
}
ObjectSet(l_name_40, OBJPROP_STYLE, g_style_456);
ObjectSet(l_name_40, OBJPROP_WIDTH, g_width_460);
if (gd_464 > 1.0) {
l_datetime_56 = 0;
ld_60 = 0;
TLMng_CountExt(gd_464, a_datetime_16, NormalizeDouble(ad_8, Digits), a_datetime_28, NormalizeDouble(ad_20, Digits), l_datetime_56, ld_60);
ObjectMove(l_name_40, 1, l_datetime_56, ld_60);
l_count_68 = 0;
ld_72 = TLMng_CorrectLine(l_name_40, a_datetime_28, NormalizeDouble(ad_20, Digits));
while (ld_72 != 0.0) {
ld_60 += ld_72;
ObjectMove(l_name_40, 1, l_datetime_56, ld_60);
ld_72 = TLMng_CorrectLine(l_name_40, a_datetime_28, NormalizeDouble(ad_20, Digits));
l_count_68++;
if (l_count_68 > 20) break;
}
}
TLMng_CheckNumTL(asa_0, l_name_40, gi_472);
CheckLab();
ObjectsRedraw();
}
}
double TLMng_CorrectLine(string a_name_0, int ai_8, double ad_12) {
if (a_name_0 == "" || ai_8 == 0) return (0);
GetLastError();
double ld_20 = ObjectGetValueByShift(a_name_0, iBarShift(NULL, 0, ai_8, TRUE));
if (GetLastError() > 0/* NO_ERROR */) return (0);
double ld_28 = ld_20 - ad_12;
if (IsInChanel(ld_28, 0, 2.0 * Point) == 1) return (0);
return (-1.0 * ld_28);
}
void TLMng_CheckNumTL(string &asa_0[], string as_4, int ai_12) {
if (as_4 == "" || ai_12 < 0) return;
if (ArraySize(asa_0) + 1 > ai_12) {
if (!ObjectDelete(asa_0[0])) Print("Ошибка удаления линии - ", asa_0[0], " код ошибки - ", GetLastError());
ArrayCopy(asa_0, asa_0, 0, 1);
asa_0[ArraySize(asa_0) - 1] = as_4;
return;
}
ArrayResize(asa_0, ArraySize(asa_0) + 1);
asa_0[ArraySize(asa_0) - 1] = as_4;
}
void TLMng_DeleteAllLines() {
int li_0 = ArrayRange(gsa_440, 0);
if (li_0 > 0) {
for (int l_index_4 = 0; l_index_4 <= li_0 - 1; l_index_4++)
if (ObjectFind(gsa_440[l_index_4]) > -1) ObjectDelete(gsa_440[l_index_4]);
}
ArrayResize(gsa_440, 0);
li_0 = 0;
li_0 = ArrayRange(gsa_444, 0);
if (li_0 > 0) {
for (l_index_4 = 0; l_index_4 <= li_0 - 1; l_index_4++)
if (ObjectFind(gsa_444[l_index_4]) > -1) ObjectDelete(gsa_444[l_index_4]);
}
ArrayResize(gsa_444, 0);
}
void TLMng_DeleteLinesCurrentTF() {
string l_name_4;
string lsa_12[];
int l_objs_total_0 = ObjectsTotal();
if (l_objs_total_0 != 0) {
for (int li_16 = 0; li_16 <= l_objs_total_0 - 1; li_16++) {
l_name_4 = ObjectName(li_16);
if (StringFind(l_name_4, StringConcatenate("Asys_AutoTL_", Period())) > -1) {
ArrayResize(lsa_12, ArraySize(lsa_12) + 1);
lsa_12[ArraySize(lsa_12) - 1] = l_name_4;
}
}
if (ArraySize(lsa_12) > 0) {
for (li_16 = 0; li_16 <= ArraySize(lsa_12) - 1; li_16++)
if (ObjectFind(lsa_12[li_16]) > -1) ObjectDelete(lsa_12[li_16]);
}
}
}
void TLMng_DeleteLinesCurrentInd() {
string l_name_4;
string lsa_12[];
Показано первые 50% кода (символов: 19501)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.