Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 25

 

Цикл от самого "старого" бара к самому "свежему": 

    for (int i = limit; i >= 0; i--);
 

J'ai légèrement modifié l'indicateur. Il compte correctement jusqu'à la virgule. Par exemple, sur une section, l'indicateur devrait être 11, mais il affiche 11.58.

Qu'est-ce qui peut bien se passer ?

J'ai fait en sorte que vniz_1, vniz_2 soient supérieurs à zéro. J'ai créé des écarts dans la ligne de l'indicateur. Comment relier les écarts et les colorer différemment, mais pas pour calculer l'indicateur dans ces écarts.

//+------------------------------------------------------------------+
//|                                                         сила.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//--- input parameters
extern int       Period_MA_1=7;
extern int       Period_MA_2=7;
extern int       Period_MA_3=7;
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),                      
    limit;
    double
    vniz_1,
    vniz_2,
    MA_1_t,                         
    MA_2_t,                           
    MA_3_t;
 
   if(counted_bars>0)
      counted_bars--;
   
   limit=Bars-counted_bars;
   
   
   for(int i=0;i<limit;i++)
   {
      MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_CLOSE,i+1);  
      MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_CLOSE,i+2);  
      MA_3_t=iMA(NULL,0,Period_MA_3,0,MODE_EMA,PRICE_CLOSE,i+3);    
      vniz_1=(MA_3_t-MA_2_t);
      vniz_2=(MA_2_t-MA_1_t);
      if (vniz_1>0&&vniz_2>0)
      {
      ExtMapBuffer1[i]=(vniz_1/vniz_2);
      }
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

J'ai légèrement modifié l'indicateur. Il compte correctement jusqu'à la virgule. Par exemple, sur une section, l'indicateur devrait être 11, mais il affiche 11.58.

Qu'est-ce qui peut bien se passer ?

J'ai fait en sorte que vniz_1, vniz_2 soient supérieurs à zéro. J'ai créé des écarts dans la ligne de l'indicateur. Comment relier les écarts et les colorer différemment, mais pas pour calculer l'indicateur dans ces écarts.


      MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_CLOSE,i+1);  
      MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_CLOSE,i+2);  
      MA_3_t=iMA(NULL,0,Period_MA_3,0,MODE_EMA,PRICE_CLOSE,i+3); 
Calculer l'indicateur sur des barres inexistantes ? ????
 
      if (vniz_1<0 || vniz_2<0)
      {
      ExtMapBuffer2[i]=(чему равны разрывы);
      }
 
Qu'est-ce que 2013.07.07 16:06:21 2010.02.01 01:56 EURUSD,H1 : Erreur dans l'ouverture d'un ordre de vente EURUSD Array index - out of range
? ?????
 
Ci-dessous le code d'un indicateur simple qui dessine une ligne horizontale pour toutes les barres.
Comment puis-je faire en sorte que la ligne ne soit tracée que pour les 20 dernières barres ?




#property indicator_separate_window
#property indicator_buffers 1

#property indicator_color1 Chocolate
#property indicator_width1 6

#property indicator_minimum -0.1
#property indicator_maximum  0.1


double ExtMapBuffer[];



int init() {

   IndicatorBuffers(1);
   IndicatorDigits(   Digits+2);
   IndicatorShortName("H_LINE");

   SetIndexLabel(    0, "H_LINE");
   SetIndexDrawBegin(0, 0);
   SetIndexStyle(    0, DRAW_LINE);
   SetIndexBuffer(   0, ExtMapBuffer);

   SetIndexEmptyValue(0, EMPTY_VALUE);
   SetIndexShift(     0, 0);

   return(0);
}




int start()  {

   int limit;
   int counted_bars=IndicatorCounted();

   if(counted_bars>0) {
      counted_bars--;
   }

   limit=Bars-counted_bars;


   for(int i=0; i<limit; i++) {   
      ExtMapBuffer[i] = 0;
   }


   return(0);
}
 
atztek:
Ci-dessous le code d'un indicateur simple qui dessine une ligne horizontale pour toutes les barres.
Comment faire pour que la ligne ne soit tracée que pour les 20 dernières barres ?






A quoi doit correspondre la ligne ?
 
Vinin:

A quoi doit correspondre la ligne ?

La taille de la ligne sur l'axe Y dans ce cas n'a pas d'importance, il s'agit juste d'un exemple à partir duquel je veux comprendre comment limiter correctement le "dessin" par les indicateurs à un certain nombre de barres.
 
atztek:

La taille de la ligne sur l'axe Y n'a pas d'importance dans ce cas, il s'agit juste d'un exemple à partir duquel je veux comprendre comment limiter le "dessin" par les indicateurs à un certain nombre de barres.

Voulez-vous utiliser des tampons ou des objets indicateurs?
 
Vinin:
Voulez-vous utiliser des tampons ou des objets indicateurs ?

Lestampons indicateurs, car à l'avenir la solution sera utilisée non seulement pour les lignes droites, mais aussi pour les moyennes mobiles et d'autres types de lignes.
Ce site web utilise des cookies. En savoir plus sur notre politique de cookies.