D1 Döneminin Açık fiyatını çapraz kesen M1 Dönemi Çubuklarını saymak için gösterge - sayfa 2

 
 
Merhaba WHRoeder, göstergeyi derlemeyi başardım ve buraya grafiğin görüntüsünü ekledim. Kırmızı gösterge çizgisi üstte düz bir çizgi oluşturur ve Bar0'a düşer. Buraya en son kodları ekledim, kodun nerede iyileştirileceğini tavsiye eder, böylece gösterge çapraz geçişli M1'in değerlerini çizer. Şimdiden çok teşekkürler.
 #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 : düz bir çizgi ve Bar0'a düştü.
M1 geçmişiniz var mı?
 
WHRoeder :
M1 geçmişiniz var mı?


Evet bende var.
 
#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()
  }
//--------------------------------------------------------------------
 

Vurgulanan kod satırı, yalnızca indi günlük grafiğe eklenmişse doğru kaymayı verecektir.

Daha önceki mesajımda da belirttiğim gibi

" Yani D1 mumunun açılışı için tarih saat değerine ihtiyacınız var . Bunu yapabilir misiniz?"

 
GumRai :

Vurgulanan kod satırı, yalnızca indi günlük grafiğe eklenmişse doğru kaymayı verecektir.

Daha önceki mesajımda da belirttiğim gibi

" Yani D1 mumunun açılışı için tarih saat değerine ihtiyacınız var . Bunu yapabilir misiniz?"


Merhaba GumRai, bir çok kez denedim ama derleyemedim bile, benim anlayışımı aşıyor. En iyisi, biri bana nasıl öğreneceğimi gösterebilirse, örnekler varsa hızlı öğrendiğimi fark ettim. Şu anda gösterge, Bar1 içindeki Open[1] fiyatını çaprazlayan M1 çubuklarını sayıyor. Ancak sayım oradan durur ve grafiği tamamlamak için ilerlemez. Göstergeyi bir EA'ya bağlamaya çalıştım ama EA bile geri test yaparken sinyali gönderemiyor. Lütfen bu göstergeyi tamamen tamamlayacak bazı kodlar gösterin. Teşekkür ederim.
 
Buf_0[iCht] = EMPTY;
 
Zaldy :

Merhaba GumRai, bir çok kez denedim ama derleyemedim bile, benim anlayışımı aşıyor. En iyisi, biri bana nasıl öğreneceğimi gösterebilirse, örnekler varsa hızlı öğrendiğimi fark ettim. Şu anda gösterge, Bar1 içindeki Open[1] fiyatını çaprazlayan M1 çubuklarını sayıyor. Ancak sayım oradan durur ve grafiği tamamlamak için ilerlemez. Göstergeyi bir EA'ya bağlamaya çalıştım ama EA bile geri test yaparken sinyali gönderemiyor. Lütfen bu göstergeyi tamamen tamamlayacak bazı kodlar gösterin. Teşekkür ederim.


Derlenmedi veya test edilmedi, ancak size yardımcı olabilir

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 :


Buf_0[iCht] = EMPTY; eklemeyi başardım. WHRoeder koduna ve bir şekilde gösterge çalıştı. Lütfen resmi ve en son derlenmiş kodları kontrol edin. Ancak onu EA'ma bağladığımda, sanki bir ayyaş süt kusanmış gibi yüklemeye ve boşaltmaya devam etti. Aynı EA ile bağlantılı diğer göstergeler iyi çalıştı. Aldığım mesaj şu:

2014.02.25 17:17:08.806 2014.01.02 07:48 Özel gösterge MamaMaryII EURPLN,Günlük: kaldırıldı

2014.02.25 17:17:08.799 2014.01.02 07:48 Özel gösterge MamaMaryII EURPLN,Günlük: başarıyla yüklendi

2014.02.25 17:17:08.794 2014.01.02 07:48 Özel gösterge MamaMaryII EURPLN,Günlük: kaldırıldı

2014.02.25 17:17:08.787 2014.01.02 07:48 Özel gösterge MamaMaryII EURPLN,Günlük: başarıyla yüklendi

2014.02.25 17:17:08.783 2014.01.02 07:48 Özel gösterge MamaMaryII EURPLN,Günlük: kaldırıldı

2014.02.25 17:17:08.774 2014.01.02 07:48 Özel gösterge MamaMaryII EURPLN,Günlük: başarıyla yüklendi

2014.02.25 17:17:08.768 2014.01.02 07:48 Özel gösterge MamaMaryII EURPLN,Günlük: kaldırıldı

Lütfen neyin yanlış gittiğini bana bildirin. Teşekkürler. Bir Grafiğe eklenen özel gösterge
 
#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);// 
  }
//--------------------------------------------------------------------