Indikator zum Zählen von Bars der M1-Periode, die den Eröffnungskurs der D1-Periode kreuzen - Seite 2

 
 
Hallo WHRoeder, ich habe es geschafft, den Indikator zu erstellen und hier das Bild des Charts angehängt. Der Indikator Linie in rot bildet eine gerade Linie auf der Oberseite und fiel auf Bar0. Ich habe hier die neuesten Codes beigefügt, bitte beraten Sie, wo der Code zu verbessern, so dass der Indikator die Werte der kreuz und quer M1 plotten wird. Vielen Dank im Voraus.
#property indicator_separate_window    // Indicator is drawn in the main window
#property indicator_buffers 1       // Number of buffers
#property  indicator_color1 Red     // Color of the 1st line

 
double Buf_0[];             // Declaring indicator arrays
//THIS INDICATOR IS TO COUNT NUMBER OF M1 BARS WHICH HIGH[I] IS HIGHER AND LOW[I] IS LOWER THAN OPEN[1440].
//--------------------------------------------------------------------
int init()                          // Special function init()
  {
//--------------------------------------------------------------------
   SetIndexBuffer(0,Buf_0);         // Assigning an array to a buffer
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style
//--------------------------------------------------------------------
 //  SetIndexBuffer(1,Buf_1);         // Assigning an array to a buffer
   //SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1);// Line style
//--------------------------------------------------------------------
   return(0);                          // Exit the special funct.init()
  }
//--------------------------------------------------------------------
int start()                         // Special function start()
  {
  
  
     int  i=0, iCht, Counted_bars; 
      
   
//--------------------------------------------------------------------
  Counted_bars=IndicatorCounted(); // Number of counted bars
   for(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart bars
      int      iD1    = iBarShift(NULL, PERIOD_D1, Time[iCht]);
      double   openD1 = iOpen(NULL, PERIOD_D1, iD1);
      int      iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht]),
               iM1End = -1;
      if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]);
      for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){
         double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg),
                lM1 =  iLow(NULL, PERIOD_M1, iM1Beg);
// count Bars of M1 Period that crisscross Open price of D1 Period 
        if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++; 
     }
  }   
//--------------------------------------------------------------------
   return(0);                          // Exit the special funct. start()
  }
//--------------------------------------------------------------------
 
 
Zaldy: eine gerade Linie auf der Spitze und fiel auf Bar0.
Haben Sie eine M1-Geschichte?
 
WHRoeder:
Haben Sie eine M1-Vergangenheit?


Ja, habe ich.
 
#property indicator_separate_window    // Indicator is drawn in the main window
#property indicator_buffers 1       // Number of buffers
#property  indicator_color1 Red     // Color of the 1st line

 
double Buf_0[];             // Declaring indicator arrays
//THIS INDICATOR IS TO COUNT NUMBER OF M1 BARS WHICH HIGH[I] IS HIGHER AND LOW[I] IS LOWER THAN OPEN[1440].
//--------------------------------------------------------------------
int init()                          // Special function init()
  {
//--------------------------------------------------------------------
   SetIndexBuffer(0,Buf_0);         // Assigning an array to a buffer
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style
//--------------------------------------------------------------------
 //  SetIndexBuffer(1,Buf_1);         // Assigning an array to a buffer
   //SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1);// Line style
//--------------------------------------------------------------------
   return(0);                          // Exit the special funct.init()
  }
//--------------------------------------------------------------------
int start()                         // Special function start()
  {
  
  
     int  i=0, iCht, Counted_bars; 
      
   
//--------------------------------------------------------------------
  Counted_bars=IndicatorCounted(); // Number of counted bars
   for(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart bars
      int      iD1    = iBarShift(NULL, PERIOD_D1, Time[iCht]);
      double   openD1 = iOpen(NULL, PERIOD_D1, iD1);
      int      iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht]),
               iM1End = -1;
      if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]);
      for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){
         double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg),
                lM1 =  iLow(NULL, PERIOD_M1, iM1Beg);
// count Bars of M1 Period that crisscross Open price of D1 Period 
        if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++; 
     }
  }   
//--------------------------------------------------------------------
   return(0);                          // Exit the special funct. start()
  }
//--------------------------------------------------------------------
 

Die hervorgehobene Codezeile ergibt nur dann die korrekte Verschiebung, wenn das Indi an den Tageschart angehängt ist.

Wie ich bereits in meinem früheren Beitrag sagte

"Sie benötigen also den Datumswert für die Eröffnung der D1-Kerze. Can you do this? "

 
GumRai:

Die hervorgehobene Codezeile ergibt nur dann die korrekte Verschiebung, wenn das Indi an den Tageschart angehängt ist.

Wie ich bereits in meinem früheren Beitrag sagte

"Sie benötigen also den Datumswert für die Eröffnung der D1-Kerze. Can you do this? "


Hallo GumRai, ich habe es viele Male versucht, aber ich konnte es nicht einmal kompilieren, es ist jenseits meines Verständnisses. Am besten ist, wenn mir jemand zeigen kann, wie es geht, dann werde ich daraus lernen, ich habe festgestellt, dass ich schnell lerne, wenn es Beispiele gibt. Im Moment zählt der Indikator die M1-Balken innerhalb des Bar1, die den Open[1]-Kurs durchkreuzen. Allerdings hört die Zählung an dieser Stelle auf und geht nicht weiter, um das Diagramm zu vervollständigen. Ich habe versucht, den Indikator mit einem EA zu verknüpfen, aber selbst der EA kann das Signal beim Backtesting nicht senden. Bitte zeigen Sie einige Codes, die diesen Indikator für immer vervollständigen werden. Ich danke Ihnen.
 
Buf_0[iCht] = EMPTY;
 
Zaldy:

Hallo GumRai, ich habe es viele Male versucht, aber ich konnte es nicht einmal kompilieren, es ist jenseits meines Verständnisses. Am besten ist, wenn mir jemand zeigen kann, wie es geht, dann werde ich daraus lernen, ich habe festgestellt, dass ich schnell lerne, wenn es Beispiele gibt. Im Moment zählt der Indikator die M1-Balken innerhalb des Bar1, die den Open[1]-Kurs durchkreuzen. Allerdings hört die Zählung an dieser Stelle auf und geht nicht weiter, um das Diagramm zu vervollständigen. Ich habe versucht, den Indikator mit einem EA zu verknüpfen, aber selbst der EA kann das Signal beim Backtesting nicht senden. Bitte zeigen Sie einige Codes, die diesen Indikator für immer vervollständigen werden. Ich danke Ihnen.


Nicht kompiliert oder getestet, aber vielleicht hilft Ihnen das weiter

Counted_bars=IndicatorCounted(); // Number of counted bars
   for(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart bars
      int      iD1    = iBarShift(Symbol(), PERIOD_D1, Time[iCht]); 
      
      //----find the datetime of iD1. ie the Time[]
      datetime daystarttime = iTime(Symbol(),PERIOD_D1,iD1);
      
      double   openD1 = iOpen(Symbol(), PERIOD_D1, iD1);
      
      //----find BarShift of daystarttime on current chart and take the nearest following bar if it doesn't exist
      int iM1Beg = iBarShift(Symbol(),PERIOD_M1,daystarttime,true);
      if(iM1Beg<0)
         iM1Beg = iBarShift(Symbol(),PERIOD_M1,daystarttime,false)+1;
      
      //----find BarShift for end of day on current chart and take the nearest following bar if it doesn't exist
      if(iD1>0)
         {
         datetime nextday = iTime(Symbol(),PERIOD_D1,iD1-1);
         int iM1End = iBarShift(Symbol(),PERIOD_M1,nextday-1,true);
         if(iM1End<0)
            iM1End = iBarShift(Symbol(),PERIOD_M1,nextday,false);
      
               
      
         for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){
                double hM1 = iHigh(Symbol(), PERIOD_M1, iM1Beg),
                lM1 =  iLow(Symbol(), PERIOD_M1, iM1Beg);
// count Bars of M1 Period that crisscross Open price of D1 Period 
         if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++;
         } 
         }
 
qjol:


Ich habe es geschafft, Buf_0[iCht] = EMPTY; in den WHRoeder-Code einzufügen und irgendwie hat der Indikator funktioniert. Als ich den Indikator jedoch mit meinem EA verknüpfte, lud und entlud er ihn immer wieder, als ob ein Betrunkener Milch spuckt. Die anderen Indikatoren, die mit demselben EA verknüpft sind, funktionierten einwandfrei. Dies ist die Nachricht, die ich erhielt:

2014.02.25 17:17:08.806 2014.01.02 07:48 Benutzerdefinierter Indikator MamaMaryII EURPLN,Daily: entfernt

2014.02.25 17:17:08.799 2014.01.02 07:48 Benutzerdefinierter Indikator MamaMaryII EURPLN,Daily: erfolgreich geladen

2014.02.25 17:17:08.794 2014.01.02 07:48 Benutzerdefinierter Indikator MamaMaryII EURPLN,Daily: entfernt

2014.02.25 17:17:08.787 2014.01.02 07:48 Benutzerdefinierter Indikator MamaMaryII EURPLN,Daily: erfolgreich geladen

2014.02.25 17:17:08.783 2014.01.02 07:48 Benutzerdefinierter Indikator MamaMaryII EURPLN,Daily: entfernt

2014.02.25 17:17:08.774 2014.01.02 07:48 Benutzerdefinierter Indikator MamaMaryII EURPLN,Daily: erfolgreich geladen

2014.02.25 17:17:08.768 2014.01.02 07:48 Benutzerdefinierter Indikator MamaMaryII EURPLN,Daily: entfernt

Bitte lassen Sie mich wissen, was falsch gelaufen ist. Danke! Benutzerdefinierter Indikator in einem Diagramm
 
#property indicator_separate_window    // Indicator is drawn in the main window
#property indicator_buffers 1       // Number of buffers
#property  indicator_color1 Red     // Color of the 1st line
//#property indicator_color2 Yellow      // Color of the 2nd line
 
extern int Multiplier=2; 
double Buf_0[];// Buf_1[];             // Declaring indicator arrays
//THIS INDICATOR IS TO COUNT NUMBER OF M1 BARS WHICH HIGH[I] IS HIGHER AND LOW[I] IS LOWER THAN OPEN[1440].
//--------------------------------------------------------------------
int init()                          // Special function init()
  {
//--------------------------------------------------------------------
   SetIndexBuffer(0,Buf_0);         // Assigning an array to a buffer
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Line style
//--------------------------------------------------------------------
//   SetIndexBuffer(1,Buf_1);         // Assigning an array to a buffer
//   SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Line style
//--------------------------------------------------------------------
   return(0);                          // Exit the special funct.init()
  }
//--------------------------------------------------------------------
int start()                         // Special function start()
  {
  
  
     int  i=0, iCht, Counted_bars; 
      
   
//--------------------------------------------------------------------
  Counted_bars=IndicatorCounted(); // Number of counted bars
  
   for(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart bars
  
      int      iD1    = iBarShift(NULL, PERIOD_D1, Time[iCht]);
      double   openD1 = iOpen(NULL, PERIOD_D1, iD1);
      int      iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht]),
               iM1End = -1;
      if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]);
   Buf_0[iCht] = EMPTY;  //  <<<<<<<<<<<< This is the magic code that gjol inserted and it worked.    
      for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){
         double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg),
                lM1 =  iLow(NULL, PERIOD_M1, iM1Beg);
// count Bars of M1 Period that crisscross Open price of D1 Period 
        if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++; 
       // Buf_1[iCht]= Multiplier*Buf_0[iCht];
     }
  }   
//--------------------------------------------------------------------
   return(0);// 
  }
//--------------------------------------------------------------------
Grund der Beschwerde: