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

 
Zaldy :


O kod değerler verebilir ama doğru değerleri vermez.

Lütfen önceki gönderilerime bakın

 
GumRai :


O kod değerler verebilir ama doğru değerleri vermez.

Lütfen önceki gönderilerime bakın

Merhaba Gumrai, kodunuzu ve buraya eklediğim Qjol sihirli kodunu derledim. qjol kodu olmadan grafiğin şekli 7 sayısı gibidir, ancak qjol kodu eklendiğinde daha iyi davranır. Resimde gördüğünüz gibi değer -1'e düştü. Arsa, buradaki önceki görüntü ile aynı şekle ancak farklı değere sahiptir. Lütfen bunun nasıl iyileştirileceğini tavsiye edin. 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
//#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(Symbol(), PERIOD_D1, Time[iCht]); 
    Buf_0[iCht] = EMPTY;  //  <<<<<<<<<<<< This is the magic code that gjol inserted and it worked.      
      //----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]++;
         } 
         }
         }
//--------------------------------------------------------------------
   return(0);// 
  }
//--------------------------------------------------------------------
 
GumRai :


O kod değerler verebilir ama doğru değerleri vermez.

Lütfen önceki gönderilerime bakın


Merhaba GumRai,

Lütfen bunu en iyi nasıl geliştirebileceğimizi önerin. Teşekkürler.

 
Zaldy :


Merhaba GumRai,

Lütfen bunu en iyi nasıl geliştirebileceğimizi önerin. Teşekkürler.


Görünüşe göre önerilerimi zaten uygulamışsınız.

Tampon[0] kodda hesaplanmadığı için indi satırı sıfıra düşüyor. Bu değerin 0'dan başlayıp gün geçtikçe artmasını mı yoksa daha düzenli görünmesini sağlamak için sadece buffer[0] == buffer[1] yapmak mı istediğinize karar vermelisiniz.

 
Göstergemi kodlamadaki büyük yardım için WHRoeder, qjol ve GumRai'ye teşekkür ederim.
 
GumRai :


Görünüşe göre önerilerimi zaten uygulamışsınız.

Tampon[0] kodda hesaplanmadığı için indi satırı sıfıra düşüyor. Bu değerin 0'dan başlayıp gün geçtikçe artmasını mı yoksa daha düzenli görünmesini sağlamak için sadece buffer[0] == buffer[1] yapmak mı istediğinize karar vermelisiniz.


Merhaba GumRai, 0'dan başlayıp gün ilerledikçe artan şekilde nasıl kodlayabilirim? Lütfen yardım et. Teşekkürler.
 
Zaldy :

Merhaba GumRai, 0'dan başlayıp gün ilerledikçe artan şekilde nasıl kodlayabilirim? Lütfen yardım et. Teşekkürler.


Kodunuzda bazı değişiklikler yaptım



 int start()                         // Special function start()
  {
  
  
   int   i, iCht, Counted_bars, limit, iD1, iM1Beg, iM1End, counter ; 
   datetime daystarttime, nextday ;   
   double hM1, lM1, openD1 ; 
//--------------------------------------------------------------------
  Counted_bars= IndicatorCounted (); // Number of counted bars
  limit = Bars - 1 - Counted_bars;
   if (limit > Bars - 100 )   
      limit = Bars - 100 ;
   for (iCht = limit; iCht >= 0 ; iCht--){ // Chart bars
      iD1 = iBarShift ( Symbol (), PERIOD_D1 , Time [iCht]); //---Barshift on daily chart
      daystarttime = iTime ( Symbol (), PERIOD_D1 ,iD1); //--Find datetime value for start of the day      
      openD1 = iOpen ( Symbol (), PERIOD_D1 , iD1);
      
       //----find BarShift of daystarttime on current chart and take the nearest following bar if it doesn't exist
      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 )  //-- Change to iD1>=0 to show running total for the current day
         {
         nextday = iTime ( Symbol (), PERIOD_D1 ,iD1- 1 );
         iM1End = iBarShift ( Symbol (), PERIOD_M1 ,nextday- 1 , true );
         if (iM1End< 0 )         
            iM1End = iBarShift ( Symbol (), PERIOD_M1 ,nextday, false );
       
         counter = 0 ;
         for (i= iM1Beg; i >= iM1End; i--){
            hM1 = iHigh ( Symbol (), PERIOD_M1 , i);
            lM1 =   iLow ( Symbol (), PERIOD_M1 , i);
             // count Bars of M1 Period that crisscross Open price of D1 Period 
             if ( hM1 >= openD1 && openD1 >= lM1)
               counter++ ;
         }
         Buf_0[iCht] = counter; 
         }
         }
//--------------------------------------------------------------------
   return ( 0 ); // 
  }
//--------------------------------------------------------------------
//+------------------------------------------------------------------+

Bu istediğini yapmalı

Olduğu gibi bugün için bir değer vermeyecek

Değişikliği vurgulanan metindeki gibi yaparsanız , 0'dan başlayacak ve gün ilerledikçe artan bugün için bir değer içermelidir.

 

Neden arsa burada eksik. Ocak 2014'ten önce dolmuyor. Lütfen sorunu bildirin. Bu çizelge WHRoeder kodu kullanılarak yapıldı, ancak GumRai tarafından önerilen bile aynı durdurulan grafiği veriyor.

 
çünkü o tarihten önce M1 veriniz yok