Группа "Стол заказов MQL"

Рейтинг 2151



РЕКОМЕНДУЮ



Индикатор mql4 по фракталам

Добрый день.
Просьба создать индикатор который:
1. Будет строить линии по ближайшим фракталам, лучи которых будут направлены вправо:
— Синие линии по минимумах ближайших нижних фракталов, которые снижаются;
— Красные линии по максимумам ближайших верхних фракталах, которые растут.
2. Если цена не касается линии третий раз и пробивается противоположный фрактал, линия удаляется (линии 1,2,3).
3. Если цена касается третий раз линию синего цвета появляется синяя стрелка вверх (линия 4), если цена касается третий раз линию красного цвета, появляется красная стрелка вниз (линия 5).



4. Линии со стрелками не удаляются с графика, без стрелок удаляются (п.2)
5. Стрелки сделать буферные.

Настройки индикатора:
— Период фрактала;
— К-во баров для отображения линий и стрелок;
— Алерт при появлении стрелки
  • 0
  • Просмотров: 1106
  • 20 июня 2024, 13:05
  • Defort
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
переделать советник
Следующая запись в группе  
Панель доработка
19 июня 2024
21 июня 2024

Брокер для ваших роботов, 15 лет на рынке

Комментарии (5)

+
0
2 линии синюю и красную могу сделать
avatar

  35  AM2 Сообщений: 16384 - Андрей

  • 20 июня 2024, 17:15
+
+1
This comment is no longer available.
Редактирован: 24 июня 2024, 12:45
avatar

  4  MT45PRO Сообщений: 22 - Аккаунт заблокирован

  • 20 июня 2024, 23:55
+
+1
Могу сделать как надо ). УВЫ НЕ БЕСПЛАТНО )

сколько возьмешь? :D 
avatar

  35  AM2 Сообщений: 16384 - Андрей

  • 21 июня 2024, 10:44
+
0
This comment is no longer available.
Редактирован: 24 июня 2024, 12:45
avatar

  4  MT45PRO Сообщений: 22 - Аккаунт заблокирован

  • 23 июня 2024, 21:55
+
0
Линии частично реализовал ChatGPT, остальные условия сможете добавить?
//+------------------------------------------------------------------+
//|                                                     FractalLines |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                        https://www.mql5.com      |
//+------------------------------------------------------------------+
#property strict

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_color1 clrRed
#property indicator_color2 clrBlue
#property indicator_width1 2
#property indicator_width2 2
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID

input int FractalBars = 5;        // Количество баров для расчета фрактала

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    // Удаление всех объектов типа OBJ_TREND при удалении индикатора
    for (int i = ObjectsTotal() - 1; i >= 0; i--)
    {
        string objName = ObjectName(i);
        if (ObjectGetInteger(0, objName, OBJPROP_TYPE) == OBJ_TREND)
        {
            ObjectDelete(objName);
        }
    }
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
{
    // Обрабатываем все бары, начиная с бара с индексом FractalBars до предпоследнего
    for (int i = FractalBars; i < rates_total - 2; i++)
    {
        if (IsFractalUp(i, FractalBars))
        {
            for (int j = i + 1; j < rates_total - 2; j++)
            {
                if (IsFractalUp(j, FractalBars))
                {
                    if (high[i] > high[j])
                    {
                        DrawLine("UpFractal_" + TimeToString(time[i]) + "_" + TimeToString(time[j]), time[j], high[j], time[i], high[i], clrRed);
                    }
                    break;
                }
            }
        }

        if (IsFractalDown(i, FractalBars))
        {
            for (int j = i + 1; j < rates_total - 2; j++)
            {
                if (IsFractalDown(j, FractalBars))
                {
                    if (low[i] < low[j])
                    {
                        DrawLine("DownFractal_" + TimeToString(time[i]) + "_" + TimeToString(time[j]), time[j], low[j], time[i], low[i], clrBlue);
                    }
                    break;
                }
            }
        }
    }

    return(rates_total);
}

//+------------------------------------------------------------------+
//| Function to check if a fractal up                                |
//+------------------------------------------------------------------+
bool IsFractalUp(int i, int bars)
{
    if (i < bars || i >= Bars - bars) return(false);
    for (int k = 1; k <= bars; k++)
    {
        if (High[i] <= High[i - k]) return(false);
    }
    for (int k = 1; k <= bars; k++)
    {
        if (High[i] <= High[i + k]) return(false);
    }
    return(true);
}

//+------------------------------------------------------------------+
//| Function to check if a fractal down                              |
//+------------------------------------------------------------------+
bool IsFractalDown(int i, int bars)
{
    if (i < bars || i >= Bars - bars) return(false);
    for (int k = 1; k <= bars; k++)
    {
        if (Low[i] >= Low[i - k]) return(false);
    }
    for (int k = 1; k <= bars; k++)
    {
        if (Low[i] >= Low[i + k]) return(false);
    }
    return(true);
}

//+------------------------------------------------------------------+
//| Function to draw lines between fractals                          |
//+------------------------------------------------------------------+
void DrawLine(string name, datetime time1, double price1, datetime time2, double price2, color lineColor)
{
    if (ObjectFind(0, name) == -1)
    {
        ObjectCreate(0, name, OBJ_TREND, 0, time1, price1, time2, price2);
        ObjectSetInteger(0, name, OBJPROP_COLOR, lineColor);
        ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, true);
        ObjectSetInteger(0, name, OBJPROP_WIDTH, 1);
    }
    else
    {
        ObjectMove(0, name, 0, time1, price1);
        ObjectMove(0, name, 1, time2, price2);
    }
}
avatar

  6  Defort Автор Сообщений: 9

  • 21 июня 2024, 12:09

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий