Bibliothèque: Expert - page 10

 

Ce qui n'est pas intuitif, c'est que les tableaux de paramètres et de noms renvoient des tailles différentes, parce qu'il n'y a pas de paramètre null dans les noms, qui représente le nom du conseiller expert.

J'aimerais également connaître le type réel des paramètres, car "string" est renvoyé partout. Je ne sais pas comment le faire - de manière frontale : analyser le contenu de la chaîne et sa réductibilité à un nombre à virgule flottante ou à un entier, mais si le paramètre stocke "0", son type ne peut pas être identifié.

 
Stanislav Korotky:

Ce qui n'est pas intuitif, c'est que les tableaux parameter et name renvoient des tailles différentes parce qu'il manque dans les names un paramètre null représentant le nom du conseiller expert.

Oui, ce n'est pas très agréable. Peut-être aurions-nous dû créer un faux élément null pour Names[].

J'aimerais également connaître le type réel des paramètres, car pour l'instant, c'est "string" qui est renvoyé partout. Je ne sais pas comment fournir cela - la façon de le faire frontalement : analyser le contenu de la chaîne et sa réductibilité à un nombre à virgule flottante ou à un entier, mais si le paramètre stocke "0", vous ne pouvez pas identifier son type.

J'ai considéré que ce n'était pas nécessaire dans la bibliothèque, car il y a toujours des ENUMs personnalisés. De plus, je n'ai pas vu de tâche où cela pourrait être nécessaire.

Je créais mon propre optimiseur automatique. Ce n'était pas utile dans ce cas.

 
fxsaber:

Oui, ce n'est pas très joli. Peut-être auriez-vous dû créer un faux élément null pour Names[].

J'ai considéré que ce n'était pas nécessaire dans la bibliothèque, parce qu'il y a aussi des ENUMs personnalisés. De plus, je n'ai pas vu de tâche où cela pourrait être nécessaire.

Je créais mon propre optimiseur automatique. Il n'était pas utile dans ce cas.

Les fonctions ParameterGetRange/ParameterSetRange ne sont définies que pour les types long et double, de sorte que la boucle de paramètres ne doit analyser et modifier les paramètres que pour les nombres.

 
Stanislav Korotky:

Les fonctions ParameterGetRange/ParameterSetRange ne sont définies que pour les types long et double, respectivement, la boucle sur les paramètres exige d'analyser et de modifier les paramètres uniquement pour les nombres.

Lestypes entiers sont bool, enums.

 
fxsaber:

Lestypes entiers sont bool, enums.

C'est normal. Il n'est pas normal que tout soit désormais représenté par des chaînes de caractères et qu'il soit impossible de distinguer les vraies chaînes.

 
Stanislav Korotky:

C'est normal. Il n'est pas normal que tout soit désormais représenté par des chaînes de caractères et qu'il soit impossible de trier les véritables chaînes.

Les paramètres à optimiser sont numérotés à l'avance. Il n'y a donc aucune chaîne de caractères parmi eux. On peut donc s'en servir comme d'un filtre.

 

Bonjour, je n'arrive pas à comprendre comment ouvrir sur un expert avec un trade autorisé

ce code s'ouvre normalement avec les entrées que je passe.

   Params[0].string_value = "Experts\\Shared Projects\\luipaulo89\\experts\\PullbackEA_v2.ex5";
// Le premier paramètre d'entrée du conseiller expert
   Params[1].type = TYPE_STRING;
   Params[1].string_value = "Hello World!";
   Params[2].type = TYPE_INT;
   Params[2].integer_value = 0;
// Sur un nouveau graphique, lancer l'Expert Advisor
   if (inpFirst==1) EXPERT::Run(ChartOpen(_Symbol, _Period), Params);

Si j'utilise ce code

   Params[0].string_value = "Experts\\Shared Projects\\luipaulo89\\experts\\PullbackEA_v2.ex5";
   Params[0].string_value += "\nexpertmode=5";
// Le premier paramètre d'entrée du conseiller expert
   Params[1].type = TYPE_STRING;
   Params[1].string_value = "Hello World!";
   Params[2].type = TYPE_INT;
   Params[2].integer_value = 0;
// Sur un nouveau graphique, lancer l'Expert Advisor
   if (inpFirst==1) EXPERT::Run(ChartOpen(_Symbol, _Period), Params);

il s'ouvre avec le trade autorisé mais ne passe pas de paramètres.

La tâche est d'ouvrir le même Expert Advisor sur un nouveau graphique.

input group "EA Settings"
input int inpFirst = 1;//première instance ;

Pour que seul le premier Expert Advisor puisse en ouvrir de nouveaux, je passe 0 aux nouveaux, mais malheureusement, dans la deuxième variante (lorsque le commerce est autorisé), aucun paramètre n'est passé (ou passé de manière incorrecte).

inpFirst = 0;
 

dans le fichier tpl, l'en-tête est créé parfaitement, mais pour une raison quelconque, il ne passe pas le paramètre

<expert>
name=PullbackEA_v2
path=Experts\Shared Projects\luipaulo89\experts\PullbackEA_v2.ex5
expertmode=5
<inputs>
inpFirst=1

qui devrait être inpFirst=0

   Params[1].type = TYPE_INT;
   Params[1].integer_value = 0;
 
Aleksei Beliakov:

Mettre à jour la bibliothèque.

Tester le conseiller expert.

input group "EA Settings"
input int inpFirst = 1;//première instance ;

void OnInit() {}


Exemple1.

#include <fxsaber\Expert.mqh>

void OnStart()
{
  MqlParam Params[3];

  // Parcours pour devenir conseiller
  Params[0].string_value = "Experts\\Test6.ex5";
  Params[0].string_value += "\nexpertmode=5";

  // groupe d'entrée "EA Settings"
  Params[1].type = TYPE_STRING;
  Params[1].string_value = NULL;

  // entrée inpFirst
  Params[2].type = TYPE_INT;
  Params[2].integer_value = 123;

  EXPERT::Run(ChartOpen(_Symbol, PERIOD_CURRENT), Params); // Ne sera pas en mesure de faire fonctionner correctement le conseiller expert sur son propre graphique.
}


Exemple2.

#include <fxsaber\Expert.mqh>

void OnStart()
{
  MqlParam Params[3];

  // Parcours pour devenir conseiller
  Params[0].string_value = "Experts\\Test6.ex5";
  Params[0].string_value += "\nexpertmode=5";
  
  // groupe d'entrée "EA Settings"
  Params[1].type = TYPE_STRING;
  Params[1].string_value = NULL;
  EXPERT::AddInputName(Params[1], " "); // Probl.

  // entrée inpFirst
  Params[2].type = TYPE_INT;
  Params[2].integer_value = 123;
  EXPERT::AddInputName(Params[2], "inpFirst");

  EXPERT::Run(0, Params); // Il sera possible de faire fonctionner correctement l'Expert Advisor sur son propre graphique.
}
 
Merci, vous êtes les meilleurs, comme toujours !