Рисование и использование паттернов- каналов, треугольников.Кто занимался, откликнитесь, есть проблемка. - страница 2

 
Компостер, так и сделал. Все нарисовалось ! Теперь на 1 график вываливаются треугольники и каналы со всех фреймов.Спасибо.
 
Компостер, так и сделал. Все нарисовалось ! Теперь на 1 график вываливаются треугольники и каналы со всех фреймов.Спасибо.

если не сложно, скинь рабочий вариант или сюда, или мне на мыло komposteriusСобакАmail.ru, интересно посмотреть =)
 
Поделись с народом :) Тоже хочу посмотреть.
 
Должны рисоваться серым дневные линии,голубым 240,красным 30,зеленым пунктиром 15,розовым 5 мин.
Принято, что по максимумам проводятся только наклонные вниз либо горизонтальные линии, по минимумам - восходящие либо горизонтальные.Т.Е. клины не рисуются.
Данные по всем линиям запихнуты в глоб переменные, чтобы их можно было забрать.





//+------------------------------------------------------------------+
//|                                                   Regression.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "alex@argusnet.ru"


extern double N=100;
extern int Fr_begin=3;

double Frame[8];
int x[1000];
double y[1000];
double b,kh,y_,otkl,quant_PeaksUP;

int init()
  {
   return(0);
  }

int deinit()
  {
   return(0);
  }



int start()
{

double bh_1=0,bh_5=0,bh_15=0,bh_30=0,bh_60=0,bh_240=0,bh_1440=0;
double bl_1=0,bl_5=0,bl_15=0,bl_30=0,bl_60=0,bl_240=0,bl_1440=0;
double kh1=0,kh5=0,kh15=0,kh30=0,kh60=0,kh240=0,kh1440=0;
double kl1=0,kl5=0,kl15=0,kl30=0,kl60=0,kl240=0,kl1440=0;
double bh1=0,bh5=0,bh15=0,bh30=0,bh60=0,bh240=0,bh1440=0;
double bl1=0,bl5=0,bl15=0,bl30=0,bl60=0,bl240=0,bl1440=0;
double t1h_1=0,t1h_5=0,t1h_15=0,t1h_30=0,t1h_60=0,t1h_240=0,t1h_1440=0;
double t2h_1=0,t2h_5=0,t2h_15=0,t2h_30=0,t2h_60=0,t2h_240=0,t2h_1440=0;
double t1l_1=0,t1l_5=0,t1l_15=0,t1l_30=0,t1l_60=0,t1l_240=0,t1l_1440=0;
double t2l_1=0,t2l_5=0,t2l_15=0,t2l_30=0,t2l_60=0,t2l_240=0,t2l_1440=0;

  string TrendLine="TrendLine";
  int i=0,k=0,z=0;
  int quant_PeaksUP=0,quant_PeaksDN=0,h1=0,h2=0;
  double SumX=0,SumY=0,SumXY=0,SumX_sq=0,otkl=0,koeff=0;
  double i_F=0,dt=0,Norm_kv=0.05;
  double b=0,kh=0,volat7=0;
  double f=0,f1=0,f2=0,f3=0,f4=0,f5=0,f6=0;
  double m=0,Sygma_yx=0,Sygma_yx_=0,Sygma_x=0,qrt_dx=0,qrt_dy=0,x_midd=0,y_calc=0,dy=0,dy_max=0;
  double kl=0,bl=0,Bh=0,DN=0,UP=0,L1=0,L2=0;
  double b_=0,kh_=0,y_=0;
    double a1=0,a2=0,t1=0,t2=0;
  
  // Удаляем старые трендовые линии


// Удаляем старые трендовые линии
  ObjectDelete("TrendLineLower5");ObjectDelete("TrendLineUpper5");
  ObjectDelete("TrendLineLower15");ObjectDelete("TrendLineUpper15");
  ObjectDelete("TrendLineLower30");ObjectDelete("TrendLineUpper30");
  ObjectDelete("TrendLineLower60");ObjectDelete("TrendLineUpper60");
  ObjectDelete("TrendLineLower240");ObjectDelete("TrendLineUpper240");
  ObjectDelete("TrendLineLower1440");ObjectDelete("TrendLineUpper1440");
  ObjectDelete("ac15");

Frame[1]=1;Frame[2]=5;Frame[3]=15;Frame[4]=30;Frame[5]=60;Frame[6]=240;Frame[7]=1440;

for (z=1;z<=7;z++)
{

  //определяем размерность графика

  if (z==1) dt=1;  if (z==2) dt=5;  if (z==3) dt=15;  if (z==4) dt=30;  if (z==5) dt=60;
  if (z==6) dt=240;  if (z==7) dt=1440;  

koeff=Frame[z]/Period();
//Alert(z," ",koeff," ",Frame[z]," ",Period());Sleep(2000);
  
  if (dt==1)  Norm_kv=0.01;//0.0035
  if (dt==5)  Norm_kv=0.03;
  if (dt==15)  Norm_kv=0.04;
  if (dt==30)  Norm_kv=0.05;
  if (dt==60)  Norm_kv=0.075;
  if (dt==240) Norm_kv=0.28;
  if (dt==1440)  Norm_kv=0.35;


// ПОСТРОЕНИЕ ЛИНИЙ ПО ВЕРХНИМ ФРАКТАЛАМ
  //обнуляем глобальные переменые 
  b=0;kh=0;GlobalVariableSet("B",b);GlobalVariableSet("Kh",kh);   
  for (i=1;i<=N;i++) {x[i]=0;y[i]=0;} 

  //Вычислим средний за 7 баров размах баров.
  volat7=0;
  for (i=1;i<=7;i++) volat7=volat7+(iLow(NULL,Frame[z],i)-iLow(NULL,Frame[z],i));
  volat7=volat7/7;

  //поищем фракталы вверх
  for (k=1;k<=N;k++) 
             {
               for (i=2+x[k-1];i<=10*N;i++)
                {
                   UP=iFractals(NULL,Frame[z],MODE_UPPER,i);
                   if(UP!=0)
                    {
                      x[k]=i;y[k]=iHigh(NULL,Frame[z],i);break;
                    }  
                }
             }


//***************Для найденных фракталов , начиная с Fr_begin
  for (k=Fr_begin;k<=N;k++)
   {
     SumX=0;SumY=0;SumXY=0;SumX_sq=0;qrt_dx=0;qrt_dy=0;dy_max=0;
     for (i=1;i<=k;i++)
     {SumX=SumX+x[i]*koeff;SumY=SumY+y[i];SumXY=SumXY+x[i]*koeff*y[i];SumX_sq=SumX_sq+x[i]*koeff*x[i]*koeff;}
  
     //Находим коэффициенты уравнения регрессии для первых К фракталов
     b=(SumX_sq*SumY-SumX*SumXY)/(k*SumX_sq-SumX*SumX );
     kh=(k*SumXY-SumX*SumY)/(k*SumX_sq-SumX*SumX);
     //максимальное абсолютное отклонение для первых К фракталов
     dy_max=0;
     for (i=1;i<=k;i++)
     {y_calc=kh*x[i]*koeff+b; dy=y[i]-y_calc;if (MathAbs(dy)>dy_max)  dy_max=MathAbs(dy);}  
     // процент отклонения
     y_=SumY/k; otkl=dy_max*100/y_;

     // сравним отклонение с допустимым и остановимся в случае превышения,определив quant_Peaks
     if (otkl<Norm_kv) {GlobalVariableSet("B",b);GlobalVariableSet("Kh",kh);} 
     if (otkl>=Norm_kv) {quant_PeaksUP=k-1;break;} 
   }

  //считываем коэффициенты
  b=GlobalVariableGet("B"); kh=GlobalVariableGet("Kh");  
  //пересчитаем отклонение
  //максимальное абсолютное отклонение для первых К фракталов
  dy_max=0;SumY=0;
  if (quant_PeaksUP>2)
  {
  for (i=1;i<=quant_PeaksUP;i++)
     {
      SumY=SumY+y[i];y_calc=kh*x[i]*koeff+b;dy=y[i]-y_calc;
      if (MathAbs(dy)>dy_max) dy_max=MathAbs(dy);
      }  
  }    

// координата Х
  h2=x[quant_PeaksUP]*koeff;
  h1=x[1]*koeff;
// поправочка - отодвинем линию  подальше на 0.5 от dy_max
  b=b+0.5*dy_max;


// Следующий блочок корректирует полученные результаты, из условий :
// для <= 240 периода при 2 пиках на прямой линия всегда горизонтальная  через последний фрактал
///*[[
  if (quant_PeaksUP==2 && dt<=240) b=y[1];
// для периодов меньше 30    линия всегда горизонтальная  через макс из 2 последних фракталов
  if (quant_PeaksUP==2 && dt<30) b=MathMax(y[1],y[2]);
// то же 
  if (quant_PeaksUP==2 && dt>=30) b=y[1];
// линия всегда горизонтальна либо вниз  
  if (kh*h2+b<kh*h1+b && quant_PeaksUP>2)  {kh=0;b=MathMin(b,y[1]);}
//]]*/  




//***************************************Запишем в файлы коэффициенты
//Записываем: первая (слева) точка,вторая точка(последний фрактал вверх  ),
//время первой точки,время второй точки,
//текущее значение прямой

  if (dt==1) 
  {GlobalVariableSet("bh_1",b);
   GlobalVariableSet("kh1",kh*h1+b);
   GlobalVariableSet("bh1",kh*h2+b);
   GlobalVariableSet("t1h_1",Time[h1]);
   GlobalVariableSet("t2h_1",Time[h2]);

   }
   
   if (dt==5) 
   {GlobalVariableSet("bh_5",b);
   GlobalVariableSet("kh5",kh*h1+b);
   GlobalVariableSet("bh5",kh*h2+b);
   GlobalVariableSet("t1h_5",Time[h1]);
   GlobalVariableSet("t2h_5",Time[h2]);
    }
   
   if (dt==15) 
  {GlobalVariableSet("bh_15",b);
   GlobalVariableSet("kh15",kh*h1+b);
   GlobalVariableSet("bh15",kh*h2+b);
   GlobalVariableSet("t1h_15",Time[h1]);
   GlobalVariableSet("t2h_15",Time[h2]);
       }
   
   if (dt==30) 
  {GlobalVariableSet("bh_30",b);
   GlobalVariableSet("kh30",kh*h1+b);
   GlobalVariableSet("bh30",kh*h2+b);
   GlobalVariableSet("t1h_30",Time[h1]);
   GlobalVariableSet("t2h_30",Time[h2]);
    }
   
   if (dt==60) 
  {GlobalVariableSet("bh_60",b);
   GlobalVariableSet("kh60",kh*h1+b);
   GlobalVariableSet("bh60",kh*h2+b);
   GlobalVariableSet("t1h_60",Time[h1]);
   GlobalVariableSet("t2h_60",Time[h2]);

   }
   
   if (dt==240) 
  {GlobalVariableSet("bh_240",b);
   GlobalVariableSet("kh240",kh*h1+b);
   GlobalVariableSet("bh240",kh*h2+b);
   GlobalVariableSet("t1h_240",Time[h1]);
   GlobalVariableSet("t2h_240",Time[h2]);
   
   }

if (dt==1440 || dt==2880 || dt==4320) 
{GlobalVariableSet("bh_1440",b);
   GlobalVariableSet("kh1440",kh*h1+b);
   GlobalVariableSet("bh1440",kh*h2+b);
   GlobalVariableSet("t1h_1440",Time[h1]);
   GlobalVariableSet("t2h_1440",Time[h2]);
   }   


// ПОСТРОЕНИЕ ЛИНИЙ ПО НИЖНИМ ФРАКТАЛАМ
  //обнуляем глобальные переменые 
  bl=0;kl=0;GlobalVariableSet("Bl",bl);GlobalVariableSet("Kl",kl);   
  for (i=1;i<=N;i++) {x[i]=0;y[i]=0;} 

  //поищем фракталы вниз
  for (k=1;k<=N;k++) 
             {
               for (i=2+x[k-1];i<=10*N;i++)
                {
                   DN=iFractals(NULL,Frame[z],MODE_LOWER,i);
                   if(DN!=0)
                    {
                      x[k]=i;y[k]=iLow(NULL,Frame[z],i);break;
                    }  
                }
             }

//***************Для найденных фракталов , начиная с Fr_begin
  for (k=Fr_begin;k<=N;k++)
   {
     SumX=0;SumY=0;SumXY=0;SumX_sq=0;qrt_dx=0;qrt_dy=0;dy_max=0;
     for (i=1;i<=k;i++)
     {SumX=SumX+x[i]*koeff;SumY=SumY+y[i];SumXY=SumXY+x[i]*koeff*y[i];SumX_sq=SumX_sq+x[i]*koeff*x[i]*koeff;}
  
     //Находим коэффициенты уравнения регрессии для первых К фракталов
     bl=(SumX_sq*SumY-SumX*SumXY)/(k*SumX_sq-SumX*SumX );
     kl=(k*SumXY-SumX*SumY)/(k*SumX_sq-SumX*SumX);

     //максимальное абсолютное отклонение для первых К фракталов
     dy_max=0;
     for (i=1;i<=k;i++)
     {y_calc=kl*x[i]*koeff+bl; dy=y_calc-y[i];if (MathAbs(dy)>dy_max)  dy_max=MathAbs(dy);}  
     // процент отклонения
     y_=SumY/k; otkl=dy_max*100/y_;

     // сравним отклонение с допустимым и остановимся в случае превышения,определив quant_Peaks
     if (otkl<Norm_kv)     
      {GlobalVariableSet("Bl",bl);GlobalVariableSet("Kl",kl);} 
     if (otkl>=Norm_kv) {quant_PeaksDN=k-1;break;} 
   }

  //считываем коэффициенты
  bl=GlobalVariableGet("Bl"); kl=GlobalVariableGet("Kl");  

  //пересчитаем отклонение
  //максимальное абсолютное отклонение для первых К фракталов
  dy_max=0;SumY=0;
  if (quant_PeaksDN>2)
  {
    for (i=1;i<=quant_PeaksDN;i++)
     {
      SumY=SumY+y[i];y_calc=kl*x[i]*koeff+bl;dy=y[i]-y_calc;
      if (MathAbs(dy)>dy_max) dy_max=MathAbs(dy);
      }  
  } 

  h2=x[quant_PeaksDN]*koeff;h1=x[1]*koeff;bl=bl-0.5*dy_max;
  

///*[[
  if (quant_PeaksDN==2 && dt>=240) bl=y[1];
  if (quant_PeaksDN==2 && dt<30) bl=MathMin(y[1],y[2]);
  if (quant_PeaksDN==2 && dt>=30) bl=y[1];
  if (kl*h2+bl>kl*h1+bl && quant_PeaksDN>2)  {kl=0;bl=MathMax(bl,y[1]);}
//]]*/



if (dt==1) 
{GlobalVariableSet("bl_1",bl);
   GlobalVariableSet("kl1",kl*h1+bl);
   GlobalVariableSet("bl1",kl*h2+bl);
   GlobalVariableSet("t1l_1",Time[h1]);
   GlobalVariableSet("t2l_1",Time[h2]);

   }

if (dt==5) 
{GlobalVariableSet("bl_5",bl);
   GlobalVariableSet("kl5",kl*h1+bl);
   GlobalVariableSet("bl5",kl*h2+bl);
   GlobalVariableSet("t1l_5",Time[h1]);
   GlobalVariableSet("t2l_5",Time[h2]);

   }

if (dt==15) 
{GlobalVariableSet("bl_15",bl);
   GlobalVariableSet("kl15",kl*h1+bl);
   GlobalVariableSet("bl15",kl*h2+bl);
   GlobalVariableSet("t1l_15",Time[h1]);
   GlobalVariableSet("t2l_15",Time[h2]);

   }
if (dt==30) 
  {GlobalVariableSet("bl_30",bl);
   GlobalVariableSet("kl30",kl*h1+bl);
   GlobalVariableSet("bl30",kl*h2+bl);
   GlobalVariableSet("t1l_30",Time[h1]);
   GlobalVariableSet("t2l_30",Time[h2]);

   }

if (dt==60) 
{GlobalVariableSet("bl_60",bl);
   GlobalVariableSet("kl60",kl*h1+bl);
   GlobalVariableSet("bl60",kl*h2+bl);
   GlobalVariableSet("t1l_60",Time[h1]);
   GlobalVariableSet("t2l_60",Time[h2]);

   }

if (dt==240) 
{GlobalVariableSet("bl_240",bl);
   GlobalVariableSet("kl240",kl*h1+bl);
   GlobalVariableSet("bl240",kl*h2+bl);
   GlobalVariableSet("t1l_240",Time[h1]);
   GlobalVariableSet("t2l_240",Time[h2]);

   }

if (dt==1440 || dt==2880 || dt==4320) 
{GlobalVariableSet("bl_1440",bl);
   GlobalVariableSet("kl1440",kl*h1+bl);
   GlobalVariableSet("bl1440",kl*h2+bl);
   GlobalVariableSet("t1l_1440",Time[h1]);
   GlobalVariableSet("t2l_1440",Time[h2]);

   }
}


// Получаем параметры линий тренда 
    
 bh_1=GlobalVariableGet("bh_1");bh_5=GlobalVariableGet("bh_5");
 bh_15=GlobalVariableGet("bh_15");bh_30=GlobalVariableGet("bh_30");
 bh_60=GlobalVariableGet("bh_60");bh_240=GlobalVariableGet("bh_240");
 bh_1440=GlobalVariableGet("bh_1440");
 
 bl_1=GlobalVariableGet("bl_1");bl_5=GlobalVariableGet("bl_5");
 bl_15=GlobalVariableGet("bl_15");bl_30=GlobalVariableGet("bl_30");
 bl_60=GlobalVariableGet("bl_60");bl_240=GlobalVariableGet("bl_240");
 bl_1440=GlobalVariableGet("bl_1440");
 
 kh1=GlobalVariableGet("kh1");kh5=GlobalVariableGet("kh5");
 kh15=GlobalVariableGet("kh15");kh30=GlobalVariableGet("kh30");
 kh60=GlobalVariableGet("kh60");kh240=GlobalVariableGet("kh240");
 kh1440=GlobalVariableGet("kh1440");
 
 kl1=GlobalVariableGet("kl1");kl5=GlobalVariableGet("kl5");
 kl15=GlobalVariableGet("kl15");kl30=GlobalVariableGet("kl30");
 kl60=GlobalVariableGet("kl60");kl240=GlobalVariableGet("kl240");
 kl1440=GlobalVariableGet("kl1440");
 
 bh1=GlobalVariableGet("bh1");bh5=GlobalVariableGet("bh5");
 bh15=GlobalVariableGet("bh15");bh30=GlobalVariableGet("bh30");
 bh60=GlobalVariableGet("bh60");bh240=GlobalVariableGet("bh240");
 bh1440=GlobalVariableGet("bh1440");
 
 bl1=GlobalVariableGet("bl1");bl5=GlobalVariableGet("bl5");
 bl15=GlobalVariableGet("bl15");bl30=GlobalVariableGet("bl30");
 bl60=GlobalVariableGet("bl60");bl240=GlobalVariableGet("bl240");
 bl1440=GlobalVariableGet("bl1440");
 
 t1h_1=GlobalVariableGet("t1h_1");t1h_5=GlobalVariableGet("t1h_5");
 t1h_15=GlobalVariableGet("t1h_15");t1h_30=GlobalVariableGet("t1h_30");
 t1h_60=GlobalVariableGet("t1h_60");t1h_240=GlobalVariableGet("t1h_240");
 t1h_1440=GlobalVariableGet("t1h_1440");
 
 t2h_1=GlobalVariableGet("t2h_1");t2h_5=GlobalVariableGet("t2h_5");
 t2h_15=GlobalVariableGet("t2h_15");t2h_30=GlobalVariableGet("t2h_30");
 t2h_60=GlobalVariableGet("t2h_60");t2h_240=GlobalVariableGet("t2h_240");
 t2h_1440=GlobalVariableGet("t2h_1440");
 
 t1l_1=GlobalVariableGet("t1l_1");t1l_5=GlobalVariableGet("t1l_5");
 t1l_15=GlobalVariableGet("t1l_15");t1l_30=GlobalVariableGet("t1l_30");
 t1l_60=GlobalVariableGet("t1l_60");t1l_240=GlobalVariableGet("t1l_240");
 t1l_1440=GlobalVariableGet("t1l_1440");
 
 t2l_1=GlobalVariableGet("t2l_1");t2l_5=GlobalVariableGet("t2l_5");
 t2l_15=GlobalVariableGet("t2l_15");t2l_30=GlobalVariableGet("t2l_30");
 t2l_60=GlobalVariableGet("t2l_60");t2l_240=GlobalVariableGet("t2l_240");
 t2l_1440=GlobalVariableGet("t2l_1440");
 


 //Рисуем линии тренда и каналы

 
 ObjectCreate("TrendLineUpper1440",2,0,t2h_1440,bh1440,t1h_1440,kh1440);
 ObjectSet( "TrendLineUpper1440",6,Gainsboro  );ObjectSet( "TrendLineUpper1440",8, 3);  
 ObjectCreate("TrendLineUpper240",OBJ_TREND,0,t2h_240,bh240,t1h_240,kh240);
 ObjectSet( "TrendLineUpper240",6, Aqua);ObjectSet( "TrendLineUpper240",8, 2);  
 ObjectCreate("TrendLineUpper60",OBJ_TREND,0,t2h_60,bh60,t1h_60,kh60);
 ObjectSet( "TrendLineUpper60",6, Red);ObjectSet( "TrendLineUpper60",8, 0);  
 ObjectCreate("TrendLineUpper30",OBJ_TREND,0,t2h_30,bh30,t1h_30,kh30);
 ObjectSet( "TrendLineUpper30",6, Purple);ObjectSet( "TrendLineUpper30",8, 0);  
 ObjectCreate("TrendLineUpper15",OBJ_TREND,0,t2h_15,bh15,t1h_15,kh15);
 ObjectSet( "TrendLineUpper15",6, Green);ObjectSet( "TrendLineUpper15",8, 0);
 ObjectSet( "TrendLineUpper15",7, STYLE_DOT);    
 ObjectCreate("TrendLineUpper5",OBJ_TREND,0,t2h_5,bh5,t1h_5,kh5);
 ObjectSet( "TrendLineUpper5",6, Pink);ObjectSet( "TrendLineUpper5",8, 0);
 ObjectSet( "TrendLineUpper5",7, STYLE_DOT);    

 
  
 ObjectCreate("TrendLineLower1440",OBJ_TREND,0,t2l_1440,bl1440,t1l_1440,kl1440);
 ObjectSet( "TrendLineLower1440",6,Gainsboro  );ObjectSet( "TrendLineLower1440",8, 3);  
 ObjectCreate("TrendLineLower240",OBJ_TREND,0,t2l_240,bl240,t1l_240,kl240);
 ObjectSet( "TrendLineLower240",6, Aqua);ObjectSet( "TrendLineLower240",8, 2);  
 ObjectCreate("TrendLineLower60",OBJ_TREND,0,t2l_60,bl60,t1l_60,kl60);
 ObjectSet( "TrendLineLower60",6, Red);ObjectSet( "TrendLineLower60",8, 0);  
 ObjectCreate("TrendLineLower30",OBJ_TREND,0,t2l_30,bl30,t1l_30,kl30);
 ObjectSet( "TrendLineLower30",6, Purple);ObjectSet( "TrendLineLower30",8, 0);  
 ObjectCreate("TrendLineLower15",OBJ_TREND,0,t2l_15,bl15,t1l_15,kl15);
 ObjectSet( "TrendLineLower15",6, Green);ObjectSet( "TrendLineLower15",8, 0);
 ObjectSet( "TrendLineLower15",7, STYLE_DOT);
 ObjectCreate("TrendLineLower5",OBJ_TREND,0,t2l_5,bl5,t1l_5,kl5);
 ObjectSet( "TrendLineLower5",6,Pink );ObjectSet( "TrendLineLower5",8, 0);
 ObjectSet( "TrendLineLower5",7, STYLE_DOT);


return(0);
}
 
ошибка: красным 60-мин, маргентой - 30 мин.
 
alexD, сенки =)