Questions d'un "mannequin - page 6

 
pusheax:

Certains DCs de comptes réels attribuent toutes sortes de préfixes comme "." ou "FXF" aux noms des symboles.

Comment puis-je utiliser ces préfixes ?

Je l'ai fait :

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -ne fonctionne pas

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -Cela ne fonctionne pas comme ça non plus.

tout ce que j'obtiens est FXF au lieu de l'AUDCADFXF requis.

Pouvez-vous m'indiquer comment mettre en œuvre ce système ?


Premièrement, le remplissage d'un tableau avec une énumération n'est possible que dans la portée globale, donc aucun + ne fonctionnera à cet endroit, seulement des constantes de type chaîne.

Deuxièmement, vous avez un tableau statique qui n'est pas distribué, alors qu'un tableau dynamique ne peut pas être rempli avec un enum.

Le moyen le plus simple est d'écrire une fonction qui distribue et remplit un tableau dynamique, elle peut tout faire, ajouter des définitions aux constantes, etc.

 
Urain:

Tout d'abord, remplir un tableau avec une énumération n'est possible que dans la portée globale, donc aucun + ne fonctionnera à cet endroit, seulement des constantes de chaîne.

Deuxièmement, vous n'avez pas distribué de tableau statique, et un tableau dynamique ne peut pas être rempli par une énumération.

Le plus simple est d'écrire une fonction qui distribue et remplit le tableau dynamique, elle peut tout faire, ajouter des définitions avec des constantes, etc.

Vous pouvez également essayer de rechercher toutes les paires de devises existant dans BC/BROKER et analyser les devises composées dans celles-ci.

Ensuite, vous pouvez créer un tableau dynamique de paires de devises en tenant compte de l'ajout de tout préfixe.

Autant que je me souvienne, c'est l'une des options universelles pour MT5.

 
Urain:

Tout d'abord, remplir un tableau avec une énumération n'est possible que dans la portée globale, donc aucun + ne fonctionnera à cet endroit, seulement des constantes de chaîne.

Deuxièmement, vous n'avez pas distribué de tableau statique, et un tableau dynamique ne peut pas être rempli par une énumération.

Le plus simple est d'écrire une fonction qui distribuera et remplira le tableau dynamique, elle peut tout faire, ajouter des définitions aux constantes, etc.

En bref, si je vous ai bien compris, vous ne pouvez pas créer un tableau statique de chaînes de constantes composées dans la portée globale, n'est-ce pas ?

 
uncleVic:

Vous pouvez voir le code dans le code source. Deux méthodes sont utilisées pour trouver la divergence :

1. La méthode bool CSignalMACD::ExtState(int ind) prépare les données pour la recherche ;

2. La méthode bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) recherche un modèle de marché avec les paramètres spécifiés.

Si cela peut aider, voici les commentaires des méthodes en russe :

Pour la méthode bool CSignalMACD::ExtState(int ind)

Pour la méthode bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)

J'ai également une question - comment spécifier la variante de divergence lors de la création d'un conseiller expert utilisant le signal MACD ? Il existe plusieurs variantes du signal dans le livre de référence.
 
strelec:
J'ai aussi une question, comment spécifier la variante de divergence lors de la création d'un Expert Advisor utilisant le signal MACD ? Il existe plusieurs variantes de signaux dans le manuel.

Comme tout le monde l'a déjà remarqué, tout signal peut détecter plusieurs modèles de marché. Pour contrôler l'utilisation des motifs , appelez la méthode PatternsUsage(int value), où value est la carte de bits de l'utilisation du motif (le numéro de bit et le numéro de motif sont identiques). Le bit est 1 - le modèle est utilisé, le bit est 0 - le modèle n'est pas utilisé (par défaut, tous les bits sont 1). La numérotation des modèles ainsi que des bits commence à 0.

Ainsi, si vous souhaitez utiliser uniquement la divergence, vous devez utiliser PatternsUsage(16) ;. Pourquoi 16 ans ? 16 est binaire 10000b (c'est-à-dire que le bit 4 est 1, tous les autres bits sont 0). Et juste le modèle 4 "divergence de l'oscillateur et du prix".

Le seul "mais", c'est que vous devrez le faire "manuellement".

Une fois l'assistant terminé, le code source sera ouvert dans l'éditeur. Trouvez un endroit comme celui-ci dans l'éditeur :

//--- Creating filter CSignalMACD
   CSignalMACD *filter0=new CSignalMACD;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodFast(Signal_MACD_PeriodFast);
   filter0.PeriodSlow(Signal_MACD_PeriodSlow);
   filter0.PeriodSignal(Signal_MACD_PeriodSignal);
   filter0.Applied(Signal_MACD_Applied);
   filter0.Weight(Signal_MACD_Weight);

et ajoutez une ligne

filter0.PatternsUsage(16) ;

vous l'aurez :

//--- Creating filter CSignalMACD
   CSignalMACD *filter0=new CSignalMACD;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PatternsUsage(16);
   filter0.PeriodFast(Signal_MACD_PeriodFast);
   filter0.PeriodSlow(Signal_MACD_PeriodSlow);
   filter0.PeriodSignal(Signal_MACD_PeriodSignal);
   filter0.Applied(Signal_MACD_Applied);
   filter0.Weight(Signal_MACD_Weight);

C'est tout pour le moment. Si vous avez des questions, n'hésitez pas à me contacter.

 
uncleVic:

Comme tout le monde l'a déjà remarqué, tout signal peut détecter plusieurs modèles de marché. Pour contrôler l'utilisation des motifs , appelez la méthode PatternsUsage(int value), où value est un bitmap de l'utilisation des motifs (le numéro du bit et le numéro du motif sont identiques). Le bit est 1 - le modèle est utilisé, le bit est 0 - le modèle n'est pas utilisé (par défaut, tous les bits sont 1). La numérotation des modèles ainsi que les bits commencent à partir de 0.

Ainsi, si vous souhaitez uniquement utiliser la divergence, vous devez utiliser PatternsUsage(16) ;. Pourquoi 16 ans ? 16 est 10000b en binaire (c'est-à-dire que le bit 4 est 1, les autres bits sont 0). Et juste le modèle 4 "divergence de l'oscillateur et du prix".

Le seul "mais", c'est que vous devrez le faire "manuellement".

Une fois l'assistant terminé, le code source sera ouvert dans l'éditeur. Trouvez un endroit comme celui-ci dans l'éditeur :

et ajoutez une ligne

filter0.PatternsUsage(16) ;

vous l'aurez :

C'est tout pour le moment. Si vous avez des questions, n'hésitez pas à me contacter.

Merci. Je l'ai. Et il y a d'autres questions tout de suite. Dans cette variante de divergence, quel intervalle de temps entre des pics (creux) voisins est pris en compte ?
 
strelec:
Merci. Ça a marché. Et il y a d'autres questions tout de suite. Dans cette variante de divergence, quel intervalle de temps entre des sommets (creux) voisins est pris en compte ?
L'intervalle n'est pas analysé.
 

J'ai un expert avec lequel j'essaie de faire face aux événements.

string event[10]=
{
"CHARTEVENT_KEYDOWN - событие нажатия клавиатуры, когда окно графика находится в фокусе",
"CHARTEVENT_OBJECT_CREATE — событие создания графического объекта",
"CHARTEVENT_OBJECT_CHANGE — событие изменения свойств объекта через диалог свойств",
"CHARTEVENT_OBJECT_DELETE — событие удаления графического объекта",
"CHARTEVENT_CLICK — cобытие щелчка мыши графике",
"CHARTEVENT_OBJECT_CLICK — событие щелчка мыши на графическом объекте, принадлежащего графику",
"CHARTEVENT_OBJECT_DRAG — событие перемещения графического объекта при помощи мыши",
"CHARTEVENT_OBJECT_ENDEDIT — событие окончания редактирования текста в поле ввода графического объекта LabelEdit",
"CHARTEVENT_CHART_CHANGE  — событие изменения графика",
"CHARTEVENT_CUSTOM+n — идентификатор пользовательского события, где n находится в диапазоне от 0 до 65535"
};
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   Print("id=(",id,") -- ",event[id],"  lparam=",lparam,"   dparam=",dparam,"   sparam=", sparam);
  }
//+------------------------------------------------------------------+

Je reçois des événements qui ne correspondent pas à des actions.

Correspondant exactement à un clic sur le graphique et à un clic sur un bouton

Un événement controversé id=9(CHARTEVENT_CUSTOM), qui est généré lorsque, par exemple, le graphique est déplacé et qu'il y a environ 10 événements similaires.

L'événementCHARTEVENT_OBJECT_ENDEDIT n'a pas été vérifié.

Tout le reste n'est pas clair. Soit la description ne correspond pas au numéro de l'événement, soit l'événement de création d'un objet est généré de manière incorrecte lors de la création manuelle d'un objet.

En général, aidez-nous.

 
kPVT:

J'ai un expert avec lequel j'essaie de faire face aux événements.

Je reçois des événements qui ne correspondent pas à des actions.

Correspondant exactement à un clic sur le graphique et à un clic sur un bouton

Un événement controversé id=9(CHARTEVENT_CUSTOM), qui est généré lorsque, par exemple, le graphique est déplacé et qu'il y a environ 10 événements similaires.

L'événementCHARTEVENT_OBJECT_ENDEDIT n'a pas été vérifié.

Tout n'est pas clair avec tout le reste. Soit la description ne correspond pas au numéro de l'événement, soit l'événement de création d'un objet est généré de manière incorrecte lors de la création manuelle de l'objet.

Dans l'ensemble, aidez-nous, s'il vous plaît.

Vous affectez initialement des correspondances numériques aux constantes numériques déjà affectées CHARTEVENT_XXXXXXXX...

le problème est le suivant :

event[id]

vous devez le faire :

//--- нажатие мышкой на графическом объекте
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
     }
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
 
kPVT:

Les autres ne sont pas claires. Soit la description ne correspond pas au numéro de l'événement, soit l'événement de création d'un objet, par exemple, n'est pas généré correctement lorsque l'objet est créé manuellement.

Malheureusement, votre question n'est pas claire. Qu'est-ce qui ne va pas exactement ?

Raison: