Ищу индикатор ZZ с построением фигур треугольник - страница 2

 
forex2030 #:

Не подскажите как можно продлить отрезки линий в одну точку?


Если просто продлить, то достаточно задать свойство "Луч" (Ray). 

 
khorosh #:

Как то мудрёно, не ошибаетесь?

Напротив, очень просто. Примерно так, хотя это немного о другом: 

// Поиск касательной к цене
void fTangent(string Name                    // Имя касательной
             ,bool Envelope                  // Верхняя огибающая
             ,int Bar1,double Price1         // Точка начала
             ,int Bar2                       // Начать поиск
             ,int Bar3                       // Закончить поиск
             ,int& BarM,double& PriceM       // Точка касания
             ,double& SpeedM){               // Наклон касательной
   BarM=LastBar-1;
   PriceM=0;
   SpeedM=0;
   if( Bar3>=Bar2
    || Bar3<LastBar
    || Bar2<LastBar
    || Bar2>Bar1+1
    || Price1<Zero ){
      Print("***   "+Name+" - параметры: "
                         +DoubleToStr(Price1,Digits)+" ("+Bar1+"/"+TimeToStr(Time[Bar1])
                                        +"), "+Bar2+"/"+TimeToStr(Time[Bar2])
                                        +"..."+Bar3+"/"+TimeToStr(Time[Bar3]));
      return;
   }
   double Price2, Speed;
   if( Envelope ) SpeedM=-Infinity; else SpeedM=Infinity;
   while( Bar2>Bar3 ){
      Bar2--;                                // Возможная точка касания.
      if( Envelope ) Price2=High[Bar2]; else Price2=Low[Bar2];
      Speed=fSpeed(" Tangent",Bar1,Price1,Bar2,Price2);
      if( ( Envelope && Speed>=SpeedM )
       || (!Envelope && SpeedM>=Speed ) ){  // Локальная касательная.
         BarM=Bar2;
         PriceM=Price2;
         SpeedM=Speed;
   }  }
   return;
}

Всего-то... 

 
forex2030:

Не могу найти в сети индикатор ZigZag  у которого строятся фигуры по точкам изгиба в виде треугольника по всей истории.
Знаю что должен быть, эта тема не новая и уверен что не раз реализованная, может гуглю запросы не правильно.

Или как сравнивать 5 точек изгиба?
Точка 0 ещё не сформирована и её надо сравнить с точкой 1 чтобы узнать направление луча,
далее если луч 0 вниз то по низу точки 2 и 4, по верху точки 1 и 3,
а если луч 0 вверх то по низу точки 1 и 3, по верху точки 2 и 4

Помогите кто чем сможет))


А что дают треугольники? Выход из них непредсказуем
 
Vladimir Baskakov #:
А что дают треугольники? Выход из них непредсказуем

Как я понимаю, интересен сам факт пробоя в ту, или иную сторону. Событие. 

 
Алексей Тарабанов #:

Напротив, очень просто. Примерно так, хотя это немного о другом: 

Всего-то... 

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

 
khorosh #:

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

Из нижней точки сверху вниз. Пока не станет горизонтальной. Цена идёт вверх, касательная за ней. После того, как цена пошла вниз, касательная пошла туда же. 

 
Касательная к реальному кусочку истории
 
Из нижней точки бросаем касательную по нижним точкам. По мере поступления котировок, продолжаем перемещать касательную на новые минимумы. После гоним сверху вниз. 
 
Алексей Тарабанов #:
Из нижней точки бросаем касательную по нижним точкам. По мере поступления котировок, продолжаем перемещать касательную на новые минимумы. После гоним сверху вниз. 

Так понятно.

 
Ihor Herasko #:

Это расчет коэффициента B (цена линии на нулевом баре). Его (и коэффициент K) тоже нужно предварительно определить для каждой линии. Затем приравнять друг другу полученные уравнения для каждой прямой (ведь цена пересечения должна быть одинаковой). Так, из двух уравнений:
y = K1 * x + B1
y = K2 * x + B2

получаем одно:
K1 * x + B1 = K2 * x + B2

Из него находим X (индекс бара, он будет дробный, а не целый), а далее уже Y (цена пересечения)

y = K * x + B

В итоге (К) и (В) найдены, а (х) что имеется ввиду и как рассчитывается?



double KoeffLine(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);}
double
K = 0.0; double B = KoeffLine(Index1, Price1, Index2, Price2, K);