Indicateur pour compter les barres de la période M1 qui croisent le prix d'ouverture de la période D1. - page 3

 
Zaldy:


Ce code peut donner des valeurs, mais il ne donne pas de valeurs correctes.

Veuillez consulter mes messages précédents

 
GumRai:


Ce code peut donner des valeurs, mais il ne donne pas de valeurs correctes.

Veuillez consulter mes messages précédents

Bonjour Gumrai, j'ai compilé votre code plus le code magique Qjol que j'ai joint ici. Sans le code qjol la forme du tracé est comme un nombre 7 mais en ajoutant le code qjol il se comporte mieux. Comme vous pouvez le voir dans l'image, la valeur est tombée à -1. Le graphique a la même forme que l'image précédente mais la valeur est différente. Veuillez me conseiller sur la façon d'améliorer ce résultat. Merci.
 
#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:


Ce code peut donner des valeurs, mais il ne donne pas de valeurs correctes.

Veuillez consulter mes messages précédents


Salut GumRai,

Veuillez me conseiller sur la meilleure façon d'améliorer la situation. Merci.

 
Zaldy:


Salut GumRai,

Veuillez nous conseiller sur la meilleure façon d'améliorer cette situation. Merci.


Il semble que vous ayez déjà mis en œuvre mes suggestions.

La ligne d'indication tombe à zéro parce que le tampon[0] n'est pas calculé dans le code. Vous devez décider si vous voulez que cette valeur commence à 0 et augmente au fur et à mesure que la journée avance ou si vous voulez simplement que buffer[0] == buffer[1], ce qui rendrait les choses plus nettes.

 
Merci à WHRoeder, qjol et GumRai pour leur grande aide dans le codage de mon indicateur.
 
GumRai:


Il semble que vous ayez déjà mis en œuvre mes suggestions.

La ligne indienne tombe à zéro parce que le tampon[0] n'est pas calculé dans le code. Vous devez décider si vous voulez que cette valeur commence à 0 et augmente au fur et à mesure que la journée avance ou si vous voulez simplement que buffer[0] == buffer[1], ce qui rendrait les choses plus claires.


Bonjour GumRai, Comment puis-je coder pour que cette valeur commence à 0 et augmente au fur et à mesure que la journée avance ? S'il vous plaît aider. Merci.
 
Zaldy:

Bonjour GumRai, Comment puis-je coder pour commencer à 0 et augmenter au fur et à mesure que la journée avance ? Merci de m'aider. Merci.


J'ai apporté quelques modifications à votre code



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);// 
  }
//--------------------------------------------------------------------
//+------------------------------------------------------------------+

Cela devrait faire ce que vous voulez

En l'état, il ne donnera pas de valeur pour aujourd'hui.

Si vous effectuez le changement comme dans le texte surligné, il devrait alors inclure une valeur pour aujourd'hui qui commencera à 0 et augmentera au fur et à mesure de la progression de la journée.

 

Pourquoi la parcelle est incomplète ici. Elle n'est pas remplie avant janvier 2014. Veuillez nous indiquer le problème. Ce graphique a été réalisé en utilisant le code WHRoeder mais même celui proposé par GumRai donne le même tracé discontinu.

 
parce que vous n'avez pas de données M1 avant cette date
Raison: