Communauté d'expertise - page 2

 
Pour les arrêts, il serait préférable d'introduire un "cooldown" (je ne sais pas comment l'appeler correctement).

Si vous tracez un stop avec une précision d'un pip, le courtier va hurler et couper les Expert Advisors :)

Je pense que c'est mieux :
   if (MathAbs(CurrentStopLoss - NewStopLoss) > (Ask - Bid)*Koef) { // Modifier le stop loss ................ }


C'est-à-dire que nous modifions l'ordre si le nouveau stop diffère de l'ancien par un nombre donné de spreads (1 - 2).
Votre problème est automatiquement résolu ici.

 
Mak, merci pour le conseil. Je le ferai.
Seulement ici, le problème est différent - il essaie de définir _à_la_même_valeur_... C'est-à-dire qu'une telle vérification ne sauvera pas de l'erreur, mais réduira seulement sa probabilité =)
 
Seulement ici le problème est différent - il essaie de définir _à_la_même_valeur_... c'est-à-dire qu'une telle vérification ne sauvera pas de l'erreur, mais réduira seulement sa probabilité =)

C'est très probablement un problème dans le texte de l'EA.
J'en ai eu un semblable, je ne me souviens pas comment il a été réparé.

Mais l'exemple ci-dessus garantit que toute erreur dans le script
il n'y aura pas de tentatives de réglage à la même valeur.
 
Только тут проблема в другом - оно пытается установить _на_то_же_значение_... т.е. такая проверка не спасёт от ошибки, а просто уменьшит её вероятность =)

Il s'agit probablement d'un problème dans le texte de l'expert. J'en ai eu un similaire, comment il a été réparé, je ne me souviens pas. Mais l'exemple ci-dessus garantit que toute erreur dans le script ne tentera pas de définir la même valeur.





Mak, il y a 1 ligne de texte =
)_TrailingStop( orderticket, 50 ) ;



J'ai écrit la fonction précisément pour éviter de telles erreurs, et le contrôle est le même, à la différence que chaque pépin est travaillé.
Si la valeur est la même (la distance entre le prix et le stop est égale à 50 dans ce cas), les trailing stops ne devraient pas fonctionner.
De plus, dans la plupart des cas, cela ne fonctionne pas =)))), et parfois cela passe à travers pour une raison quelconque .....

 
Peut-être que NormalizeDouble fonctionne différemment parfois ?
Est-ce qu'il arrondit ou rejette ?

D'une manière générale, il est préférable de ne jamais comparer les types flottants pour l'égalité.
La seule exception :
double A,B ; .......... A = ....... ; ............. B = A ; ........... if (B == A) ........



Et sur une ligne ...
Dans _TrailingStop il y a beaucoup de lignes,
et s'il y en a au moins 2, il y a déjà une raison pour des erreurs :)

 
Est-ce qu'
il fait quoi, le rejeter ou l'arrondir ?
Je suis curieux aussi ;)

Je l'ai déjà partiellement corrigé ici : instead
( orderstoploss == 0.0 ........ )


sur

si ( orderstoploss <= 0 ......... )

et le reste semblait aller bien :

.... orderstoposs < ( bid - TrailingStop * point ) 





Renat, je place généralement mes espoirs en vous =) il y a probablement quelque chose d'aussi simple qu'un angle ici - et je ne le remarque pas...

 
Je vais voir si je peux aider ce week-end.
 
Je vais essayer d'y jeter un coup d'oeil ce week-end et voir si je peux vous aider.
Je dois faire ça bien...
 
C'est probablement quelque chose d'aussi simple qu'un angle - et je ne le remarque pas...

komposter, vous avez tort :) Comme l'a dit la fille qui tordait les cuillères, "les choses ne sont pas ce qu'elles semblent être".
Par exemple, la boucle suivante imprime 5 chiffres :
for (double d = 0.1 ; d <= 0.5 ; d += 0.1) Print(d) ;


Combien le prochain cycle imprimera-t-il avec des limites augmentées de 1,0 ?

for (double d = 1.1 ; d <= 1.5 ; d += 0.1) Print(d) ;



On s'attendrait à ce qu'il imprime également 5 chiffres, mais il n'en imprime que 4 (quatre). N'est-ce pas génial ?
Si nous ajoutons une autre ligne après la boucle :

Print("d=" + d + "(d <= 1.5)=" + (d <= 1.5)) ;


on obtient :

d=1.50000000 (d <= 1.5)=0



Presque comme le vôtre avec un arrêt, mais plus fondamental :). Le problème est aussi vieux que la première puce d'ordinateur :
Les ordinateurs utilisent l'arithmétique binaire et les humains l'arithmétique décimale. Lors de l'arrondi, des artefacts apparaissent.

"Arrondir vers le haut", ce que Mak a suggéré, aide si vous avez un problème fondamental avec l'arrondi, et non un bug trivial.

De nombreuses personnes pensent que les calculs financiers DOIVENT UTILISER des bibliothèques arithmétiques décimales spéciales, mais même celles-ci peuvent contenir des erreurs, parfois
ce qui peut parfois avoir de graves conséquences. Au fait, Renat, quelle implémentation de l'arithmétique utilisez-vous ?

 
komposter

J'ai jeté un coup d'œil rapide (je n'ai pas encore creusé), j'ai trouvé la référence du point que vous calculez.
Essayez de le "jeter" et de mettre Point. C'est probablement là que réside le problème (le point dans MarketInfo n'aboutit pas toujours à ce que l'on veut ?).