Как на mql написать касательную к машке?

 

Как на mql написать касательную к машке (или любому другому сглаживающему индикатору)?

Собственно, тема по этим постам: , .

 
multiplicator:

Как на mql написать касательную к машке?

Собственно, тема по этим постам: , .

Дурное дело не хитрое, но отчего же к машке, а не к цене? 

 
поиском по кодобазе "дивергенция" там должны быть примеры как к индикаторам разные линии, раньше часто были такие индикаторы
 
Алексей Тарабанов:

Дурное дело не хитрое, но отчего же к машке, а не к цене? 

а зачем к цене? что за глупость?)
 
нашел хороший пост:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как посчитать касательную к кривой?

Nikolay Kositsin, 2012.10.15 18:53

Всё дело в том, что любая кривая индикатора на графике - это ломанная, так что мы имеем зачастую просто угол с вершиной в точке касания. И стало быть в чистом виде касательной построить не получится! Если только не произвести какую-нибудь криволинейную интерполяцию в точке касания. Проще постоить ось симметрии угла из трех, рядом стоящих точек кривой и потом провести перпендикуляр к этой оси симметрии через точку касания. Формализация этого дела не так чтобы и шибко сложная!

 
// Поиск касательной к цене
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;
}
 
multiplicator:
нашел хороший пост:


Можно совсем просто - по двум соседним барам, просто их соединить прямой линией. А с биссектрисой, да еще с перпендикуляром к ней - думать надо. 

 
Dmitry Fedoseev:

Можно совсем просто - по двум соседним барам, просто их соединить прямой линией. А с биссектрисой, да еще с перпендикуляром к ней - думать надо. 

"... Дана исходная точка, вторая должна лежать на кривой таким образом, чтобы линия касалась кривой только в этой точке на заданном диапазоне баров ...". 

 
Исходная точка Bar1, Price1. Диапазон баров Bar2...Bar3. 
 

Сдается мне, что автор темы не вполне четко понимает, что ему нужно.

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

"... Дана исходная точка, вторая должна лежать на кривой таким образом, чтобы линия касалась кривой только в этой точке на заданном диапазоне баров ...". 

Изначально не было такого уточняющего условия

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