Удалить трендовую линию

 

Всем привет! Работаю с линиями тренда и столкнулся с проблемой... Не знаю как проверить бары от цены 1 до цены 2 и если Close была выше линии тренда надо удалить линии) Помогите) Спасибо

 

 

привет посмотри может поможет

https://www.mql5.com/ru/forum/101823

"Пересечение" графиком цен линии тренда.
"Пересечение" графиком цен линии тренда.
  • www.mql5.com
Попробовал поискать данную тему на Форуме, но ничего не нашёл. Может быть кто подскажет, обсуждалась ли эта тема...
 

ObjectGetValueByShift

эта функция поможет 

 

Спасибо за отклик, ObjectGetValueByShift я его итак использую)) тренд удаляется когда Close[1] выше линии тренда, но мне надо чтобы удалился когда с цены 1 до цены 2 было Close[] больше линии тренда))

мне нужно проверить не было ли с цены 1 до цены 2 Close выше линии... если да то удалить линию 

 
Aibek Mugiynov:

Спасибо за отклик, ObjectGetValueByShift я его итак использую)) тренд удаляется когда Close[1] выше линии тренда, но мне надо чтобы удалился когда с цены 1 до цены 2 было Close[] больше линии тренда))

мне нужно проверить не было ли с цены 1 до цены 2 Close выше линии... если да то удалить линию 

берите время цены 1 и находите номер бара
также и для цены 2 нужно найти номер бара
затем перебираем все бары между ними и сравниваем закрытие с ценой трендовой линии
нужно условие сошлось - удаляем трендовую линию 

 
Iurii Tokman:

берите время цены 1 и находите номер бара
также и для цены 2 нужно найти номер бара
затем перебираем все бары между ними и сравниваем закрытие с ценой трендовой линии
нужно условие сошлось - удаляем трендовую линию 

Номера баров я узнал, а как перебирать?) можете пример показать? Спасибо
 
Aibek Mugiynov:
Номера баров я узнал, а как перебирать?) можете пример показать? Спасибо
int bar1 = iBarShift(Symbol(),0,Time1);- номер бара первой координаты трендовой линии

int bar2 = iBarShift(Symbol(),0,Time2);- номер бара второй координаты

if(bar1>bar2)//еще нужно проверить есть ли такая трендовая
{
  for(int i=bar1-1; i>bar2; i--)
  {
   if(Close[i]>ObjectGetValueByShift("MyTrendLine",i))
   Delete("MyTrendLine");
  }
}
 
Iurii Tokman:
int bar1 = iBarShift(Symbol(),0,Time1);- номер бара первой координаты трендовой линии

int bar2 = iBarShift(Symbol(),0,Time2);- номер бара второй координаты

if(bar1>bar2)//еще нужно проверить есть ли такая трендовая
{
  for(int i=bar1-1; i>bar2; i--)
  {
   if(Close[i]>ObjectGetValueByShift("MyTrendLine",i))
   Delete("MyTrendLine");
  }
}

Спасибо, но что-то не получается...((


#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/aibekus2012"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//---- input parameters
extern int nPeriod=10;
extern int Limit=300;
///---- int Widners Oscilator
int cnt,nCurBar=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double r1=0,r2=0,r3=0,r4=0,r5=0,r6=0;
   int rt1=0,rt2=0,rt3=0,rt4=0,rt5=0,rt6=0;
   double s1=0,s2=0,s3=0,s4=0,s5=0,s6=0;
   int st1=0,st2=0,st3=0,st4=0,st5=0,st6=0;
//---- Линии сопротивления и поддержки
   if(Bars<Limit) Limit=Bars-nPeriod;
   for(nCurBar=Limit; nCurBar>0; nCurBar--)
     {
      if(Low[nCurBar+(nPeriod-1)/2]==Low[Lowest(NULL,0,MODE_LOW,nPeriod,nCurBar)])
        {
         s6=s5; s5=s4; s4=s3; s3=s2; s2=s1; s1=Low[nCurBar+(nPeriod-1)/2];
         st6=st5; st5=st4; st4=st3; st3=st2; st2=st1; st1=nCurBar+(nPeriod-1)/2;
        
        }
      if(High[nCurBar+(nPeriod-1)/2]==High[Highest(NULL,0,MODE_HIGH,nPeriod,nCurBar)])
        {
         r6=r5; r5=r4; r4=r3; r3=r2; r2=r1; r1=High[nCurBar+(nPeriod-1)/2];
         rt6=rt5; rt5=rt4; rt4=rt3; rt3=rt2; rt2=rt1; rt1=nCurBar+(nPeriod-1)/2;        
        }
     }
  if (r1<r2){
          ObjectSet("Trend UP-0",OBJPROP_TIME1,rt1);
          ObjectSet("Trend UP-0",OBJPROP_TIME2,rt2);
          ObjectSet("Trend UP-0",OBJPROP_PRICE1,r1);
          ObjectSet("Trend UP-0",OBJPROP_PRICE2,r2);
          ObjectSet("Trend UP-0",OBJPROP_COLOR,Blue);
          ObjectCreate("Trend UP-0",OBJ_TREND,0,0,0,1,0);
          ObjectMove("Trend UP-0",1,Time[rt1],r1);
          ObjectMove("Trend UP-0",0,Time[rt2],r2);}

//----
int bar1 = iBarShift(Symbol(),0,rt1);
int bar2 = iBarShift(Symbol(),0,rt2);

  for(int i=bar1-1; i>bar2; i--)
  {
   if(Close[i]>ObjectGetValueByShift("Trend UP-0",i))
  ObjectDelete("Trend UP-0");
  Print ("Удален");
  }
   return(0);
  }
//+------------------------------------------------------------------+
 

о! а вот и код, гадание на бараньей лопатке прекращается...

rt1 и rt2 это у вас int, а не datetime

int bar1 = rt1;
int bar2 = rt2;
 
Iurii Tokman:

о! а вот и код, гадание на бараньей лопатке прекращается...

rt1 и rt2 это у вас int, а не datetime

int bar1 = rt1;
int bar2 = rt2;
))) заменил, но всё равно не перебирает((
 
Aibek Mugiynov:
))) заменил, но всё равно не перебирает((

 нет конечно, вы не делаете проверок,

все должно быть наоборот, так как rt1<rt2 

Причина обращения: