Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 664

 
Roman Sharanov:

Non capisco come scrivere gli indicatori, qual è il problema?

Ho bisogno di tracciare una linea che mostri la differenza di prezzo tra active_1 e active_2

funziona

Ho anche bisogno di un ma_periodo medio ma_periodo da tracciare su questa linea, c'è un problema con esso - non viene visualizzato

Non si controlla il risultato della copia.

Si copia l'intera storia ad ogni spunta.

Il numero di Bars(), non rates_total dovrebbe essere copiato da un simbolo non nativo (non il simbolo del grafico corrente).

Ogni due minuti, è necessario richiedere, per esempio, l'ora corrente della barra per un simbolo non nativo per mantenere aggiornati i suoi dati storici.

Utilizzare SimpleMAOnBuffer() per smussare i dati del dataBuffer

 
Artyom Trishkin:

Non si controlla il risultato della copia.

Si copia l'intera storia su ogni spunta.

Un simbolo non nativo (non il simbolo corrente del grafico) dovrebbe avere il numero Bars() copiato, non rates_total.

Ogni due minuti, è necessario richiedere, per esempio, l'ora corrente della barra per il simbolo non nativo per mantenere aggiornati i suoi dati storici.

Utilizzare SimpleMAOnBuffer() per smussare i dati di dataBuffer

come questo? ha smesso di funzionare del tutto

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   int bars1 = Bars(active_1, timeframe), bars2 = Bars(active_2, timeframe);
   
   if(CopyClose(active_1,timeframe,0,bars1,firstBuffer) < 0) return 0;
   if(CopyClose(active_2,timeframe,0,bars2,secondBuffer) < 0) return 0;
   if(bars1 != bars2) return 0;
   int first, bar;
   
   if(prev_calculated == 0) first = begin; else first = prev_calculated - 1;
   
   for(bar = first; bar<bars1; bar++){
      dataBuffer[bar] = firstBuffer[bar]-secondBuffer[bar];
      maBuffer[bar] = SimpleMA(bar, ma_period, dataBuffer);
   }
   SimpleMAOnBuffer(bars1, prev_calculated, begin, ma_period, dataBuffer, maBuffer);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnTimer(){
   iTime(active_1,timeframe,1);
   iTime(active_2,timeframe,1);
}
void OnDeinit(const int reason){
   EventKillTimer();
}
 

Saluti.

Potreste dirmi come registrare alcuni valori quando un EA apre un ordine, in modo che si riferiscano a quel particolare ordine, per esempio su un ticket.

 
Andrey Sokolov:

Saluti.

Potreste dirmi come registrare alcuni valori quando un EA apre un ordine? in modo che si riferiscano a quel particolare ordine, per esempio su un ticket.

Nel commento

 

Voglio osservare la volatilità. A questo scopo calcolo la differenza close-open nell'array tmp1 e poi la uso per tracciare la SMA per un periodo di interesse.


int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {


int i;
double tmp1[];

      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total; i++)
      {
      tmp1[i]=MathMax(open[i],close[i])-MathMin(open[i],close[i]);      
      ip1Buf[i]=iMA(NULL,0,1,0,0,tmp1[i],0);
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }


Nessun errore nella compilazione, il terminale non disegna l'indicatore, il log mostra CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Questa è la linea dove viene calcolata la differenzaMathMax-MathMin, quale può essere la ragione?


 
psyman:

Voglio osservare la volatilità. A questo scopo calcolo la differenza close-open nell'array tmp1 e poi la uso per tracciare la SMA per un periodo di interesse.



Nessun errore nella compilazione, il terminale non disegna l'indicatore, il log mostra CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Questa è la linea dove viene calcolata la differenzaMathMax-MathMin, quale può essere la ragione?


Non ho capito il codice, ma se è così

for(i=1; i<rates_total-1; i++)
 

Non funziona.


UPD

Stringa semplificata al minimo indispensabile tmp1[i]=close[i]; L'errore rimane lo stesso.

 
psyman:

Voglio osservare la volatilità. A questo scopo calcolo la differenza close-open nell'array tmp1 e poi la uso per tracciare la SMA per un periodo di interesse.



Nessun errore nella compilazione, il terminale non disegna l'indicatore, il log mostra CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Questa è la linea dove viene calcolata la differenzaMathMax-MathMin.


La matrice tmp[] è dichiarata come una matrice dinamica ed è inizialmente di lunghezza zero. Da qui l'errore.

Dovreste dichiarare questo array come un buffer di indicatori per i calcoli.

 
 

Forum sul trading, sistemi di trading automatico e test di strategia

Qualsiasi domanda per i principianti in MQL4, aiuto e discussione su algoritmi e codici

Alexey Viktorov, 2018.10.16 12:31

La matrice tmp[] è dichiarata come una matrice dinamica ed è inizialmente di lunghezza zero. Da qui l'errore.

Questo array dovrebbe essere dichiarato come un buffer di indicatori per i calcoli.


Perché non possiamo usare un array dinamico?

In questo caso ho il prezzo di chiusura sovrascritto senza alcun calcolo.

Dove posso leggere come usare i buffer indicatori?