Errori, bug, domande - pagina 645

 

Ciao a tutti!

Per favore, aiuta un principiante a capire l'uso degli array nelle classi. Tagliate il codice chiave in un piccolo pezzo per rappresentare il problema:

class base
{
protected:
int Stf_ZZ_Handle;
double Stf_ZZ_Val[];
public:
void InitArray()
  {
   Stf_ZZ_Handle=iCustom(_Symbol,_Period,"Examples\\ZigZag",12,0,0);
   ArraySetAsSeries(Stf_ZZ_Val,true);
   CopyBuffer(Stf_ZZ_Handle,0,0,200,Stf_ZZ_Val);
   Print("array[0]= ",Stf_ZZ_Val[0]);
  }
};
class second : public base
  {
    public:
    void Printer() {Print("array[0]= ",Stf_ZZ_Val[0]);}
  };
int OnInit()
  {
//---
base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();
//---
   return(0);
  }

Quando l'esecuzione ottiene un errore Array out of range nella stringa della classe ereditata, nella classe genitore ottengo il previsto 0.

2012.02.13 00:41:25 2011.01.01 00:00:00 array fuori portata in 'test1.mq5' (29,36)
2012.02.13 00:41:25 2011.01.01 00:00:00 array[0]= 0,0

   void Printer() {Print("array[0]= ",Stf_ZZ_Val[0]);}

Capisco che sto erroneamente passando (o indirizzando) un array a una classe ereditaria, anche se con le variabili normali non c'è nessun errore con tale gestione.

Cosa sto facendo di sbagliato?

 

Ho visto questo messaggio molto spesso ultimamente quando si eseguono file *.mq5:

Quale potrebbe essere il problema?

 
Radix:

Ciao a tutti!

base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();

Cosa sto facendo di sbagliato?

Guarda, quando dichiari "secondo Csecondo;" nella seconda linea, il metodo InitArray() non viene chiamato, giusto? Allo stesso tempo, l'oggetto Csecond stesso è già stato creato, quindi risulta che quando si chiama il "Csecond.Printer();", si riferisce all'array non inizializzato e non dimensionato Stf_ZZ_Val[].

 
Potete dirmi se il limite di 1000 barre di storia disponibile dalla data di inizio (come in MT4) è stato rimosso durante i test?
 
muallch:

Per favore, ditemi se il limite di 1000 barre di storia disponibile dalla data di inizio è stato rimosso (come in MT4) durante i test?

Spiegare cosa intende con questo?

In Five, i dati vengono caricati dall'anno precedente dall'inizio del test. Quindi, se state testando dal 2012.02.01, i dati saranno caricati dal 2011.01.01.

L'unica eccezione è il test su Giorni, Settimane e Mesi - l'inizio dei dati è calcolato in base alla necessità di avere 100 barre prima dell'inizio del test.

 
stringo:

Spiega cosa vuoi dire con questo.

Quando si esegue ad esempio da 2011.01.01 sui giornalieri, abbiamo bisogno di uno storico di almeno 3000 barre. Così, dobbiamo impostare un periodo consapevolmente più lungo di quello necessario per i test e tracciare il "punto di partenza" programmaticamente. Qual è la difficoltà di fornire l'intera storia (o su richiesta) durante il test?
 
C'è anche la questione della disponibilità della storia non nei test, ma nell'auto-trading reale. Cosa dobbiamo fare in questo caso? Il tester può essere superato in astuzia...
 
muallch:
Quando si esegue, per esempio dal 2011.01.01 su dati giornalieri abbiamo bisogno di una storia con almeno 3000 barre. In altre parole, dobbiamo impostare un periodo consapevolmente più lungo, di quello che ci serve per i test, e tracciare il "punto di partenza" programmaticamente. Qual è la difficoltà di fornire l'intera storia (o su richiesta) durante il test?

Non c'è nessuna difficoltà. Non volevamo introdurre un'ulteriore casella di controllo nelle impostazioni di prova, che sarebbe stata incomprensibile per la maggior parte degli utenti e sarebbe stata usata in modo improprio in un gran numero di casi.

È una soluzione normale specificare un periodo consapevolmente più lungo.

Un'altra soluzione - ordinare i test su un mese, e usare indicatori e dati di prezzo giornalieri (cioè, invece di PERIOD_CURRENT impostare esplicitamente PERIOD_D1).

 
muallch:

C'è anche la questione della disponibilità della storia non nei test, ma nell'auto-trading reale. Cosa dobbiamo fare in questo caso? Il tester può essere superato in astuzia...
Puoi scaricare tutta la storia disponibile. Controllare la documentazione per l'organizzazione dell'accesso ai dati
 

Grazie per il chiarimento!

Una nota a margine: sto testando con agenti remoti via internet. Perché gli agenti ottengono la cronologia completa dei minuti se sto testando ai prezzi del giorno di apertura? Il tempo di preparazione prima dell'inizio dei test è semplicemente osceno - un'ora, per esempio. Buono per quelli con un tubo da 10-100 megabit, ma qui sei seduto su un misero megabit...

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
Motivazione: