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

 
jeremy10p100 # :
Bonjour et merci pour ta réponse j'ai pu faire un script qui répond à mes attentes malheureusement il reste deux erreurs que je n'arrive pas à comprendre et à corriger, saurais-tu à qui s'adresser pour un petit coup de main, il s'agit juste de deux lignes de code qui s'inscrivent en erreur après compilation...

Vous pouvez créer un emploi en freelance et choisir parmi les développeurs qui postulent pour votre emploi

https://www.mql5.com/fr/job

Applications de trading pour MetaTrader 5 à commander
Applications de trading pour MetaTrader 5 à commander
  • 2023.01.08
  • www.mql5.com
Le plus grand service de freelance avec des développeurs d'applications MQL5
 
#include <JAson.mqh>
CJAVal jv;

jv["type"] = "BTCUSD";
jv["title"] = "test";

int result;
char res_data[],post[];
ArrayResize(post,StringToCharArray(jv.Serialize(),post,0,WHOLE_ARRAY)-1);
string headers="Content-Type: application/json\r\nAccept: text/plain";
result=WebRequest("POST",url,headers,3000,post,res_data,res_headers);

En essayant d'envoyer du json via WebRequest, le serveur renvoie :"\u0022BTCUSD\u0022 is not a valid bundle type for denormalisation".

C'est-à-dire qu'il n'aime pas l'encodage des guillemets \u0022 .
J'ai essayé de spécifier toutes les variantes d'encodage dans les en-têtes et
StringToCharArray, mais rien n'y fait.

En python, tout se passe sans problème :
response = requests.post(url, data=json.dumps(data), headers=headers)
c'est-à-dire que tout se passe bien avec le serveur.

Comment résoudre le problème ?

 

Permettez-moi de reformuler la question un peu différemment. Est-il possible de donner à l'optimiseur une commande dans le bloc OnInit pour sauter la variante de test/optimisation sous certaines conditions.

input group "Входные настройки Стохастик"
input bool Stoch = false; // Стохастик включен/выключен
input int in_StochK = 14; // период основной линии K
input int in_StochD = 3; // период первичного сглаживания D
input int in_StochSlow = 3; // период окончательного сглаживания

int OnInit() {
if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0)))
   {
   // Некая команда, которая говорит, что такой вариант даже не стоит пробовать оптимизировать  
   }
}

J'ai essayé de le faire, mais cela conduit à des variantes d'optimisation incorrectes.

if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0))) 
   {
   
Print("Такой вариант тестирования не имеет смысла");
   return(INIT_FAILED);
   }

L'objectif est de pouvoir activer l'énumération des variantes de 4 paramètres stochastiques (Stoch, in_StochK, int in_StochD, int in_StochSlow) lors de l'optimisation.

  • Lorsque la stochastique est activée (Stoch = true), l'optimiseur énumère les variables in_StochK, in_StochD, in_StochSlow. Tout fonctionne correctement dans cette partie.
  • Lorsque la stochastique est désactivée (Stoch = false), l'optimiseur recherche toujours les variables in_StochK, in_StochD, in_StochSlow. Et je dois faire une sorte d'arrêt dans le code pour qu'il ne les recherche pas si Stoch = false.
 

Bonjour @taramortom.

Il serait probablement utile de remplacer

return(INIT_FAILED)

par

return(INIT_PARAMETERS_INCORRECT)
 
Yuriy Bykov #:

Bonjour, @taramortom.

Il serait probablement utile de remplacer

par

J'ai essayé. Cela ne fonctionne pas. L'optimiseur fonctionne toujours de manière incorrecte avec cette commande.
 

La raison pour laquelle l'optimiseur ne fonctionne pas correctement est peut-être due à cette imprécision dans le code :

if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0)))
 
Yuriy Bykov #:

La raison pour laquelle l'optimiseur ne fonctionne pas correctement est peut-être due à cette imprécision dans le code :


Ce n'est pas la raison. J'ai créé le code pour donner un exemple de la logique de fonctionnement. La version complète du code est trop volumineuse - il y a beaucoup d'oscillateurs différents. Lors de l'optimisation, je veux que l'optimiseur essaie différentes combinaisons (un oscillateur allumé, deux oscillateurs allumés, trois oscillateurs allumés, etc.)

- En utilisant cette restriction, l'optimiseur termine rapidement son travail avec un petit nombre de passes, alors qu'il devrait y en avoir un très grand nombre.

- Sans cette restriction, l'optimiseur fonctionne mieux, mais produit beaucoup de variantes vides (pour l'exemple ci-dessus - il recherche toujours ses paramètres lorsque la stochastique est désactivée). Il est bon d'avoir des variantes vides, mais cela représente à la fois du temps supplémentaire pour l'optimisation et des passes vides au lieu de passes utiles.

 
Utilisez-vous l'optimisation génétique ou complète ?
J'ai également utilisé cette approche pour exclure les combinaisons de paramètres manifestement inutiles et je n'ai pas remarqué de performances incorrectes de l'optimiseur. Au contraire, l'optimiseur a fonctionné exactement comme prévu.
Vous pouvez essayer d'enregistrer les combinaisons de paramètres manquées dans la base de données ou dans un fichier commun afin de vérifier combien et lesquelles sont réellement manquées et d'en comprendre les raisons.
 

Bonjour, j'écris un indicateur basé sur le MA - ExtJawsHandle=iMA(NULL,0,Period,0,Method,AppliedPrice) ;

Comment puis-je accéder de manière programmatique aux niveaux de MA, comme indiqué dans la figure ci-dessous.

Une construction du type

IndicatorSetInteger(INDICATOR_LEVELS,1) ;

IndicatorSetDouble(INDICATOR_LEVELVALUE,0,10) ;

ne fonctionne pas.


 
Tango_X IndicatorSetInteger(INDICATOR_LEVELS,1) ;

IndicatorSetDouble(INDICATOR_LEVELVALUE,0,10) ;

ne fonctionne pas.


pas d'options ?)

Raison: