Erreurs, bugs, questions - page 645

 

Bonjour à tous !

Veuillez aider un débutant à comprendre l'utilisation des tableaux dans les classes. Découpez le code de la clé en un petit morceau pour représenter le problème :

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

Lorsque l'exécution obtient une erreur Array out of range dans la chaîne de la classe héritée, dans la classe parente j'obtiens le 0 attendu.

2012.02.13 00:41:25 2011.01.01 00:00:00 tableau hors limites dans 'test1.mq5' (29,36)
13.02.2012 00:41:25 01.01.2011 00:00:00 array[0]= 0.0

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

Je comprends que je passe (ou adresse) incorrectement un tableau à une classe héritière, bien qu'avec des variables normales il n'y ait pas d'erreur avec une telle manipulation.

Qu'est-ce que je fais de mal ?

 

J'ai vu ce message très souvent ces derniers temps lors de l'exécution de fichiers *.mq5:

Quel pourrait être le problème ?

 
Radix:

Bonjour, tout le monde !

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

Qu'est-ce que je fais de mal ?

Regardez, lorsque vous déclarez "second Csecond ;" dans la deuxième ligne, la méthode InitArray() n'est pas appelée, n'est-ce pas ? En même temps, l'objet Csecond lui-même a déjà été créé. Il s'avère donc que lorsque vous appelez l'objet "Csecond.Printer();", il fait référence au tableau non initialisé et non dimensionné Stf_ZZ_Val[].

 
Pouvez-vous me dire si la limite de 1000 barres de l'historique disponible à partir de la date de début (comme dans MT4) a été supprimée lors du test ?
 
muallch:

S'il vous plaît, dites-moi si la limite de 1000 barres d'historique disponible à partir de la date de début a été supprimée (comme dans MT4) pendant les tests ?

Expliquez ce que vous entendez par là.

Dans Five, les données de l'année précédente sont chargées à partir du début du test. Ainsi, si vous effectuez des tests à partir de 2012.02.01, les données seront chargées à partir de 2011.01.01.

La seule exception est le test sur les jours, les semaines et les mois - le début des données est calculé sur la base de la nécessité d'avoir 100 barres avant le début du test.

 
stringo:

Expliquez ce que vous entendez par là.

Lorsque l'on travaille à partir de 2011.01.01 sur des quotidiens, nous avons besoin d'un historique d'au moins 3000 mesures. Ainsi, nous devons fixer une période sciemment plus longue que celle nécessaire pour les tests et tracer le "point de départ" de manière programmatique. Quelle est la difficulté de fournir l'historique complet (ou sur demande) pendant le test ?
 
Il y a aussi la question de la disponibilité de l'historique non pas dans les tests, mais dans les transactions automatiques réelles. Que devons-nous faire dans ce cas ? Le testeur peut être plus malin...
 
muallch:
Lors de l'exécution, par exemple à partir de 2011.01.01 sur des données quotidiennes, nous avons besoin d'un historique d'au moins 3000 barres. En d'autres termes, nous devons fixer une période sciemment plus longue que celle dont nous avons besoin pour les tests, et suivre le "point de départ" de manière programmatique. Quelle est la difficulté de fournir l'historique complet (ou sur demande) pendant le test ?

Il n'y a aucune difficulté. Nous ne voulions pas introduire une case à cocher supplémentaire dans les paramètres de test, qui aurait été incompréhensible pour la plupart des utilisateurs et aurait été mal utilisée dans un grand nombre de cas.

Il est normal d'indiquer une période plus longue en connaissance de cause.

Une autre solution consiste à ordonner les tests sur un mois et à utiliser des indicateurs et des données de prix quotidiens (c'est-à-dire qu'au lieu de PERIOD_CURRENT, il faut définir explicitement PERIOD_D1).

 
muallch:

Il y a aussi la question de la disponibilité de l'historique non pas dans les tests, mais dans les transactions automatiques réelles. Que devons-nous faire dans ce cas ? Le testeur peut être plus malin...
Vous pouvez télécharger tous les historiques disponibles. Vérifiez la documentation relative à l'organisation de l'accès aux données
 

Merci pour cette précision !

Par ailleurs, j'effectue des tests avec des agents distants via l'internet. Pourquoi les agents ont-ils droit à l'historique complet des minutes si je fais des essais aux prix du jour d'ouverture? Le temps de préparation avant le début des tests est tout simplement obscène - une heure, par exemple. C'est bien pour ceux qui ont un tuyau de 10 à 100 mégabits, mais là, vous êtes assis sur un misérable mégabit...

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