[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 60

 
TheXpert >> :

Souvenirs ! Une particularité de l'implémentation des chaînes de caractères. Une fois le tableau redimensionné, il faut le parcourir et le remettre à zéro :

Je peux me tromper mais ça devrait aider.

Merci pour la réponse. Je l'ai essayé, mais malheureusement ça n'a pas aidé. La mise à zéro fonctionne avant que nous commencions à faire quelque chose avec le tableau. Et la mise à zéro se fait par l'affectation explicite de la chaîne VALUE, alors que dans le cas que j'ai indiqué, les éléments du tableau se voient affecter le résultat de la fonction (qui devrait renvoyer une VALUE de type chaîne) mais renvoie en fait une RÉFÉRENCE à l'adresse de la chaîne en mémoire, ce qui me semble incorrect. Et le résultat avec des valeurs identiques est dû au fait que la fonction est appelée plusieurs fois de suite et qu'après chaque appel, le suivant utilise en fait la même mémoire, en y mettant de nouvelles données. Si nous effectuons des manipulations entre les appels (appels de n'importe quelle fonction, déclaration de variables, etc.), le résultat sera probablement encore pire, à savoir que les valeurs des éléments du tableau de chaînes pointeront vers des déchets en mémoire.


J'aimerais que les développeurs de mql4 commentent cette situation et expliquent la manière correcte de travailler avec les tableaux de chaînes, si possible.

 
xruss писал(а) >>
y a-t-il une sorte d'erreur ?

Le dernier ordre clôturé de l'historique est sélectionné et son type est affecté à la variable ORDtype avant que le signal d'ouverture ne soit généré. C'est-à-dire que si l'historique n'est pas vide, alors ORDtype ne sera évidemment pas égal à -1. Par conséquent, la condition pour que le signal apparaisse n'est pas remplie puisque

if ((ORDtype==-1)&&(...))

 
Everlost >> :

Le dernier ordre clôturé de l'historique est sélectionné et son type est affecté à la variable ORDtype avant que le signal d'ouverture ne soit généré. C'est-à-dire que si l'historique n'est pas vide, alors ORDtype ne sera évidemment pas égal à -1. Par conséquent, la condition d'apparition du signal n'est pas remplie puisque

if ((ORDtype==-1)&&(...))

Et un autre problème - les positions ne sont pas ouvertes même si l'historique est vide ((

 
Yug >> :

Merci pour la réponse. Je l'ai essayé, mais malheureusement ça n'a pas aidé. La mise à zéro fonctionne avant de commencer à faire quoi que ce soit avec le tableau. Et la mise à zéro se fait par l'affectation explicite de la chaîne VALUE, alors que dans le cas que j'ai signalé, les éléments du tableau se voient affecter le résultat de la fonction (qui devrait renvoyer une VALUE de type chaîne) mais renvoie en fait une RÉFÉRENCE à l'adresse de la chaîne en mémoire, ce qui me semble incorrect. Et le résultat avec des valeurs identiques est dû au fait que la fonction est appelée plusieurs fois de suite et qu'après chaque appel, le suivant utilise en fait la même mémoire, en y mettant de nouvelles données. Si vous effectuez des manipulations entre les appels (appels de n'importe quelle police, déclaration de variables, etc.), le résultat sera très probablement encore pire, à savoir que les valeurs de l'élément string array pointeront vers des déchets en mémoire.


Je demande aux développeurs de mql4 de commenter cette situation si possible et d'expliquer comment travailler correctement avec les tableaux de chaînes.

Essayez de cette façon :

string tmp = func();
array[0] = tmp;

Un potager, bien sûr, mais ça devrait marcher...

 

Que signifie MT4 dans le testeur -Optimisation, où dois-je cocher ? Quelle est cette fonction ? Est-ce que cela règle l'EA sur des paramètres spécifiques (standard) ou est-ce que cela montre sur quelle période (TF) il fonctionne le mieux ?

 
rafex >> :

Que signifie MT4 dans le testeur -Optimisation, où dois-je cocher ? Quelle est cette fonction ? Est-ce qu'il règle l'EA sur des paramètres spécifiques (standard) ou indique-t-il sur quelle période (TF) il fonctionne le mieux ?

Cette case ne peut être cochée qu'après avoir appuyé sur la touche F1 et étudié attentivement la section "Autotrading".

 
komposter >> :

Essayez de cette façon :

Un potager, bien sûr, mais ça devrait marcher...

Je l'ai essayé avant-hier. Le résultat est le même. En fait, la référence est d'abord copiée dans la chaîne de caractères temporaire, puis la même référence est copiée dans un élément du tableau :(

 
Yug >> :

Je l'ai essayé avant-hier. Le résultat est le même. En fait, la référence est d'abord copiée dans la chaîne de caractères temporaire et ensuite la même chose est copiée dans l'élément du tableau :(

Déclarez la chaîne de retour comme statique dans la fonction, seulement alors l'initialisation doit être faite après la déclaration.

 
Chers experts, n'ignorez pas ma question.

Existe-t-il un indicateur qui compte la volatilité, par exemple quotidiennement. Mais pas celle qui donne un nombre indéfini comme 0,34. Mais il devrait calculer le nombre de chandeliers par jour et le diviser par une période donnée (nombre de jours) afin que l'indicateur connaisse la valeur moyenne. Exemple : ouverture 100, clôture 200 ; le deuxième jour - ouverture 200, clôture 250. Volatilité moyenne pour ces 2 jours = ((200-100)+(250-200))/2 jours=(100+50)/2=75
Où télécharger si disponible.
 
TheXpert >> :

Déclarez la chaîne de retour comme statique dans la fonction, mais l'initialisation doit alors être effectuée après la déclaration.

J'ai aussi essayé cette variante. Le résultat est le même, c'est-à-dire que la référence mémoire est retournée au lieu de la valeur.

Raison: