Рисование и использование паттернов- каналов, треугольников.Кто занимался, откликнитесь, есть проблемка. - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
если не сложно, скинь рабочий вариант или сюда, или мне на мыло komposteriusСобакАmail.ru, интересно посмотреть =)
Принято, что по максимумам проводятся только наклонные вниз либо горизонтальные линии, по минимумам - восходящие либо горизонтальные.Т.Е. клины не рисуются.
Данные по всем линиям запихнуты в глоб переменные, чтобы их можно было забрать.
//+------------------------------------------------------------------+ //| 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); }