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

 
Как удалять горизонтальные линии с помощью функции deinit  если вручную удалена трендовая линия?
 
JLY:
Как удалять горизонтальные линии с помощью функции deinit  если вручную удалена трендовая линия?

Просматриваем все линии, если линия горизонтальная, ищем трендовую линию, если ее нет, то удаляем горизонтальную.
 
JLY:
Как удалять горизонтальные линии с помощью функции deinit  если вручную удалена трендовая линия?
Так же, как бы если трендовая существует поныне. 
 
Integer:

Просматриваем все линии, если линия горизонтальная, ищем трендовую линию, если ее нет, то удаляем горизонтальную.


А если нужно чтобы удаляло горизонтальные линии с конкретным именем? Ведь на графике могут быть нужные другие горизонтальные которые удалять ненужно.

Я в деинит прописывал удаление горизонтальной по имени, почему то отказывается удалять. Теперь еще и вертикальную нужно чтобы удалаляло.

Посмотрите пожалуста что в коде не так) При передвижении трендовой же удаляет для отрисовки актуальных.

Всем спfсибо за помощь и внимание) 

 

//+------------------------------------------------------------------+
//|                                                     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("VerticalEnd "+val);
      }
   return(0);   
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    obj_total=ObjectsTotal();

  for(int i=0;i<obj_total;i++)
    {

    if(ObjectType(ObjectName(i))==OBJ_TREND){
  
string val=ObjectName(i);
      ObjectDelete("TrendEnd "+val);ObjectDelete("VerticalEnd "+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, false);
   
   double price3=price2HL-(price1HL-price2HL);
   double price4=price3-(price2HL-price3);
   
      int time3=time2HL+(time2HL-time1HL);
   
   double per=0;
 
   ObjectCreate("TrendEnd "+val, OBJ_HLINE,per, 0, price3);
   ObjectSet("TrendEnd "+val, OBJPROP_COLOR, Blue);
   
   ObjectCreate("VerticalEnd "+val, OBJ_VLINE,per, time3, 0);
   ObjectSet("VerticalEnd "+val, OBJPROP_COLOR, Blue);
   ObjectSet("VerticalEnd "+val, OBJPROP_STYLE, STYLE_DOT);
}    
}
   return(0);
  }
//+------------------------------------------------------------------+
Файлы:
 
JLY:


А если нужно чтобы удаляло горизонтальные линии с конкретным именем? Ведь на графике могут быть нужные другие горизонтальные которые удалять ненужно.

Я в деинит прописывал удаление горизонтальной по имени, почему то отказывается удалять. Теперь еще и вертикальную нужно чтобы удалаляло.

Посмотрите пожалуста что в коде не так) При передвижении трендовой же удаляет для отрисовки актуальных.

Всем спfсибо за помощь и внимание) 

 

 


Попробуйте так :

// ==============  DelObj ===================

void DelObj(string txtPart)
   {
   string lbl;
   for(int i = ObjectsTotal() - 1; i >= 0; i--)
      {
      lbl = ObjectName(i);
      if(StringFind(lbl, txtPart, 0)>-1) ObjectDelete(lbl);
      }
   return;
   }
 
JLY:


А если нужно чтобы удаляло горизонтальные линии с конкретным именем? Ведь на графике могут быть нужные другие горизонтальные которые удалять ненужно.

...


Делать проверку соответствующую. Нашли горизонтальную линию, выделили из нее какой-то признак (может цвет, может какие буквы в имени), потом ищем трендовые линии с таким же признаком.
 

Спасибо всем)

Такое удаление наверно не нужно будет, т.к. хочу подумать над тем чтобы сразу рисовались линии по сигналам фрактала. А там нужно будет все не актуальные объекты удалять разом.

Вопрос такой. Как сделать отрисовку по сигналам фрактала? Есть 4 варианта построений, как на картинке, это 2 линии отбоя (сверху и снизу) и 2 линии тренда флэта (восходящая и нисходящая). По этому типовому построению линий по идее должно рисовать по фракталам, в массовом количестве.

Для начала, как вообще рисовать линию тренда по сигналам фрактала?) 

Код.

//+------------------------------------------------------------------+
//|                                                     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()
  {

   return(0);   
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    obj_total=ObjectsTotal();
  for(int i=0;i<obj_total;i++)
    {
    if(ObjectType(ObjectName(i))==OBJ_TREND){ //Захват только для трендовой линии
string val=ObjectName(i);
    // Забираем координаты
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, Red);
   ObjectSet(val, OBJPROP_BACK, true);
    //Забираем кординаты новой линии тренда  
double price1NEW=ObjectGet(val, OBJPROP_PRICE1);
double price2NEW=ObjectGet(val, OBJPROP_PRICE2);
double time1NEW=ObjectGet(val, OBJPROP_TIME1);
double time2NEW=ObjectGet(val, OBJPROP_TIME2);
    //--------------------------------------
   ObjectSet(val, OBJPROP_COLOR, Blue);
   ObjectSet(val, OBJPROP_BACK, false);
   //Расчет цены и времени 3-й точки ("окончания" линии тренда)
   double price3=price2NEW-(price1NEW-price2NEW);
   int time3=time2NEW+(time2NEW-time1NEW);
  //---------------------------------------
   double per=0;//Период графика
string time=TimeToStr(time3,TIME_DATE|TIME_SECONDS);//Перевод времени для описания "конца" трендовой линии
//Удаление не актуальных линий
   ObjectDelete("TrendEnd "+val);
   ObjectDelete("ExtremumOtboi "+val);ObjectDelete("ExtremumFlet "+val);
   ObjectDelete("TargetYellow "+val);ObjectDelete("TargetBlue "+val);
   ObjectDelete("TargetCentrYellow "+val);ObjectDelete("TargetCentrBlue "+val);
   ObjectDelete("FletCentrYellow "+val);ObjectDelete("FletCentrBlue "+val);
//-------------------------------------
//Отрисовка "конца" трендовой линии
   ObjectCreate("TrendEnd "+val, OBJ_ARROW,per, time3, price3);
   ObjectSetText("TrendEnd "+val, "Конец - "+time, 10, "Times New Roman", Green);
   ObjectSet("TrendEnd "+val, OBJPROP_COLOR, Red);
   ObjectSet("TrendEnd "+val, OBJPROP_ARROWCODE, 86);
//Перевод времени в бары
  datetime time01=time1NEW;datetime time02=time2NEW;
  int shift01=iBarShift(0,0,time01);int shift02=iBarShift(0,0,time02);
//Расчет экстремумов, уровней и целей  
int timeCHANGE=shift01-shift02;
 int timeExtrem;int timeExtrem2;
  double priceExtrem;double priceExtrem2;
   double priceCorrect;double priceCorrect2;
    double priceTarget;double priceTarget2;
     double priceFletCentr;double priceFletCentr2;
      double priceTargetCentr;double priceTargetCentr2;
    
  if (price2NEW>price1NEW){ //Вторая ценовая точка линии выше первой
  priceCorrect=Low[iLowest(NULL,0,MODE_LOW,timeCHANGE-1,shift02+1)];
if (priceCorrect<price1NEW){
timeExtrem=0;priceExtrem=0;//Удаление ненужных объектов
}else
timeExtrem=Time[iHighest(NULL,0,MODE_HIGH,timeCHANGE-1,shift02+1)];
priceExtrem=High[iHighest(NULL,0,MODE_HIGH,timeCHANGE-1,shift02+1)];
  priceTarget=priceExtrem+(priceExtrem-price2NEW);
   priceFletCentr=(priceExtrem+price2NEW)/2;
    priceTargetCentr=priceExtrem+((priceExtrem-price2NEW)/2);
}else if (price2NEW<price1NEW){ //Первая ценовая точка линии выше второй
priceCorrect=High[iHighest(NULL,0,MODE_HIGH,timeCHANGE-1,shift02+1)];
if (priceCorrect>price1NEW){
timeExtrem=0;priceExtrem=0;//Удаление ненужных объектов
}else
timeExtrem=Time[iLowest(NULL,0,MODE_LOW,timeCHANGE-1,shift02+1)];
priceExtrem=Low[iLowest(NULL,0,MODE_LOW,timeCHANGE-1,shift02+1)];
  priceTarget=priceExtrem-(price2NEW-priceExtrem);
   priceFletCentr=(priceExtrem+price2NEW)/2;
    priceTargetCentr=priceExtrem+((priceExtrem-price2NEW)/2);
}
    
  //--------------------------------------------  
  
  if (price2NEW<price1NEW){ //Первая ценовая точка линии выше второй
    priceCorrect2=Low[iLowest(NULL,0,MODE_LOW,timeCHANGE-1,shift02+1)];
if (price2NEW>priceCorrect2){
timeExtrem2=0;priceExtrem2=0;//Удаление ненужных объектов
}else
timeExtrem2=Time[iHighest(NULL,0,MODE_HIGH,timeCHANGE-1,shift02+1)];
priceExtrem2=High[iHighest(NULL,0,MODE_HIGH,timeCHANGE-1,shift02+1)];
  priceTarget2=priceExtrem2+(priceExtrem2-price2NEW);
   priceFletCentr2=(priceExtrem2+price2NEW)/2;
    priceTargetCentr2=priceExtrem2+((priceExtrem2-price2NEW)/2);
}else if (price2NEW>price1NEW){ //Вторая ценовая точка линии выше первой
    priceCorrect2=High[iHighest(NULL,0,MODE_HIGH,timeCHANGE-1,shift02+1)];
if (priceCorrect2>price1NEW){
timeExtrem2=0;priceExtrem2=0;//Удаление ненужных объектов
}else
timeExtrem2=Time[iLowest(NULL,0,MODE_LOW,timeCHANGE-1,shift02+1)];
priceExtrem2=Low[iLowest(NULL,0,MODE_LOW,timeCHANGE-1,shift02+1)];
  priceTarget2=priceExtrem2+(priceExtrem2-price2NEW);
   priceFletCentr2=(priceExtrem2+price2NEW)/2;
    priceTargetCentr2=priceExtrem2+((priceExtrem2-price2NEW)/2);
}
//------------------------------
//-------------------------------------------------------------------------
//Отрисовка экстремумов, уровней и целей
   ObjectCreate("ExtremumFlet "+val, OBJ_ARROW,per, timeExtrem, priceExtrem);
   ObjectSet("ExtremumFlet "+val, OBJPROP_COLOR, Blue);
   ObjectSet("ExtremumFlet "+val, OBJPROP_ARROWCODE, 161);
   
   ObjectCreate("ExtremumOtboi "+val, OBJ_ARROW,per, timeExtrem2, priceExtrem2);
   ObjectSet("ExtremumOtboi "+val, OBJPROP_COLOR, Yellow);
   ObjectSet("ExtremumOtboi "+val, OBJPROP_ARROWCODE, 162);
   
   ObjectCreate("TargetBlue "+val, OBJ_ARROW,per, timeExtrem, priceTarget);
   ObjectSet("TargetBlue "+val, OBJPROP_COLOR, Blue);
   ObjectSet("TargetBlue "+val, OBJPROP_ARROWCODE, 164);
     
   ObjectCreate("TargetYellow "+val, OBJ_ARROW,per, timeExtrem2, priceTarget2);
   ObjectSet("TargetYellow "+val, OBJPROP_COLOR, Yellow);
   ObjectSet("TargetYellow "+val, OBJPROP_ARROWCODE, 164);
   
   ObjectCreate("FletCentrBlue "+val, OBJ_ARROW,per, timeExtrem, priceFletCentr);
   ObjectSet("FletCentrBlue "+val, OBJPROP_COLOR, Blue);
   ObjectSet("FletCentrBlue "+val, OBJPROP_ARROWCODE, 117);
   
   ObjectCreate("FletCentrYellow "+val, OBJ_ARROW,per, timeExtrem2, priceFletCentr2);
   ObjectSet("FletCentrYellow "+val, OBJPROP_COLOR, Yellow);
   ObjectSet("FletCentrYellow "+val, OBJPROP_ARROWCODE, 117);
   
   ObjectCreate("TargetCentrBlue "+val, OBJ_ARROW,per, timeExtrem, priceTargetCentr);
   ObjectSet("TargetCentrBlue "+val, OBJPROP_COLOR, Blue);
   ObjectSet("TargetCentrBlue "+val, OBJPROP_ARROWCODE, 117);
     
   ObjectCreate("TargetCentrYellow "+val, OBJ_ARROW,per, timeExtrem2, priceTargetCentr2);
   ObjectSet("TargetCentrYellow "+val, OBJPROP_COLOR, Yellow);
   ObjectSet("TargetCentrYellow "+val, OBJPROP_ARROWCODE, 117);
//---------------------------------------------------------------------------------------------      
}   /*Comment("max ",priceExtrem+price2NEW);*/

}
   return(0);
  }
//+------------------------------------------------------------------+
Файлы:
 

Последняя версия где удаление совершается, если трендовой линии нет. Вот так ObjectsDeleteAll(0, OBJ_ARROW); Всем спасибо) 

Файлы:
 
Как нарисовать по точкам фрактала трендовую линию, во множестве?
 
Что значит, во множестве?