Fehler, Irrtümer, Fragen - Seite 645

 

Hallo zusammen!

Bitte helfen Sie einem Neuling, die Verwendung von Arrays in Klassen zu verstehen. Schneiden Sie den Schlüsselcode in ein kleines Stück, um das Problem darzustellen:

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);
  }

Beim Ausführen wird ein Fehler Array außerhalb des Bereichs in der Zeichenfolge der geerbten Klasse, in der übergeordneten Klasse erhalte ich die erwartete 0.

2012.02.13 00:41:25 2011.01.01 00:00:00 Array außerhalb des Bereichs 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]);}

Ich verstehe, dass ich fälschlicherweise ein Array an eine Erbenklasse übergebe (oder adressiere), obwohl bei normalen Variablen kein Fehler bei einer solchen Behandlung auftritt.

Was mache ich falsch?

 

Ich sehe diese Meldung in letzter Zeit sehr oft, wenn ich *.mq5-Dateien ausführe:

Was könnte das Problem sein?

 
Radix:

Hallo zusammen!

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

Was mache ich falsch?

Wenn Sie "second Csecond;" in der zweiten Zeile deklarieren, wird die Methode InitArray() nicht aufgerufen, richtig? Gleichzeitig wurde das Csecond-Objekt selbst bereits erstellt, so dass sich beim Aufruf der Funktion "Csecond.Printer();" bezieht sich auf das nicht initialisierte und undimensionale Array Stf_ZZ_Val[].

 
Können Sie mir bitte sagen, ob die 1000-Bar-Grenze der verfügbaren Historie ab dem Startdatum (wie in MT4) beim Testen entfernt wurde?
 
muallch:

Bitte sagen Sie mir, ob die Begrenzung auf 1000 verfügbare Balken ab dem Startdatum während der Testphase aufgehoben wurde (wie in MT4)?

Erklären Sie, was Sie damit meinen?

In Five werden die Daten aus dem Vorjahr ab Beginn der Prüfung geladen. Wenn Sie also ab 2012.02.01 testen, werden die Daten ab 2011.01.01 geladen.

Die einzige Ausnahme ist die Prüfung an Tagen, Wochen und Monaten - der Beginn der Daten wird hier auf der Grundlage der Notwendigkeit berechnet, 100 Balken vor Beginn der Prüfung zu haben.

 
stringo:

Erklären Sie, was Sie damit meinen.

Wenn wir z.B. ab 2011.01.01 auf Tageszeitungen laufen, benötigen wir eine Historie von mindestens 3000 Takten. Wir müssen also einen bewusst längeren Zeitraum als den für die Prüfung benötigten festlegen und den "Startpunkt" programmatisch verfolgen. Wie schwierig ist es, die gesamte Anamnese (oder auf Anfrage) während der Prüfung vorzulegen?
 
Es stellt sich auch die Frage nach der Verfügbarkeit der Historie nicht in Tests, sondern im realen Autohandel. Was sollten wir in diesem Fall tun? Der Prüfer kann überlistet werden...
 
muallch:
Wenn wir z.B. ab dem 01.01.2011 mit täglichen Daten arbeiten, benötigen wir eine Historie mit mindestens 3000 Balken. Mit anderen Worten, wir müssen einen bewusst längeren Zeitraum festlegen, als wir für die Prüfung benötigen, und den "Startpunkt" programmatisch verfolgen. Wie schwierig ist es, die gesamte Anamnese (oder auf Anfrage) während der Prüfung vorzulegen?

Es gibt überhaupt keine Schwierigkeiten. Wir wollten kein zusätzliches Kontrollkästchen in den Testeinstellungen einführen, das für die meisten Benutzer unverständlich gewesen wäre und in vielen Fällen missbraucht worden wäre.

Es ist eine normale Lösung, einen bewusst längeren Zeitraum anzugeben.

Eine andere Lösung ist, die Tests auf monatlicher Basis zu bestellen und tägliche Indikatoren und Preisdaten zu verwenden (d. h. statt PERIOD_CURRENT explizit PERIOD_D1 einzustellen).

 
muallch:

Es stellt sich auch die Frage nach der Verfügbarkeit der Historie nicht in Tests, sondern im realen Autohandel. Was sollten wir in diesem Fall tun? Der Prüfer kann überlistet werden...
Sie können alle verfügbaren Historien herunterladen. Schauen Sie sich die Datenzugriffsorganisation in der Dokumentation an
 

Danke für die Klarstellung!

Nebenbei bemerkt: Ich teste mit Remote-Agenten über das Internet. Warum erhalten Agenten den gesamten Minutenverlauf, wenn ich zu den Preisen des Eröffnungstages teste? Die Vorbereitungszeit vor Beginn der Prüfungen ist einfach unverschämt - eine Stunde zum Beispiel. Gut für diejenigen mit einer 10-100-Megabit-Leitung, aber hier sitzt man auf einem mickrigen Megabit...

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