autotrendlines_v2.01_alert@lifeindreamsworld.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «autotrendlines_v2.01_alert@lifeindreamsworld.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для MetaTrader 5, автоматически рассчитывающий и отображающий трендовые линии поддержки и сопротивления на графике. Использует три набора настраиваемых параметров для построения линий, что позволяет одновременно отслеживать несколько уровней. Поддерживает два метода определения линий: по двум экстремумам и по экстремуму с дельтой. Имеет интерактивные кнопки на графике для включения и выключения отображения линий и системы уведомлений.
Настройки программы
| Настройка | Описание |
|---|---|
| Line type (InpLineType) | Тип линии — Выбор метода построения линий: по двум экстремумам или по экстремуму и дельте |
| Set1: Left extremum side (InpLeftExmSide1) | Набор 1: сторона левого экстремума — Количество баров для поиска левого экстремума в первом наборе |
| Set1: Right extremum side (InpRightExmSide1) | Набор 1: сторона правого экстремума — Количество баров для поиска правого экстремума в первом наборе |
| Set1: Offset from current bar (InpFromCurrent1) | Набор 1: смещение от текущего бара — Смещение правой точки линии от текущего бара в первом наборе |
| Set2: Left extremum side (InpLeftExmSide2) | Набор 2: сторона левого экстремума — Количество баров для поиска левого экстремума во втором наборе |
| Set2: Right extremum side (InpRightExmSide2) | Набор 2: сторона правого экстремума — Количество баров для поиска правого экстремума во втором наборе |
| Set2: Offset from current bar (InpFromCurrent2) | Набор 2: смещение от текущего бара — Смещение правой точки линии от текущего бара во втором наборе |
| Set3: Left extremum side (InpLeftExmSide3) | Набор 3: сторона левого экстремума — Количество баров для поиска левого экстремума в третьем наборе |
| Set3: Right extremum side (InpRightExmSide3) | Набор 3: сторона правого экстремума — Количество баров для поиска правого экстремума в третьем наборе |
| Set3: Offset from current bar (InpFromCurrent3) | Набор 3: смещение от текущего бара — Смещение правой точки линии от текущего бара в третьем наборе |
| Account for bar before extremum (InpPrevExmBar) | Учёт бара перед экстремумом — Включает или отключает корректировку с учётом бара, предшествующего найденному экстремуму |
| Maximum bars to look back (InpMaxLookback) | Максимальный откат — Максимальное количество баров назад для поиска экстремумов |
| Alert offset (% of price) (InpAlertOffset) | Смещение оповещения — Процент от текущей цены, в пределах которого срабатывает уведомление при приближении к линии |
| Lines width (InpLinesWidth) | Ширина линий — Толщина отображаемых трендовых линий |
| Set1: Support color (InpSupColor1) | Набор 1: цвет поддержки — Цвет линии поддержки для первого набора |
| Set1: Resistance color (InpResColor1) | Набор 1: цвет сопротивления — Цвет линии сопротивления для первого набора |
| Set2: Support color (InpSupColor2) | Набор 2: цвет поддержки — Цвет линии поддержки для второго набора |
| Set2: Resistance color (InpResColor2) | Набор 2: цвет сопротивления — Цвет линии сопротивления для второго набора |
| Set3: Support color (InpSupColor3) | Набор 3: цвет поддержки — Цвет линии поддержки для третьего набора |
| Set3: Resistance color (InpResColor3) | Набор 3: цвет сопротивления — Цвет линии сопротивления для третьего набора |
| Distance from right edge (InpButtonXOffset) | Смещение кнопок по горизонтали — Расстояние кнопок управления от правого края графика |
| Distance from bottom edge (InpButtonYOffset) | Смещение кнопок по вертикали — Расстояние кнопок управления от нижнего края графика |
| Space between buttons (InpButtonSpacing) | Интервал между кнопками — Вертикальный промежуток между кнопками включения линий и оповещений |
Поиск по коду файла
#property version "2.01"
#property description "Automatic trend lines - 3 sets (Alert Fixed)"
#property indicator_chart_window
#property indicator_plots 0
enum ENUM_LINE_TYPE {
EXM_EXM, // 1: By 2 extremums
EXM_DELTA // 2: Extremum and delta
};
class CPoint {
private:
double price;
datetime time;
public:
CPoint();
CPoint(const double p, const datetime t);
~CPoint() {};
void setPoint(const double p, const datetime t);
bool operator==(const CPoint &other) const;
bool operator!=(const CPoint &other) const;
void operator=(const CPoint &other);
double getPrice() const;
datetime getTime() const;
};
CPoint::CPoint(void) {
price = 0;
time = 0;
}
CPoint::CPoint(const double p, const datetime t) {
price = p;
time = t;
}
void CPoint::setPoint(const double p, const datetime t) {
price = p;
time = t;
}
bool CPoint::operator==(const CPoint &other) const {
return price == other.price && time == other.time;
}
bool CPoint::operator!=(const CPoint &other) const {
return !operator==(other);
}
void CPoint::operator=(const CPoint &other) {
price = other.price;
time = other.time;
}
double CPoint::getPrice(void) const {
return(price);
}
datetime CPoint::getTime(void) const {
return(time);
}
CPoint curLeftSup[3], curRightSup[3], curLeftRes[3], curRightRes[3], nullPoint;
input ENUM_LINE_TYPE InpLineType = EXM_DELTA;// Line type
input int InpLeftExmSide1 = 10; // Set1: Left extremum side
input int InpRightExmSide1 = 3; // Set1: Right extremum side
input int InpFromCurrent1 = 3; // Set1: Offset from current bar
input int InpLeftExmSide2 = 50; // Set2: Left extremum side
input int InpRightExmSide2 = 3; // Set2: Right extremum side
input int InpFromCurrent2 = 3; // Set2: Offset from current bar
input int InpLeftExmSide3 = 100; // Set3: Left extremum side
input int InpRightExmSide3 = 6; // Set3: Right extremum side
input int InpFromCurrent3 = 6; // Set3: Offset from current bar
input bool InpPrevExmBar = false; // Account for bar before extremum
input int InpMaxLookback = 5000; // Maximum bars to look back
input double InpAlertOffset = 0.01; // Alert offset (% of price)
input int InpLinesWidth = 1; // Lines width
input color InpSupColor1 = clrRed; // Set1: Support color
input color InpResColor1 = clrBlue; // Set1: Resistance color
input color InpSupColor2 = clrOrangeRed; // Set2: Support color
input color InpResColor2 = clrDodgerBlue; // Set2: Resistance color
input color InpSupColor3 = clrDarkRed; // Set3: Support color
input color InpResColor3 = clrNavy; // Set3: Resistance color
input int InpButtonXOffset = 140; // Distance from right edge
input int InpButtonYOffset = 50; // Distance from bottom edge
input int InpButtonSpacing = 40; // Space between buttons
int minRequiredBars[3];
bool showLines = true;
bool alertsEnabled = false;
datetime lastAlertTime = 0;
string btnShowLines = "btnShowLines";
string btnAlerts = "btnAlerts";
int OnInit() {
// код доступен только после оплаты
}
void OnDeinit(const int reason) {
ObjectsDeleteAll(0, 0, OBJ_TREND);
ObjectDelete(0, btnShowLines);
ObjectDelete(0, btnAlerts);
}
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {
if(id == CHARTEVENT_OBJECT_CLICK) {
if(sparam == btnShowLines) {
showLines = !showLines;
ObjectSetString(0, btnShowLines, OBJPROP_TEXT, showLines ? "Lines: ON" : "Lines: OFF");
ObjectSetInteger(0, btnShowLines, OBJPROP_BGCOLOR, showLines ? clrGreen : clrRed);
for(int i = 0; i < 3; i++) {
ObjectSetInteger(0, "Current_Support_" + IntegerToString(i+1), OBJPROP_TIMEFRAMES, showLines ? OBJ_ALL_PERIODS : OBJ_NO_PERIODS);
ObjectSetInteger(0, "Current_Resistance_" + IntegerToString(i+1), OBJPROP_TIMEFRAMES, showLines ? OBJ_ALL_PERIODS : OBJ_NO_PERIODS);
}
ObjectSetInteger(0, btnShowLines, OBJPROP_STATE, false);
ChartRedraw();
}
else if(sparam == btnAlerts) {
alertsEnabled = !alertsEnabled;
ObjectSetString(0, btnAlerts, OBJPROP_TEXT, alertsEnabled ? "Alerts: ON" : "Alerts: OFF");
ObjectSetInteger(0, btnAlerts, OBJPROP_BGCOLOR, alertsEnabled ? clrGreen : clrRed);
ObjectSetInteger(0, btnAlerts, OBJPROP_STATE, false);
ChartRedraw();
}
}
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// код доступен только после оплаты
}
int leftIndex, rightIndex;
double delta, tmpDelta;
int leftSides[3], rightSides[3], fromCurrents[3];
leftSides[0] = InpLeftExmSide1;
rightSides[0] = InpRightExmSide1;
fromCurrents[0] = InpFromCurrent1;
leftSides[1] = InpLeftExmSide2;
rightSides[1] = InpRightExmSide2;
fromCurrents[1] = InpFromCurrent2;
leftSides[2] = InpLeftExmSide3;
rightSides[2] = InpRightExmSide3;
fromCurrents[2] = InpFromCurrent3;
for(int set = 0; set < 3; set++) {
if ( rates_total < minRequiredBars[set] ) {
continue;
}
}
if ( prev_calculated != rates_total ) {
for(int set = 0; set < 3; set++) {
if ( rates_total < minRequiredBars[set] ) continue;
switch ( InpLineType ) {
case EXM_DELTA: {
leftIndex = rates_total - leftSides[set] - 2;
int maxLeftIndex = MathMax(minRequiredBars[set], rates_total - InpMaxLookback);
for ( ; !isLowestLow(leftIndex, leftSides[set], low) && leftIndex > maxLeftIndex; leftIndex-- );
curLeftSup[set].setPoint(low[leftIndex], time[leftIndex]);
rightIndex = rates_total - fromCurrents[set] - 2;
delta = (low[rightIndex] - low[leftIndex]) / (rightIndex - leftIndex);
int tmpLeftIndex = leftIndex;
if ( !InpPrevExmBar ) {
tmpLeftIndex += 1;
}
for ( int tmpIndex = rightIndex - 1; tmpIndex > tmpLeftIndex; tmpIndex-- ) {
tПоказано первые 50% кода (символов: 10466)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.