Захват трендовой линии (индикатор)

 

Нужна помощь, спасибо)

Как сделать чтобы если я рисую стандартную трендовую линию (вручную), найти ее, изменить ей имя и цвет?)

Нужно чтобы в этом индикаторе это работало.

Всех благ!) 

Файлы:
 
Если трендовая линия нарисована вручную, терминал дает ей имя начинающееся с "Trendline". Значит индикатор должен просматривать все графические объекты, если тип трендовая линия и имя начинается с "Trendline", значит забираем в переменные параметры этой линии (координаты), удаляем ее и вместо нее создаем новую с другим именем и параметрами из переменных.
 

Спасибо.

Сделал захват для одной линии. Не получается для множества)

//+------------------------------------------------------------------+
//|                                                     TrendEnd.mq4 |
//|                                                    JesusLovesYou |
//|                                                                0 |
//+------------------------------------------------------------------+
#property copyright "JesusLovesYou"
#property link      ""

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
ObjectDelete("TrendEnd");ObjectDelete("FletEnd");
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    obj_total=ObjectsTotal();
  string name;
  for(int i=0;i<obj_total;i++)
    {
     name=ObjectName(i);

ObjectDelete("TrendEnd");ObjectDelete("FletEnd");
 
double price1=ObjectGet(ObjectName(i), OBJPROP_PRICE1);
double price2=ObjectGet(ObjectName(i), OBJPROP_PRICE2);

double time1=ObjectGet(ObjectName(i), OBJPROP_TIME1);
double time2=ObjectGet(ObjectName(i), OBJPROP_TIME2);

   ObjectSet(ObjectName(i), OBJPROP_COLOR, Yellow);
   ObjectSet(ObjectName(i), OBJPROP_BACK, true);
   
   ObjectDelete(ObjectName(i));

   ObjectCreate("TL", OBJ_TREND,0, time1, price1, time2, price2);
   ObjectSet("TL", OBJPROP_COLOR, Yellow);
   ObjectSet("TL", OBJPROP_BACK, true);
   
double price1HL=ObjectGet("TL", OBJPROP_PRICE1);
double price2HL=ObjectGet("TL", OBJPROP_PRICE2);

double time1HL=ObjectGet("TL", OBJPROP_TIME1);
double time2HL=ObjectGet("TL", OBJPROP_TIME2);

   ObjectSet("TL", OBJPROP_COLOR, Blue);
   ObjectSet("TL", OBJPROP_BACK, true);
   
   double price3=price2HL-(price1HL-price2HL);
   double price4=price3-(price2HL-price3);
   
   double per=0;

   ObjectCreate("TrendEnd", OBJ_HLINE,per, 0, price3);
   ObjectSet("TrendEnd", OBJPROP_COLOR, Blue);
   
   ObjectCreate("FletEnd", OBJ_HLINE,per, 0, price4);
   ObjectSet("FletEnd", OBJPROP_COLOR, Blue);
   ObjectSet("FletEnd", OBJPROP_STYLE, STYLE_DOT);
   
//----
}
   return(0);
  }
//+------------------------------------------------------------------+
Файлы:
 

Надо как-то определять уникальное имя для создаваемой линии, а то всем линям пытаетесь давать одно имя - "TL".

Как-нибудь так:

string on="TL"; 

int n=1; 

while(ObjectFind("TL"+n)!=-1) {

 n++;
}

on="TL"+n;
Или не менять имя линии, не удалять ее, а добавить описание - ObjectSetText(). Получить описание можно функцией ObjectDescription(). Если описания нет, значит это новая линия, меняем цвет и добавляем описание.
 
ObjectName(i); это для всех объектов, вертикальных, горизонтальных и трендовых. Как изначально искать объект с именем который есть только трендовая линия?
 

Получилось. Спасибо)

 

//+------------------------------------------------------------------+
//|                                                     TrendEnd.mq4 |
//|                                                    JesusLovesYou |
//|                                                                0 |
//+------------------------------------------------------------------+
#property copyright "JesusLovesYou"
#property link      ""

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
     int    obj_total=ObjectsTotal();
  for(int i=0;i<obj_total;i++)
    {
string val=ObjectName(i);
ObjectDelete("TrendEnd "+val);ObjectDelete("FletEnd "+val);
   return(0);
   }
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    obj_total=ObjectsTotal();
  string name;
  for(int i=0;i<obj_total;i++)
    {
    name=ObjectName(i);
    if(ObjectType(ObjectName(i))==OBJ_TREND){
       
string val=ObjectName(i);
ObjectDelete("TrendEnd "+val);ObjectDelete("FletEnd "+val);
 
double price1=ObjectGet(ObjectName(i), OBJPROP_PRICE1);
double price2=ObjectGet(ObjectName(i), OBJPROP_PRICE2);

double time1=ObjectGet(ObjectName(i), OBJPROP_TIME1);
double time2=ObjectGet(ObjectName(i), OBJPROP_TIME2);

   ObjectSet(ObjectName(i), OBJPROP_COLOR, Yellow);
   ObjectSet(ObjectName(i), OBJPROP_BACK, true);
   

    
   ObjectCreate(val, OBJ_TREND,0, time1, price1, time2, price2);
   ObjectSet(val, OBJPROP_COLOR, Yellow);
   ObjectSet(val, OBJPROP_BACK, true);
   

   
double price1HL=ObjectGet(val, OBJPROP_PRICE1);
double price2HL=ObjectGet(val, OBJPROP_PRICE2);

double time1HL=ObjectGet(val, OBJPROP_TIME1);
double time2HL=ObjectGet(val, OBJPROP_TIME2);


   
   ObjectSet(val, OBJPROP_COLOR, Blue);
   ObjectSet(val, OBJPROP_BACK, true);
   

   double price3=price2HL-(price1HL-price2HL);
   double price4=price3-(price2HL-price3);
   
   double per=0;

string val2=val;

   ObjectCreate("TrendEnd "+val2, OBJ_HLINE,per, 0, price3);
   ObjectSet("TrendEnd "+val2, OBJPROP_COLOR, Blue);
   
   ObjectCreate("FletEnd "+val2, OBJ_HLINE,per, 0, price4);
   ObjectSet("FletEnd "+val2, OBJPROP_COLOR, Blue);
   ObjectSet("FletEnd "+val2, OBJPROP_STYLE, STYLE_DOT);
   
} 
//----
}
   return(0);
  }
//+------------------------------------------------------------------+
Файлы:
 
Если у кого нибудь возникнет вопрос зачем этот индикатор смотрите описание метода по ссылке в коде.
 
Как сделать чтобы каждой группе из трех линий (трендовая + 2 горизонтальные) автоматически задавать произвольный цвет, чтобы их отличать в скоплении?
 
JLY: Как изначально искать объект с именем который есть только трендовая линия?

Есть такая функция ObjectType(). Проверять - if(ObjectType()==OBJ_TREND){...
 
JLY:
Как сделать чтобы каждой группе из трех линий (трендовая + 2 горизонтальные) автоматически задавать произвольный цвет, чтобы их отличать в скоплении?


По какому принципу выполняется группировка? Наверно по порядку создания? Можно выделить массив из трех элементов и складывать в него типы создаваемых линий. Если в массиве есть одна трендовая линия и две горизонтальных, то очищять его и при этом как-нибудь получать новый цвет для дельнейшего использования. Но только это как-то... не знаю на сколько практически удобно. 

В лучшем случае было бы хорошо создать что-то типа панели инструментов с трендовой линией, горизонтальной линией и палитрой. Берешь с панели нужню линию, окрашена она выбранным цветом, по мере надобности меняешь цвет.

 
Спасибо, подумаю)