Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 25

 

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

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

Modificato leggermente l'indicatore. Conta correttamente fino al punto decimale. Per esempio, su una sezione l'indicatore dovrebbe essere 11, ma mostra 11,58.

Cosa può esserci di sbagliato?

Ho fatto in modo che vniz_1, vniz_2 siano maggiori di zero. Ho creato dei vuoti nella linea dell'indicatore. Come collegare le lacune e colorarle in modo diverso, ma non per calcolare l'indicatore in queste lacune.

//+------------------------------------------------------------------+
//|                                                         сила.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:

Modificato leggermente l'indicatore. Conta correttamente fino al punto decimale. Per esempio, su una sezione l'indicatore dovrebbe essere 11, ma mostra 11,58.

Cosa può esserci di sbagliato?

Ho fatto in modo che vniz_1, vniz_2 siano maggiori di zero. Ho creato dei vuoti nella linea dell'indicatore. Come collegare le lacune e colorarle in modo diverso, ma non per calcolare l'indicatore in queste lacune.


      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); 
Calcola l'indicatore su barre inesistenti ?????
 
      if (vniz_1<0 || vniz_2<0)
      {
      ExtMapBuffer2[i]=(чему равны разрывы);
      }
 
Cos'è 2013.07.07 16:06:21 2010.02.01 01:56 EURUSD,H1: Errore nell'aprire un ordine di vendita EURUSD Array index - out of range
??????
 
Di seguito è riportato il codice di un semplice indicatore che disegna una linea orizzontale per tutte le barre.
Come posso fare in modo che la linea sia disegnata solo per le ultime 20 barre?




#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:
Di seguito è riportato il codice di un semplice indicatore che disegna una linea orizzontale per tutte le barre.
Come posso fare in modo che la linea sia disegnata solo per le ultime 20 barre?






A cosa dovrebbe corrispondere la linea?
 
Vinin:

A cosa dovrebbe corrispondere la linea?

La dimensione della linea sull'asse Y in questo caso non ha importanza, questo è solo un esempio in base al quale voglio capire come limitare correttamente il "disegno" degli indicatori a un certo numero di barre.
 
atztek:

La dimensione della linea sull'asse Y non ha importanza in questo caso, questo è solo un esempio in base al quale voglio capire come limitare il "disegno" degli indicatori a un certo numero di barre.

Volete usare buffer di indicatori o oggetti?
 
Vinin:
Volete usare buffer di indicatori o oggetti?

Buffer di indicatori, dato che in futuro la soluzione sarà utilizzata non solo per le linee rette, ma anche per la media mobile e altri tipi di linee.
Motivazione: