Errori, bug, domande - pagina 270

 
Rosh:

Eseguite un tale indicatore e lo vedrete voi stessi:

Così in

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[])

anche open[] non è una serie temporale?

Non ci capisco niente, per favore datemi un esempio di una serie temporale.

 
Voodoo_King:

build 375. il bug è davvero brutto, a causa del quale ho già perso un po' di soldi...

I parametri EA non vengono ripristinati alle impostazioni dopo la chiusura/apertura del terminale.

Per essere più precisi, una parte di essi può essere ripristinata (ad esempio 3 su 6), mentre il resto viene riportato alle impostazioni predefinite.


costruire 381. NON È CAMBIATO NULLA!!!

ogni volta che il terminale viene riavviato, gli EA sono inizializzati con parametri diversi (qualsiasi cosa vogliano).

Inizializzazione errata dei parametri dell'esperto

 
AlexSTAL:

Questa funzione controlla la direzione, non il cambiamento.

1) Senza inizializzazione

2) Con l'inizializzazione

3) Codice di cui sopra, solo con la funzione di direzione dell 'indicizzazione dell'array ArrayGetAsSeries

Ho fatto un errore nel service-desk con il nome della funzione semplicemente


Sì, ho scoperto l'errore del compilatore. Grazie per il messaggio. Una correzione sarà nella prossima build.
 
BoraBo:

Così in

anche open[] non è una serie temporale?

Non capisco, per favore mi faccia un esempio di una serie temporale.

Non è un TC, e allora? Impostatelo su una serie temporale tramite Set e sarà una TC. È la prima volta che esegui il terminale? Che per voi è una notizia così grande. Credo che qualcuno abbia appena scritto che dovremmo decidere da soli come lavorare nei loro programmi - con TS o solo con gli array.
 
joo:


Ecco perché lo faccio in OnCalculate():

Potete aiutarmi a far sì cheArrayGetAsSeries(low) dia true

 
BoraBo:

Potete aiutare a renderevero l'output di ArrayGetAsSeries(low)?

Non ne posso più :)) impostalo come vuoi e ciao. Non c'è niente da controllare. :))
 
BoraBo:

Così in

anche open[] non è una serie temporale?

Non ci capisco niente, per favore datemi un esempio di serie temporale.

open[] e tutti gli altri array in OnCalculate sono serie temporali. All'inizio, quando il linguaggio MQL5 veniva scritto, ArrayGetAsSeries() restituiva true per loro e la loro indicizzazione veniva eseguita esattamente come per le serie temporali, cioè all'indietro.

Ma poi si è rivelato molto scomodo e innaturale scrivere i calcoli del buffer degli indicatori in stile MQL4 e c'era solo una via d'uscita - invertire l'indicizzazione delle serie temporali per un uso conveniente. Abbiamo iniziato a scrivere indicatori personalizzati con questo spirito:

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread)
{
//---- переворачиваем все таймсерии, чтобы ими было удобно пользоваться, как обычными массивами
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
   ArraySetAsSeries(time,false);
   ArraySetAsSeries(tick_volume,false);
   ArraySetAsSeries(volume,false);
   ArraySetAsSeries(spread,false);
   ArraySetAsSeries(open,false);
.... остальной код
}

Ma ogni volta che abbiamo dovuto scrivere un tale casino di conversioni non si è rivelata nemmeno una buona idea. Perciò si è deciso di passare queste serie temporali con indicizzazione, come per i soliti array. Ecco come abbiamo ottenuto un tale paradosso, quando le serie temporali non sono indicizzate come le serie temporali. Ecco perché l'aiuto dice che l'ordine di indicizzazione dovrebbe essere controllato e, se necessario, impostato come richiesto.

 
BoraBo:

Aiutatemi a renderevero l'output di ArrayGetAsSeries(low)

Restituisce già true, ma a causa di un errore del compilatore il suo valore viene emesso erroneamente come parametro. Controlla in questo modo:

#property script_show_inputs
input bool isTimeSeria=true;


double Ups[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

//--- установим для массивов признак таймсерии
   Print("Установим для массивов признак таймсерии как ",isTimeSeria);
   ArraySetAsSeries(Ups,isTimeSeria);

//--- Проверим таймсерии
   if(ArrayGetAsSeries(Ups))
     {
      Print("1:  ArrayGetAsSeries(Ups)=true");
      Print("2:  ArrayGetAsSeries(Ups)=",ArrayGetAsSeries(Ups));
     }
   else
     {
      Print("ArrayGetAsSeries(Ups)=true!!!");
     }
  }
//+------------------------------------------------------------------+


Risultato:


 
Rosh:

Dà vero, solo che a causa di un errore del compilatore il suo valore come parametro viene emesso in modo errato. Controlla in questo modo:


Risultato:


Grazie, l'ho capito.

ArrayIsSeries() eArrayGetAsSeries() nell'operatore condizionale if() funzionano come descritto, ma Print() produce sempre false.


 

Sviluppatori.

1. Si prega di controllare il caricamento della storia nel tester (è la prima volta che faccio dei test).

Sto testando EURUSD utilizzando un campione MACD standard su H1 con intervallo "ultimo mese".

Ho raggiunto il 57% dei dati scaricati e si blocca con successo, con solo questa linea nel log

2011.01.19 17:16:23	Tester	EURUSD: history preliminary downloading started

2. È possibile fare costantemente la leva di 1:200 e 1:500 nelle nuove build nel tester?

Capisco che non tutte le società di brokeraggio hanno tale leva, specialmente su MT5, ma nello Strategy Tester questo dovrebbe probabilmente essere lasciato perché è più conveniente testare le strategie su una nuova piattaforma.