ShamanHand
Наношу добро, причиняю пользу.

 
Уровень 24

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


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

Рейтинг 2146



РЕКОМЕНДУЮ



Переименование линий

Дня доброго!
Прошу написать советника для MT4, который переименовывает линии на графике.

При каждом тике советник находит все горизонтальные линии (OBJ_HLINE) на графике.
В случае, если в имени линии отсутствует текст, задаваемый в настройках, к примеру, «Old», то линия переименовывается.

Алгоритм переименования:
Если линии находятся ВЫШЕ текущей цены, то переименовываются в «hi_1», «hi_2», «hi_3» и так далее, в зависимости от удалённости от текущей цены.
Если линии находятся НИЖЕ текущей цены, то переименовываются в «lo_1», «lo_2», «lo_3» и так далее, в зависимости от удалённости от текущей цены.

Не переименовываются только линии, в названии которых присутствует текст, задаваемый в настройках пользователем, к примеру, «Old».


Также нужно, чтобы линии были подписаны такстовкой так, как это показано на скрине, чтобы не надо было лезть в свойства линии или наводить на неё курсор, дабы узнать её имя.
  • 0
  • Просмотров: 2254
  • 27 августа 2019, 12:52
  • ShamanHand
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Алгоритм переименования:
Если линии находятся ВЫШЕ текущей цены, то переименовываются в «hi_1», «hi_2», «hi_3» и так далее, в зависимости от удалённости от текущей цены.
Если линии находятся НИЖЕ текущей цены, то переименовываются в «lo_1», «lo_2», «lo_3» и так далее, в зависимости от удалённости от текущей цены


вот такой алгоритм я представляю как сделать: над ценой пишем хай + пункты до текущей цены. также с лоу.

если у вас есть мысли как будем объяснять машине ваш алгоритм, поделитесь пожалуйста
avatar

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

  • 27 августа 2019, 18:03
+
0
вот такой алгоритм я представляю как сделать: над ценой пишем хай + пункты до текущей цены. также с лоу.

Прекрасно! Если возможно такое реализовать — замечательно, очень даже подходит.
Но важно, чтобы не только над линией была надпись, а и сама линия аналогично именовалась.

C расстоянием до текущей цены действительно даже интересней выходит. Как-то я сам не подумал, спасибо.

Но хотел бы тогда внести небольшое изменение в техзадание.
Не надо переименовывать при каждом тике.
По сути-то нужно вообще выполнять функцию переименования только при добавлении/удалении объектов.
Надо считать объекты — линии, их количество через ObjectsTotal (Вызываем тотал и сверяем с глобальной), и, если оно изменится, то вызывать функцию переименования.
Т.е. пишем в глобальную переменную крайнее значение количества обьектов, при каждом тике вызываем тотал и сверяем с глобальной, и, если значение отличается, то переименовываем линии и обновляем значение глобальной переменной.
Редактирован: 28 августа 2019, 07:55
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 27 августа 2019, 18:22
+
0
на 5-е
avatar

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

  • 27 августа 2019, 18:28
+
0
Отлично!
Только обратите внимание на небольшое изменение в ТЗ.
Редактирован: 27 августа 2019, 19:16
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 27 августа 2019, 19:16
+
0
avatar

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

  • 28 августа 2019, 18:44
+
0
Андрей, при помещении на график терминал наглухо виснет.
От слова «совсем».
Если есть хоть одна линия — терминал виснет при перетаскивании на график индикатора.
Если закинуть на график без линий, всё нормально, но если затем хоть одну линию добавить — терминал виснет.
Что-то где-то пошло не так…
Кроме того, я просил это в советнике сделать, не в индикаторе.
Редактирован: 29 августа 2019, 13:17
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 28 августа 2019, 23:01
+
+1
я вчера часа 2 потратил только на отладку. так и не удалось сделать чтобы не вис терминал. на мкл еще задам вопрос
avatar

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

  • 29 августа 2019, 16:22
+
+1
сделал первый работоспособный вариант:




input int sdvig=22;
input string nm="old";
input color clr=Red;
//+------------------------------------------------------------------+
//| Put Text Function                                                |
//+------------------------------------------------------------------+
void PutText(string name,string text,double price,datetime time)
  {
   ObjectDelete(0,name);
//--- create a "Text" object 
   ObjectCreate(0,name,OBJ_TEXT,0,time,price);
//--- set the text
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- set the font of the text
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- set the font size
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,11);
//--- set the method binding
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,2);
//--- set the color
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=ObjectsTotal()-1;i>=0;i--)
     {
      if(ObjectType(ObjectName(i))==OBJ_HLINE)
        {
         double pr=ObjectGetDouble(0,ObjectName(i),OBJPROP_PRICE);
         int delta=(int)(MathAbs(Bid-pr)/_Point);

         if(pr>Bid)
           {
            ObjectSetString(0,ObjectName(i),OBJPROP_NAME,"High "+(string)delta);
            PutText("Text"+(string)i,"High "+(string)delta,pr,Time[0]+PeriodSeconds()*sdvig);
           }
         if(pr<Bid)
           {
            ObjectSetString(0,ObjectName(i),OBJPROP_NAME,"Low "+(string)delta);
            PutText("Text"+(string)i,"Low "+(string)delta,pr,Time[0]+PeriodSeconds()*sdvig);
           }
        }
     }
  }
//+------------------------------------------------------------------+


Редактирован: 29 августа 2019, 18:04
avatar

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

  • 29 августа 2019, 17:41
+
0
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 29 августа 2019, 18:56
+
+1
теперь в виде советника: www.opentraders.ru/downloads/2399/



переименовал все линии, линию с заданной надписью не тронул.
avatar

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

  • 29 августа 2019, 18:54
+
0
Да, это уже рабочий вариант, но с огрехами.
Советник перетянул на график, на котором уже были размещены 10 линий.
Четыре из них советник не переименовал.


У некоторых линий подписи при добавлении/удалении линий не удаляются, а новые ставятся поверх


Соответственно, после удаления линии остаётся какая-то текстовка.
Но это самое безобидное, ерунда.

Вот то, что не все линии переименовываются, это печально.

Редактирован: 29 августа 2019, 19:46
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 29 августа 2019, 19:32
+
0
если подвис терминал, заходите в папку с индикатором или советником, удаляете исходник и компил. перезапускаете терминал.
avatar

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

  • 29 августа 2019, 19:02
+
+1
сейчас все обозвал :D  кроме меченой



www.opentraders.ru/downloads/2399/
avatar

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

  • 29 августа 2019, 20:33
+
0
Удалил советника из папки с экспертами. Скачал заново. Перезапустил терминал.
Накидал линий. Закинул советника на график.
Уж не знаю, в чём «прикол», но вот:

Редактирован: 29 августа 2019, 20:48
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 29 августа 2019, 20:48
+
0
значит дальше не ко мне
avatar

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

  • 29 августа 2019, 20:59
+
0
Принято!
Попробую уже сам подшаманить.
Спасибо! И так накалил изрядно, благодарствую.
Редактирован: 29 августа 2019, 21:18
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 29 августа 2019, 21:00
+
0
я сейчас забоем удалял объекты когда не прорисовались. после удаления все линии подписались
avatar

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

  • 29 августа 2019, 21:04
+
0
Ну как видно на скрине, ровно через одну именуются.
Ладно, сам поковыряюсь уже.
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 29 августа 2019, 21:06
+
0
Пришёл к выводу, даже для пользователя удобней на кнопку вывести переименование линий.
И да, для бОльшей эффективности остановился на варианте, где при нажатии баттона сперва удаляются все без исключения OBJ_TEXT, а затем вызывается функция переименования/переподписывания.
Спасибо, Андрей!
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 5 сентября 2019, 17:24
+
0
Может нужно что то другое по пробовать?
Редактирован: 30 августа 2019, 11:50
avatar

  23  igrun Сообщений: 1647 - igrun

  • 30 августа 2019, 09:41
+
0
Ну хоть ты-то со своей имхой в чужое техзадание не лезь.
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 30 августа 2019, 11:45

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