[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 127

 
No.
 

Questa domanda: l'indicatore OA standard utilizza 2 buffer di indice aggiuntivi, che non sono coinvolti nel rendering dell'indicatore:

//+------------------------------------------------------------------+
//|                                                  Accelerator.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2005, MetaQuotes Software Corp."
#property  link      "http://www.metaquotes.net/"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Green
#property  indicator_color3  Red
//---- indicator buffers
double     ExtBuffer0[];
double     ExtBuffer1[];
double     ExtBuffer2[];
double     ExtBuffer3[];
double     ExtBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(5);
//---- drawing settings
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+2);
   SetIndexDrawBegin(0,38);
   SetIndexDrawBegin(1,38);
   SetIndexDrawBegin(2,38);
//---- 4 indicator buffers mapping
   SetIndexBuffer(0, ExtBuffer0);
   SetIndexBuffer(1, ExtBuffer1);
   SetIndexBuffer(2, ExtBuffer2);
   SetIndexBuffer(3, ExtBuffer3);
   SetIndexBuffer(4, ExtBuffer4);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("AC");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Accelerator/Decelerator Oscillator                               |
//+------------------------------------------------------------------+
int start()
  {
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev, current;
//---- last counted bar will be recounted
   if( counted_bars>0) counted_bars--;
   limit=Bars- counted_bars;
//---- macd counted in the 1-st additional buffer
   for(int i=0; i& lt; limit; i++)
      ExtBuffer3[ i]=iMA(NULL,0,5,0,MODE_SMA,PRICE_MEDIAN, i)-
                    iMA(NULL,0,34,0,MODE_SMA,PRICE_MEDIAN, i);
//---- signal line counted in the 2-nd additional buffer
   for( i=0; i< limit; i++)
      ExtBuffer4[ i]=iMAOnArray( ExtBuffer3,Bars,5,0,MODE_SMA, i);
//---- dispatch values between 2 buffers
   bool up=true;
   for( i= limit-1; i>=0; i--)
     {
      current=ExtBuffer3[ i]- ExtBuffer4[ i];
      prev=ExtBuffer3[ i+1]- ExtBuffer4[ i+1];
      if( current> prev) up=true;
      if( current& lt; prev) up=false;
      if(! up)
        {
         ExtBuffer2[ i]= current;
         ExtBuffer1[ i]=0.0;
        }
      else
        {
         ExtBuffer1[ i]= current;
         ExtBuffer2[ i]=0.0;
        }
       ExtBuffer0[ i]= current;
     }
//---- done
   return(0);
  }
//+------------------------------------------------------------------+

Come potete vedere, solo i calcoli sono fatti in questi array. Non capisco perché a questi array dovrebbe essere assegnato lo stato di buffer di indice?

 
neoclassic писал(а) >>

Questa domanda: l'indicatore OA standard utilizza 2 buffer di indice aggiuntivi, che non sono coinvolti nel rendering dell'indicatore:

Come potete vedere, solo i calcoli sono fatti in questi array. Non capisco, perché a questi array deve essere assegnato lo stato di buffer di indice?

per impostare la dimensione dell'array!

 

Ciao utenti del forum!

Sono un programmatore MQL totale. Ma mi piacerebbe avere un semplice EA come questo. Apre la posa con qualche lotto. Ho impostato immediatamente uno stop fisso (20-30 pips). Dopo aver raggiunto un certo profitto (20-30 pips) chiudiamo una parte della posizione (50%), e per le posizioni rimanenti lo stop viene spostato a Breakeven. Per il resto della posizione viene piazzato un ordine di profitto o viene monitorato manualmente. Ecco un'idea. Sarei molto grato per le risposte.

 
vvavva >> :

per impostare la dimensione dell'array!

ma cosa fare se avete bisogno di usare un gran numero di array? >> (più di 8)

 

usare array regolari piuttosto che array di buffer

invece di

SetIndexBuffer(3,ExtBuffer3);SetIndexBuffer(4,ExtBuffer4);

utilizzare

ArrayResize(ExtBuffer3,Bars); ArrayResize(ExtBuffer4,Bars);

 
keekkenen >> :

usare array regolari piuttosto che array di buffer

invece di

SetIndexBuffer(3,ExtBuffer3);SetIndexBuffer(4,ExtBuffer4);

utilizzare

ArrayResize(ExtBuffer3,Bars); ArrayResize(ExtBuffer4,Bars);


Grazie!!!

 
neoclassic писал(а) >>

Cosa succede se è necessario utilizzare un gran numero di array? (più di 8)

gli array per il disegno nell'indicatore non possono superare il limite specificato (credo sia 8)!

Anche gli array per i calcoli hanno dei limiti, ma il numero è più grande!

per aggirare i limiti usando gli array, è necessario usare le librerie!

 
Ho una domanda. È possibile fare un cameriere di notizie. Diciamo che oggi sarà la notizia tempo esatto non è noto testo approssimativo una parola, ho bisogno di un bip più lungo e più forte può farlo.
 
Ciao, ditemi tutte le possibili ragioni per cui la variabile k=Bars può cambiare quando una nuova barra non ha ancora iniziato a formarsi (tutte le situazioni possibili), diciamo che avete cambiato la coppia di valute, il timeframe, qualche aggiornamento di mt4 o in dc.
Motivazione: