Die morgendliche Flaute durchbrechen - welche Paare? - Seite 22

 

Dserg, könnten Sie eine weitere Version des Indikators http://Dserg-LinRegressionBreakout_v1.1.mq4 mitKanalstartzeit und Kanalendzeit anstelle vonNlin erstellen.

Wir würden dies sehr zu schätzen wissen.
 
gince:

Dserg, könnten Sie eine weitere Version des Indikators http://Dserg-LinRegressionBreakout_v1.1.mq4 mitKanalstartzeit und Kanalendzeit anstelle vonNlin erstellen.

Wir würden dies sehr zu schätzen wissen.

Es wäre besser, wenn ein neuer Kanal nicht unbedingt nach dem Ende des vorherigen Kanals gebildet wird. Denn ein neuer Trend beginnt oft, bevor der vorherige Kanal beendet ist. D.h. es sollte die Möglichkeit bestehen, Kanäle mit Überlappung zu bilden, und für ein besseres Aussehen des Bildes sollten die benachbarten Kanäle unterschiedliche Farben haben (2 Farben sind ausreichend).

 

Ich habe es selbst versucht, aber es hat nicht funktioniert. Vielleicht kann sie jemand korrigieren.

//+------------------------------------------------------------------+
//|                                                                  |
//|       Èíäèêàòîð äëÿ àâòîìàòè÷åñêîãî ïîñòðîåíèÿ ñóæåíèÿ           |
//|       êàíàëîâ ëèíåéíîé ðåãðåññèè                                 |
//|                               https://www.mql5.com/ru/users/dserg |
//+------------------------------------------------------------------+
#property  copyright "Dserg, 2010"
#property  link      "https://www.mql5.com/ru/users/dserg"

//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 8
#property indicator_color1 DeepSkyBlue
#property indicator_color2 DeepSkyBlue
#property indicator_color3 FireBrick
#property indicator_color4 DeepSkyBlue
#property indicator_color5 DeepSkyBlue
#property indicator_color6 Yellow
#property indicator_color7 HotPink
#property indicator_color8 LawnGreen 

//---- buffers
double B0[];
double B1[];
double Stop[];
double B3[];
double B4[];
double Up[];
double Dn[];
double Target[];

extern string S1="Ìèí. äëèíà êàíàëà ëèíåéíîé ðåãðåññèè";
extern int Nlin;
extern int start = 20;
extern int  stop = 7;
extern string S2="Ìàêñ. âûñîòà êàíàëà â ïóíêòàõ";
extern int r0=150;
extern string S3="Öåëü ïðè ïðîáîå îòí. øèðèíû êàíàëà";
extern double t0=2.618;
extern string S4="Èñïîëüçîâàòü äëÿ ðàñ÷¸òà Close,\n åñëè false - High/Low";
extern bool useClose=true;
extern string S5="Êîëè÷åñòâî áàðîâ äëÿ ðàññ÷¸òà";
extern int Nbars=5000;

bool isChannel;
datetime chEnd;
double a0;
double b0;
double range0;
datetime PrevTime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 3additional buffers are used for counting.
   
//---- drawing settings

   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0, B0);      
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(1, B1);      
   SetIndexStyle(2,DRAW_ARROW,0,2);
   SetIndexBuffer(2, Stop);      
   SetIndexStyle(3,DRAW_LINE,STYLE_DOT);
   SetIndexBuffer(3, B3);      
   SetIndexStyle(4,DRAW_LINE,STYLE_DOT);
   SetIndexBuffer(4, B4);      

   SetIndexStyle(5,DRAW_ARROW,0,1);
   SetIndexBuffer(5, Up);      
   SetIndexArrow(5, 233);        
   SetIndexStyle(6,DRAW_ARROW,0,1);
   SetIndexBuffer(6, Dn);      
   SetIndexArrow(6, 234);        
   SetIndexStyle(7,DRAW_ARROW,0,1);
   SetIndexBuffer(7, Target);      
   SetIndexArrow(7, 231);        

   SetIndexEmptyValue(0,0.0);   
   SetIndexEmptyValue(1,0.0);   
   SetIndexEmptyValue(2,0.0);   
   SetIndexEmptyValue(3,0.0);   
   SetIndexEmptyValue(4,0.0);   
   SetIndexEmptyValue(5,0.0);   
   SetIndexEmptyValue(6,0.0);   
   SetIndexEmptyValue(7,0.0);   

   SetIndexLabel(0,"Channel Low");
   SetIndexLabel(1,"Channel High");
   SetIndexLabel(2,"Stop/Reverse");
   SetIndexLabel(3,"Channel Low Extended");
   SetIndexLabel(4,"Channel High Extended");
   SetIndexLabel(5,"BUY Signal");
   SetIndexLabel(6,"SELL Signal");
   SetIndexLabel(7,"Target");

   isChannel=false;
   
   return(0);
  } 

int deinit()
  {
  } 
//---------------------------------------------------------------------------------------
int start()

  {
  Nlin = (24 - (start-stop))*60/Period(); 
        Comment("Nlin = "+ Nlin);
 //if (iTime(NULL,PERIOD_D1,0)!=PrevTime)  return(0);
 //PrevTime = iTime(NULL,PERIOD_D1,0);
 
     if(Bars-IndicatorCounted()==0) return(0);
     // int loopbegin = Bars - IndicatorCounted()+20*Nlin;
      int loopbegin = Nbars;
 
      int i,j;
      double a,b,c,
             sumy=0.0,
             sumx=0.0,
             sumxy=0.0,
             sumx2=0.0,
             h=0.0,l=0.0,
             range = 0.0;   
      isChannel=false;
      for(i = loopbegin; i >= 0; i--) {
         B0[i]=0;
         B1[i]=0;
         B3[i]=0;
         B4[i]=0;
         Up[i]=0;
         Dn[i]=0;
         Stop[i]=0;
         Target[i]=0;
      }
      
      for(i = loopbegin; i >= 0; i--) {
         
         
         //ó íàñ óæå åñòü êàíàë, æä¸ì, ïîêà åãî ïðîáü¸ò
         if (isChannel) {
            //double up0=a0*(i-chEnd)+b0+range0;
            //double dn0=a0*(i-chEnd)+b0-range0;
            double up0=a0*i+b0+range0;
            double dn0=a0*i+b0-range0;
            B3[i]=up0;
            B4[i]=dn0;
            //ïðîâåðÿåì ïðîáèòèå
            //ââåðõ
            if (Open[i]>up0) {
               Up[i]=up0;
               Stop[i]=dn0;
               Target[i]=up0+(up0-dn0)*(t0-1);
               isChannel=false;
               //continue;
            }
            //âíèç
            if (Open[i]<dn0) {
               Dn[i]=dn0;
               Stop[i]=up0;
               Target[i]=dn0-(up0-dn0)*(t0-1);
               isChannel=false;
               //continue;
            }
            continue;
         }            

         bool flag=false;
         for (j=0;j<Nlin+1;j++) {
            if (B3[i+j]>0.0&&!isChannel) {
               flag=true;
            }
         }
         if (flag) continue;
         
         
         a=0.0;b=0.0;c=0.0;
         sumx=0.0;sumy=0.0;
         sumxy=0.0;sumx2=0.0;
         h=0.0;l=0.0;

         //ñ÷èòàåì êàíàë ëèíåéíîé ðåãðåññèè îò i+Nlin äî i 
         if(StrToTime(stop) != Hour())return(0);
         for(j=0; j<Nlin; j++)
         {
            sumy+=Close[i+j];
            sumxy+=Close[i+j]*(i+j);
            sumx+=(i+j);
            sumx2+=(i+j)*(i+j);
         }
         c=sumx2*Nlin-sumx*sumx;
         if(c==0.0) {
            Alert("Error in linear regression!");
            return(-1);
         }
         a=(sumxy*Nlin-sumx*sumy)/c;
         b=(sumy-sumx*a)/Nlin;
         
         //îïðåäåëÿåì ãðàíèöû êàíàëà
         for(j=0;j<Nlin;j++)
         {
           double LR=a*(i+j)+b;
           if (useClose) {
             if(Close[j+i]-LR > h) h = Close[i+j]-LR;
             if(LR - Close[i+j]> l) l = LR - Close[i+j];
           } else {
             if(High[j+i]-LR > h) h = High[i+j]-LR;
             if(LR - Low[i+j]> l) l = LR - Low[i+j];
           }           
         }  
         range = MathMax(l,h);
         
         //ïðîâåðêà øèðèíû êàíàëà
         //if (range<r0*Point) {
            //åñòü êàíàë, ñîõðàíÿåì
            isChannel=true;
            a0=a;
            b0=b;
            chEnd=iTime(NULL,0,i);
            range0=range;
            
            for (j=0;j<Nlin;j++) {
               B3[i+j]=a*(i+j)+b+range;
               B4[i+j]=a*(i+j)+b-range;
               B0[i+j]=a*(i+j)+b+range;
               B1[i+j]=a*(i+j)+b-range;
            }
         //}
            

         
      }
      return(0);
  }
//+------------------------------------------------------------------+



            
            
 
Sie haben per Definition B0[k]=B3[k]; B1[k]=B4[k]; k=beliebig
 
tara:
У Вас по определению получается B0[k]=B3[k]; B1[k]=B4[k]; k=любое

tara
:

Per Definition erhält man B0[k]=B3[k]; B1[k]=B4[k]; k=irgendwo


|This ist der Autor von Dserg. Aber es sollte so sein. B0[k]; B1[k] sind STYLE_SOLID-Kanalzeilen, die anderen Zeilen sind Erweiterungen der ersten beiden STYLE_DOT-Zeilen

Was ich versucht habe, im Code zu ändern, ist fett gedruckt. Zu Beginn habe ich die Anzahl der Balken, d.h. die Länge des Kanals, berechnet. Dann wird dieser Kanal einmal am Tag gezogen, um zu prüfen, ob es einen neuen Tag gibt. Dann habe ich eine Zeitkontrolle hinzugefügt. Wenn die Zeit des Kanals abgelaufen ist, dann sollten wir ihn lesen und zeichnen.

aber es funktioniert nicht.

 
Ich habe das Thema nicht gelesen. Haben Sie es hier gesehen?
 
Ich würde das gerne aus einem anderen Blickwinkel betrachten, aber die Forschung braucht einen Indikator. Ich kann sie nicht selbst schreiben, und niemand hat meine Fehler korrigiert. Ich zeichne die Kanäle von Hand, aber ich habe die Leiste satt, von der aus ich welchen Kanal zeichnen soll. Auf der Geschichte der zehn Kalale kann nicht alles lösen
 

Das Thema ist interessant. Es besteht der Wunsch, tiefer zu gehen...

Hier gibt es auch eine Beschreibung des TS.

Ich werde das, was ich herausfinde, hier posten und nicht im Thread "Morgenpause".

 

Habe das Thema ganz zufällig in meinem Profilabo gefunden.

Wer gräbt in dieser Richtung?

IMHO - es ist an der Zeit, tiefer zu graben...

 
Roman.:

Habe das Thema ganz zufällig in meinem Profilabo gefunden.

Wer gräbt in dieser Richtung?

IMHO - es ist an der Zeit, tiefer zu graben...

Im Trend liegt super... In einer flachen Richtung gehe ich nie in eine Panne...
Grund der Beschwerde: