mercyr
Вадим

 
Уровень 16

  Торгую в компаниях:


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

Рейтинг 2151



РЕКОМЕНДУЮ



Индикатор уровней...

Всем привет! Андрей мое почтение…
Нужен индикатор построения уровней. Ставим индикатор, на графике появляется кнопка.
Мышкой активизируем кнопку и указываем курсором на чарте место установки индикатора. Строится сетка.
Сетка смещается при движении цены. При активацией центрального уровня перетаскивается мышкой.

Параметры уровней:
Расстояние между уровнями по вертикали.
Количество уровней, их цвет, тип и толщина.
Расстояние от текущей цены и длинна самого уровня в пунктах.
Выбор построения: вверх-вниз, только вверх, только вниз.

Параметры ценовой метки:
Цвет и размер ценовой метки. Отражать/не отражать метку.

  • 0
  • Просмотров: 1733
  • 15 апреля 2023, 13:12
  • mercyr
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник СмартМани v2
Следующая запись в группе  
Безиндикаторный советник-полуавтомат.
14 апреля 2023
16 апреля 2023

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

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

+
+1
на 17-е. то что быстро можно сделать
avatar

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

  • 15 апреля 2023, 14:04
+
0
Вау, спасибки…
avatar

  16  mercyr Автор Сообщений: 82 - Вадим

  • 15 апреля 2023, 14:08
+
+1
когда то делал такие уровни по клику на графике. они также как у вас потом смещались
avatar

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

  • 15 апреля 2023, 14:21
+
+1
пока так. индикатор заглючил, когда казалось что все уже готово. работы много здесь:


//+------------------------------------------------------------------+
//|                                                       Levels.mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

input int step=222;
input int count=5;
input int width=1;

input color clr=Red;

input bool uplev=1;
input bool dnlev=1;
input bool right=1;

datetime t=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,width);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRLabel(string name,datetime time,double price)
  {
//--- создадим текстовую метку
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price);
//--- установим размер метки
   ObjectSetInteger(0,name,OBJPROP_WIDTH,width);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   if(t!=Time[0])
     {
      for(int i=0; i<ObjectsTotal(); i++)
        {
         if(ObjectType(ObjectName(0,i,0,OBJ_ARROW_RIGHT_PRICE)))
           {
            ObjectSetInteger(0,ObjectName(0,i,0,OBJ_ARROW_RIGHT_PRICE),OBJPROP_TIME1,Time[0]+11*PeriodSeconds());
           }

         if(ObjectType(ObjectName(0,i,0,OBJ_TREND)))
           {
            ObjectSetInteger(0,ObjectName(0,i,0,OBJ_TREND),OBJPROP_TIME1,Time[0]);
            ObjectSetInteger(0,ObjectName(0,i,0,OBJ_TREND),OBJPROP_TIME2,Time[0]+11*PeriodSeconds());
           }
        }
      t=Time[0];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
  {
   if(id==CHARTEVENT_CLICK)
     {
      //--- подготовим переменные
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      datetime dt    =0;
      double   price =0;
      int      window=0;

      //--- преобразуем координаты X и Y  в терминах дата/время
      ChartXYToTimePrice(0,x,y,window,dt,price);

      PutTrendLine("null",Time[0],price,Time[0]+11*PeriodSeconds(),price);
      
      if(right)
         PutRLabel("lab",Time[0]+11*PeriodSeconds(),price);

      for(int i=1; i<=count; i++)
        {
         if(uplev)
           {
            PutTrendLine("up"+string(i),Time[0],price+step*_Point*i,Time[0]+11*PeriodSeconds(),price+step*_Point*i);
            
            if(right)
               PutRLabel("ulab"+string(i),Time[0]+11*PeriodSeconds(),price+step*_Point*i);
           }

         if(dnlev)
           {
            PutTrendLine("dn"+string(i),Time[0],price-step*_Point*i,Time[0]+11*PeriodSeconds(),price-step*_Point*i);
            
            if(right)
               PutRLabel("dlab"+string(i),Time[0]+11*PeriodSeconds(),price-step*_Point*i);
           }
        }
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+


avatar

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

  • 17 апреля 2023, 22:25
+
+1
осталось отладить модификацию метки: www.opentraders.ru/downloads/3575/


Редактирован: 18 апреля 2023, 06:04
avatar

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

  • 17 апреля 2023, 23:01
+
+1
avatar

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

  • 18 апреля 2023, 06:58
+
0
Сорри ми, добрался до компа только сейчас! Андрей извините, сразу просьбы:

При движении и кликах мышки по графику уровни перемещаются на новую точку каждый раз.
При удалении самого индикатора, уровни остаются на графике.
И хотелось немного сместить уровни от цены вправо хоть чуть.
avatar

  16  mercyr Автор Сообщений: 82 - Вадим

  • 18 апреля 2023, 22:32
+
+1
avatar

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

  • 19 апреля 2023, 09:07
+
0
Андрей супер! То, что нужно! Остался маленький пустячок.
При удалении индикатора с графика он заодно сносит сторонние объекты
в т.ч. построенные вручную!
avatar

  16  mercyr Автор Сообщений: 82 - Вадим

  • 19 апреля 2023, 13:29
+
+1
что вручную строите?
avatar

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

  • 19 апреля 2023, 13:49
+
0
Вертикальные и горизонтальные линии, стрелочки из МТ4, цифровые метки,
графические объекты, фибо уровни. Стрелки с других индикаторов и т.д.
Если при перезапуске индикаторы возвращают свои метки то все что из МТ4
слетает.
avatar

  16  mercyr Автор Сообщений: 82 - Вадим

  • 19 апреля 2023, 14:13
+
0
Как вариант сделал:
1 — Текущий график



2 — Поставил индикатор



3 — Удалил индикатор



4 — Перезагрузил график


Редактирован: 19 апреля 2023, 14:39
avatar

  16  mercyr Автор Сообщений: 82 - Вадим

  • 19 апреля 2023, 14:29
+
0
avatar

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

  • 19 апреля 2023, 20:47
+
0
Алгоритм индикатора работает идеально, как и планировалось! Тут все просто супер! Идеально 100%!
А вот собирает объекты все равно. Причем в нашем случае в параметрах стоит длинна 11 пунктов.
Вот на этих 11 пунктах от текущей цены он все и сгребает почему то.

График.
Ставим индикатор все собирается на 11 пунктах от текущей цены.
Удаляем индикатор.
Перезагрузили.









Редактирован: 19 апреля 2023, 22:40
avatar

  16  mercyr Автор Сообщений: 82 - Вадим

  • 19 апреля 2023, 22:32
+
+2
как он может собирать лишнее, если удаляет по символам в имени?
проверил. лишнее не удаляет.



на этот топик все. я и так много времени и сил вложил сюда.
avatar

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

  • 21 апреля 2023, 07:45
+
+2
объекты на месте:

avatar

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

  • 21 апреля 2023, 10:32
+
0
Супер! Андрей спасибо! Сегодняшний вариант он просто идеален! Самое то!!!
Вот то, что хотелось то и получилось. 100 пудово! Парни всем рекомендую!
Андрей реально творит стоящие вещи!!!
Редактирован: 21 апреля 2023, 15:39
avatar

  16  mercyr Автор Сообщений: 82 - Вадим

  • 21 апреля 2023, 15:39

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