Значения трендовых линий при оптимизации ? - страница 3

 
Ihor Herasko:

Чем, по-Вашему, является коэффициент k в уравнении прямой?

Спасибо, Игорь!

И я взял на вооружение Вашу функцию.

 
Natalya Dzerzhinskaya:

Не точность вычислений было из-за моей глупости.
Что-то в уме показалось, попробовалось и обломалось))

Если не сложно и не жалко - выложите конечный код со всеми расчётами.

 
Vitaly Muzichenko:

Если не сложно и не жалко - выложите конечный код со всеми расчётами.

Так вот же он. Нужно лишь подставить собственные данные.

 
Vitaly Muzichenko:

Если не сложно и не жалко - выложите конечный код со всеми расчётами.

Да, конечно не жалко))
Отмеченное это новый расчёт линий на нулевом баре

extern int   Fractal_3or1 = 1;

//----------------------------------+
double FRup,FRdn,Hi,Lo;
bool up=true,dn=true,hi=true,lo=true;
datetime tHi,tLo,tFRup,tFRdn;
int NewFRup,NewFRdn;
//----------------------------------+

int init() {
   if(Fractal_3or1!=1 && Fractal_3or1!=3) Fractal_3or1=1;
return(0);}
//----------------------------------+

int start() { 
//---- Fractals ---------------------------------------------+
  double FrUp1=0.0,FrUp2=0.0;
  double UpF1=0, UpF3=0, UpF13;    // номера верхних фракталов
  int    UpB1=0, UpB3=0, UpSR=2;   // номера баров  
  while (UpF3==0){                 // поиск верхних фракталов
         UpF13=iFractals(NULL,0,MODE_UPPER,UpSR);
      if(UpF13!=0){if(UpF1==0){UpB1=UpSR; UpF1=UpF13;}
 else if(UpF3==0){UpB3=UpSR; UpF3=UpF13;}}UpSR++;} 
         FrUp1=iHigh(NULL,0,UpB1); //Последний фрактал
         FrUp2=iHigh(NULL,0,UpB3); //Предпоследний фрактал
//-----------------------------------+
  double FrDn1=0.0,FrDn2=0.0;
  double DnF1=0, DnF3=0, DnF13;    // номера нижних фракталов
  int    DnB1=0, DnB3=0, DnSR=2;   // номера баров  
  while (DnF3==0){                 // поиск нижних фракталов
         DnF13=iFractals(NULL,0,MODE_LOWER,DnSR);
      if(DnF13!=0){if(DnF1==0){DnB1=DnSR; DnF1=DnF13;}
 else if(DnF3==0){DnB3=DnSR; DnF3=DnF13;}}DnSR++;} 
         FrDn1=iLow(NULL,0,DnB1); //Последний фрактал
         FrDn2=iLow(NULL,0,DnB3); //Предпоследний фрактал

//------------------------------------------------------------+
   if(Fractal_3or1==1) {NewFRup=UpB1;NewFRdn=DnB1;}
   if(Fractal_3or1==3) {NewFRup=UpB3;NewFRdn=DnB3;}   
//------------------------------------------------------------+
   if(up){FRup=iHigh(NULL,0,NewFRup);tFRup=iTime(NULL,0,NewFRup);up=false;}
   if(FRup!=iHigh(NULL,0,NewFRup))up=true;
   if(!up && hi){Hi=iHigh(NULL,0,1);tHi=iTime(NULL,0,1);hi=false;}
//------------------------------------------------------------+
   if(dn){FRdn=iLow(NULL,0,NewFRdn);tFRdn=iTime(NULL,0,NewFRdn);dn=false;}
   if(FRdn!=iLow(NULL,0,NewFRdn))dn=true;
   if(!dn && lo){Lo=iLow(NULL,0,1);tLo=iTime(NULL,0,1);lo=false;}
//------------------------------------------------------------+
   double kKoefH = 0.0;
   double bKoefH = KoefH(iBarShift(NULL,0,tFRup,true),FRup,iBarShift(NULL,0,tHi,true),Hi,kKoefH);
   if (bKoefH == DBL_MAX) return;
// Получаем цену линии на баре BarIndexH
   int BarIndexH = 0;
   double NewPriceH = kKoefH * BarIndexH + bKoefH;
//---
   double kKoefL = 0.0;
   double bKoefL = KoefL(iBarShift(NULL,0,tFRdn,true),FRdn,iBarShift(NULL,0,tLo,true),Lo,kKoefL);
   if (bKoefL == DBL_MAX) return;
// Получаем цену линии на баре BarIndexL
   int BarIndexL = 0;
   double NewPriceL = kKoefL * BarIndexL + bKoefL;

Comment(" ПРОВЕРКА =  ",NormalizeDouble(NewPriceH,Digits)," == ",NormalizeDouble(NewPriceL,Digits));
//----
   if((NewPriceH<iHigh(NULL,0,1) && Open[1]>Close[1])||FRup!=iHigh(NULL,0,NewFRup))hi=true;
   if((NewPriceL>iLow(NULL,0,1) && Close[1]>Open[1])||FRdn!=iLow(NULL,0,NewFRdn))lo=true;
//----
return(0);} //StartEND//
//-------------------------------------------------------------------------+
double KoefH(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 KoefL(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 Dzerzhinskaya:

Да, конечно не жалко))
Отмеченное это новый расчёт линий на нулевом баре

Спасибо!

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

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