Questions des débutants MQL5 MT5 MetaTrader 5 - page 614

 
newnek:

Bonjour, pourriez-vous me diresi j'ai besoin du paramètre Parameter=Ka,int,21 dans le signal de la bibliothèque standard?

Sélectionné dans le processus d'optimisation à partir de l'énumération du type

Mais, lorsque le signal disparaît de la sélection lors de la génération de l'EA, mais qu'il se compile normalement, il est difficile de tirer des conclusions - qu'est-ce qui ne va pas ......, aide avec le code, n'y avait-il pas déjà une implémentation ?

p.s. Je dois changer int en intTypeà chaque fois dans l'EA finale .

Spécifiez le fichier exact du module de signal et la ligne de code...
 
Karputov Vladimir:
Spécifiez le fichier exact du module de signal et la ligne de code...

Par exemple, voici une partie du code supérieur SignalRVI.mqh. Dans ce cas, il disparaît de la sélection des signaux lorsque je change le type int en intType

Si la portée est mauvaise, je la mets dans un fichier séparé avec une énumération #include <Libraries\myfunc.mqh>.
//+------------------------------------------------------------------+
//|                                                    SignalRVI.mqh |
//|                   Copyright 2009-2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertSignal.mqh>
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=----------------Signals of oscillator 'Relative Vigor Index'               |
//| Type=SignalAdvanced                                              |
//| Name=Relative Vigor Index                                        |
//| ShortName=RVI                                                    |
//| Class=CSignalRVI                                                 |
//| Page=signal_rvi                                                  |
//| Parameter=PeriodRVI,intType,15,Period of calculation                 |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CSignalRVI.                                                |
//| Purpose: Class of generator of trade signals based on            |
//|          the 'Relative Vigor Index' oscillator.                  |
//| Is derived from the CExpertSignal class.                         |
//+------------------------------------------------------------------+
enum intType
  {
   p0 = 15, 
   p1 = 21, 
   p2 = 29 
}
;
class CSignalRVI : public CExpertSignal
  {
protected:
   CiRVI             m_rvi;            // object-oscillator
   //--- adjusted parameters
   intType               m_periodRVI;      // the "period of calculation" parameter of the oscillator
   //--- "weights" of market models (0-100)
   int               m_pattern_0;      // model 0 "the oscillator has required direction"
   int               m_pattern_1;      // model 1 "crossing of main and signal line"

public:
                     CSignalRVI(void);
                    ~CSignalRVI(void);
   //--- methods of setting adjustable parameters
   void              PeriodRVI(intType value)            { m_periodRVI=value;                 }
   //--- methods of adjusting "weights" of market models
   void              Pattern_0(int value)            { m_pattern_0=value;                 }
   void              Pattern_1(int value)            { m_pattern_1=value;                 }
   //--- method of verification of settings
   virtual bool      ValidationSettings(void);
   //--- method of creating the indicator and timeseries
   virtual bool      InitIndicators(CIndicators *indicators);
   //--- methods of checking if the market models are formed
   virtual int       LongCondition(void);
   virtual int       ShortCondition(void);

protected:
   //--- method of initialization of the oscillator
   bool              InitRVI(CIndicators *indicators);
   //--- methods of getting data
   double            Main(int ind)                   { return(m_rvi.Main(ind));           }
   double            DiffMain(int ind)               { return(Main(ind)-Main(ind+1));     }
   double            Signal(int ind)                 { return(m_rvi.Signal(ind));         }
   double            DiffSignal(int ind)             { return(Signal(ind)-Signal(ind+1)); }
   double            DiffMainSignal(int ind)         { return(Main(ind)-Signal(ind));     }
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CSignalRVI::CSignalRVI(void) : m_periodRVI(15),
                               m_pattern_0(60),
                               m_pattern_1(100)
  {
  }
 
newnek:

Bonjour, pourriez-vous me diresi j'ai besoin du paramètre Parameter=Ka,int,21 dans le signal de la bibliothèque standard?

Sélectionné dans le processus d'optimisation à partir de l'énumération du type

Mais, lorsque le signal disparaît de la sélection lors de la génération de l'EA, mais qu'il se compile normalement, il est difficile de tirer des conclusions - qu'est-ce qui ne va pas ......, aide avec le code, n'y avait-il pas déjà une implémentation ?

p.s. Je dois changer int en intType à chaque fois dans l'EA finale.

Vous n'avez rien à changer - il suffit de générer votre Expert Advisor basé sur l'indicateur "Relative Vigor Index", puis dans le testeur de stratégie, dans l'onglet "Paramètres", sélectionnez une des optimisations, allez dans l'onglet "Paramètres" et définissez l'intervalle et la valeur du paramètre "Relative Vigor Index(10) Period of calculation" :

RVI

Mais comme vous ne voulez utiliser que trois valeurs de l'intervalle 15-29, vous devez écrire une condition de contrôle dans OnInit():

//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Signal_RVI_PeriodRVI!=15 && Signal_RVI_PeriodRVI!=21 && Signal_RVI_PeriodRVI!=29)
      return(INIT_PARAMETERS_INCORRECT);
//--- Initializing expert

Après avoir exécuté l'optimisation, vous pouvez voir que le testeur n'a fonctionné que pour les paramètres 15, 21 et 29 :

Optimisation sélective

 
Karputov Vladimir:

Vous n'avez rien à changer - il suffit de générer votre Expert Advisor basé sur l'indicateur "Relative Vigor Index", puis de sélectionner une des optimisations dans le Testeur de Stratégie, d'aller dans l'onglet "Paramètres" et de définir l'intervalle et les valeurs pour le paramètre "Relative Vigor Index(10) Period of calculation" :


Mais comme vous ne voulez utiliser que trois valeurs de l'intervalle 15-29, vous devez écrire une condition de contrôle dans OnInit():

Après avoir exécuté l'optimisation, vous pouvez voir que le testeur n'a fonctionné que pour les paramètres 15, 21 et 29 :

Merci, je comprends votre idée, très intéressante, mais il y aura beaucoup d'étapes perdues (mais probablement pas de temps perdu non plus). J'ai réussi à passer manuellement au type enum dans l'EA générée. Et je voudrais l'automatiser encore plus.
 
newnek:
Merci, j'ai compris votre idée, très intéressante, mais il y aura beaucoup d'étapes perdues (bien que cela ne perde probablement pas de temps non plus). J'ai réussi à changer manuellement le type enum dans l'EA générée. Et je voudrais l'automatiser encore plus.
Il y aura des étapes vides, mais elles ne prennent pas de temps, car OnInit() sera quitté pour non-conformité de la condition et l'étape suivante de l'optimisation sera lancée immédiatement.
 

Bon après-midi... Je suis moi-même un programmeur C++. J'ai décidé de m'essayer dans ce domaine récemment... Je veux écrire un Expert Advisor ou un Conseiller Expert, ma stratégie est OK, ma plateforme est MT4... Je suis donc confronté à ce problème, j'utilise dans mon conseiller expert MACD..... Je vais l'écrire sous peu...

Par exemple, je crée un nouveau modèle EA, j'ajoute x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) ; et disons qu'il n'y a rien d'autre... Je compile, je teste, tout est OK, à la fin du test, affiche un graphique macd avec les paramètres spécifiés, tout est OK.

La deuxième option - je crée un nouveau modèle EA dans le OnTick, ajouter un indicateur tiers RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0) ; compiler, tester, tout est OK, mais !Lorsque je termine le test ou que j'annule le test dans la fenêtre des milliers de ces indicateurs, je comprends qu'à chaque tick un nouvel indicateur est créé ... Je ne comprends pas pourquoi, car le MAKD standard naît une fois et c'est tout ...

Quelqu'un peut-il expliquer le problème... J'essaie d'expliquer le problème avec les autres indicateurs non standard...

P.S. c'est mon premier message... Ne me reprochez pas de ne pas avoir trouvé le moyen de cacher la photo sous un spoiler.

Capture d'écran
 

Je ne sais pas de quoi il s'agit mais j'ai trouvé une solution...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0) ;- dessine le graphique par tick

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, un graphique, seules les données de la variableRSICur sont mises à jour par tick...Quelle est la logique que je ne comprends pas, en principe ça me suffit, mais j'aimerais comprendre pourquoi ça ne fonctionne bien qu'avec les paramètres par défaut....

 
Игорь Марин:

Bon après-midi... Je suis moi-même un programmeur C++. J'ai décidé de m'essayer dans ce domaine récemment... Je veux écrire un Expert Advisor ou un Conseiller Expert, ma stratégie est OK, ma plateforme est MT4... Je suis donc confronté à ce problème, j'utilise dans mon conseiller expert MACD..... Je vais l'écrire sous peu...

Par exemple, je crée un nouveau modèle EA, j'ajoute x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) ; et disons qu'il n'y a rien d'autre... Je compile, je teste, tout est OK, à la fin du test, affiche un graphique macd avec les paramètres spécifiés, tout est OK.

La deuxième option - je crée un nouveau modèle EA dans le OnTick, ajouter un indicateur tiers RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0) ; compiler, tester, tout est OK, mais !Lorsque je termine le test ou que j'annule le test dans la fenêtre des milliers de ces indicateurs, je comprends qu'à chaque tick un nouvel indicateur est créé ... Je ne comprends pas pourquoi, car le MAKD standard naît une fois et c'est tout ...

Quelqu'un peut-il expliquer le problème... J'essaie d'utiliser le même problème avec un autre indicateur non standard...

P.S. c'est mon premier message... Ne me grondez pas pour ne pas avoir trouvé le moyen de cacher la photo sous le spoiler.

La photo est OK, elle n'est pas cachée.

Avez-vous écrit ceci My_Induk ou l'avez-vous trouvé quelque part ? Je comprends que l'indicateur est de travers. Si vous avez le code source, postez-le - voyons quel est le problème.

 
Игорь Марин:

Je ne sais pas de quoi il s'agit mais j'ai trouvé une solution...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0) ;- dessine le graphique par tick

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, un graphique, seules les données de la variableRSICur sont mises à jour par tick...Quelle est la logique que je ne comprends pas, en principe ça me suffit, mais j'aimerais comprendre pourquoi ça ne fonctionne bien qu'avec les paramètres par défaut....

Cela se produit lorsque vous n'avez pas transmis correctement les paramètres de l'indicateur.
 
Alexey Volchanskiy:

La photo est OK, il n'y a pas de cachette ici.

Avez-vous écrit ceci My_Induk ou l'avez-vous trouvé quelque part ? Je suppose que l'indicateur est de travers. Si vous avez le code source, postez-le - voyons quel est le problème.

Vladislav Andruschenko:
Cela se produit lorsque vous n'avez pas transmis correctement les paramètres de l'indicateur.

Merci. J'ai trouvé la solution... J'ai farfouillé toute la journée et je n'ai pas réussi à comprendre... Je suis moi-même un programmeur, mais ça arrive... J'ai fait une erreur de syntaxe, j'ai dû passer les paramètres de couleur entre guillemets lors de l'appel de l'indicateur...

iCustom(NULL,0,"My_Induk",14,1,0,21,1,65,35,"DodgerBlue","Magenta",50,50,"Red","Green",0,0);

c'est ce qui a causé ce dysfonctionnement... ) Merci ! !! Il y aura sûrement d'autres questions !!!