Отследить пробой косой линии

 

Подскажите как можно отследить пробой наклонной.

На данный момент пробовала сделать так:

Отнять от верхней точки нижнюю точку и разделить

naklon = (Hight - Open/delitel) + Open

if (Close[i] > naklon) 

Однако в некоторых местах высота больше, где-то меньше...

А по сути (по задумке) нужно отследить пробитие наклонной.
Однако пока моих знаний не достаточно.

Наклонная рисуется графически.
Но это на стадии разработке, возможно нужно вообще иначе, поэтому и прошу совета, так как пока даже не понимаю в каком направлении мыслить.
Была задумка, нарисовать буферную наклонную, но не получается.
Может быть подскажите как лучше это сделать (отследить пробитие или нарисовать буферную наклонную)

 
Natalya Smirnova:

Подскажите как можно отследить пробой наклонной.

На данный момент пробовала сделать так:

Отнять от верхней точки нижнюю точку и разделить

Однако в некоторых местах высота больше, где-то меньше...

А по сути (по задумке) нужно отследить пробитие наклонной.
Однако пока моих знаний не достаточно.

Наклонная рисуется графически.
Но это на стадии разработке, возможно нужно вообще иначе, поэтому и прошу совета, так как пока даже не понимаю в каком направлении мыслить.
Была задумка, нарисовать буферную наклонную, но не получается.
Может быть подскажите как лучше это сделать (отследить пробитие или нарисовать буферную наклонную)

при установке линии, цена в буфере = откуда_ведём. далее на каждом следующем баре цена=цена_на_пред_баре + delta

 
Natalya Smirnova:

Подскажите как можно отследить пробой наклонной.

по сути нужно отследить пробитие наклонной.
Однако пока моих знаний не достаточно.

Может быть подскажите как лучше это сделать (отследить пробитие или нарисовать буферную наклонную)

Как-то так можно отследить пробитие линии

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick(void)
  {
// Условие пересечения линии вверх текущей ценой открытия
   double PriceBar0 = PriceLine(TimeTochka1, PriceTochka1, TimeTochka2, PriceTochka2, 0);
   double PriceBar1 = PriceLine(TimeTochka1, PriceTochka1, TimeTochka2, PriceTochka2, 1);
   bool   SignalBuy=false;   
   if(PriceBar0>0 && PriceBar1>0 && Open[0]>PriceBar0 && Open[1]<=PriceBar1) SignalBuy=true;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double PriceLine(datetime t1, double p1, datetime t2, double p2, int bar){
   double kKoef = 0.0, price=0.0;
   double bKoef = Koeff(iBarShift(NULL,0,t1), p1, iBarShift(NULL,0,t2), p2, kKoef);
   if(bKoef == DBL_MAX) return;

// Цена линии на N-баре (bar=0 текущий бар, =1 предыдущий бар)
   int BarIndex = bar;
       price=kKoef*BarIndex+bKoef;
return(price);}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Koeff(int x1, double y1, int x2, double y2, double &kKoef){
   if (x1==x2) return(DBL_MAX);     
       kKoef=(y2-y1)/(x2-x1);
return(y1 - kKoef * x1);}
//+------------------------------------------------------------------+
 
Natalya Smirnova:

Подскажите как можно отследить пробой наклонной.

На данный момент пробовала сделать так:

Отнять от верхней точки нижнюю точку и разделить

Однако в некоторых местах высота больше, где-то меньше...

А по сути (по задумке) нужно отследить пробитие наклонной.
Однако пока моих знаний не достаточно.

Наклонная рисуется графически.
Но это на стадии разработке, возможно нужно вообще иначе, поэтому и прошу совета, так как пока даже не понимаю в каком направлении мыслить.
Была задумка, нарисовать буферную наклонную, но не получается.
Может быть подскажите как лучше это сделать (отследить пробитие или нарисовать буферную наклонную)

Посмотрите этот код. Там всё есть.

TralingLine
TralingLine
  • www.mql5.com
Виртуальный Stop Loss или Trailing Stop.
 

Вот так можно в МТ4: 

// Поиск точки пробоя линии на графике
void fLineBreak(string Name               // Имя линии
               ,int& Bar1,double& Price1  // Точка начала
               ,int& Bar2,double& Price2  // Точка касания
               ,int& Bar3,double& Price3  // Точка пробоя
               ,double& Speed){           // Наклон линии
   datetime Time1, Time2;
   int Type;
   Bar1=LastBar-1;
   Bar2=LastBar-1;
   Bar3=LastBar-1;
   Price1=0;
   Price2=0;
   Price3=0;
   Speed=0;
   if( ObjectFind(Name)!=0 ){
      if( РежимОтладки ) Print("***   "+Name+" не найден");
      return;
   }
   Time1=ObjectGet(Name,OBJPROP_TIME1);
   Bar1=iBarShift(NULL,0,Time1);
   Price1=ObjectGet(Name,OBJPROP_PRICE1);
   Type=ObjectType(Name);
   switch( Type ){
      case  OBJ_TREND   :  // Наклонная линия(основной тип)
                           Time2=ObjectGet(Name,OBJPROP_TIME2);
                           Bar2=iBarShift(NULL,0,Time2);
                           Price2=ObjectGet(Name,OBJPROP_PRICE2);
                           break;
      case  OBJ_HLINE   :  // Горизонтальная линия
                           Bar2=LastBar;
                           Time2=Time[Bar2];
                           Price2=Price1;
                           break;
      default           :  // Необрабатываемый объект
                           Print("***   "+Name+" недопустимый тип: "+Type);
                           return;
   }
   if( Bar1<=Bar2
    || Bar1<=LastBar
    || Bar2<LastBar
    || Price1<Zero
    || Price2<Zero ){
      if( РежимОтладки ) Print("***   "+Name+" не обработан, параметры: "
                    +DoubleToStr(Price1,Digits)+" ("+Bar1+"/"+TimeToStr(Time1)+")..."
                    +DoubleToStr(Price2,Digits)+" ("+Bar2+"/"+TimeToStr(Time2)+")");
      return;
   }
   Speed=fSpeed(Name,Bar1,Price1,Bar2,Price2);
   // "3"-первый слева пробой на интервале "2" ... LastBar
   fBreakPoint(Name,Bar2,Price2,Speed,LastBar,Bar3,Price3);
   return;
}
 
Алексей Тарабанов #:

Вот так можно в МТ4: 


Парни всем спасибо. Я не думала даже, что так много решений 1 вопроса.

 
Пробоя горизонтальной линии достаточно без наклонной даже, с тем же стопом