Communauté d'expertise - page 3

 
komposter<br / translate="no">
En regardant rapidement (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 le stupide Point. C'est peut-être là que réside le problème (le point par MarketInfo n'aboutit pas toujours à ce que l'on veut ?).

C'est toujours censé...
mais vous pouvez aussi essayer de le normaliser =)

et ce n'est pas toujours acceptable - l'expert peut trader sur plusieurs paires, et le point peut être différent...
 
Le
problème est aussi vieux que la première puce informatique -
c'est triste, bien sûr... mais il doit y avoir un moyen de contourner ça, non ? J'espère que Renat va dire quelque chose...
 
if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


Supposons que l'ordre de perte = 1,29211 (5 chiffres après la virgule)
bid=1,29716 (également 5 chiffres )
TrailingStop = 50
point =0,001
alors (bid - TrailingStop * point)=1,29216>1,29211
Vrai, cela nécessite que les chiffres deviennent soudainement 5
Et aussi

if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


peuvent être remplacés sans douleur par

if ( orderstoploss < ( bid - TrailingStop * point )) )


Je pense qu'il n'est pas nécessaire de vérifier l'absence de niveau de stop loss lors du trailing.
En fait, ça l'est, je me corrige. Si nous fixons un stop loss uniquement lorsqu'il y a un profit, et sinon nous sommes prêts à attendre un appel de marge.
Je n'ai rien trouvé d'autre. Sur quelle paire votre trailing stop a-t-il mal fonctionné et y a-t-il eu un fort mouvement ?

 
Salut.
Je convertis tout en valeurs entières à des fins de comparaison. Je stocke et utilise les valeurs données partout où je peux (dans le tableau).
utiliser les valeurs données (dans des tableaux, des variables, etc.)
C'est-à-dire que les variables de type int peuvent prendre des valeurs comprises entre -2147483648 et 2147483647.
Cette dimensionnalité est tout à fait adaptée aux croix.
De la même manière, 1,2999 et 1,3000 peuvent être convertis en 12999 et 13000, et on peut alors les comparer sans risque,
sans crainte d'une erreur périodique.

J'ai esquissé un exemple ici :)
int Normalize(double double_value, int digits) - приводит double в int  (1.2999 в 12999)
double Restore(int int_value, int digits) - приводит полученный ранее int в double (12999 в 1.2999)


ici

//+------------------------------------------------------------------+
//|                                                   ShiftPoint.mq4 |
//|                                                            Begun |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   return(0);
}
//+------------------------------------------------------------------+
int Normalize(double double_value, int digits)
{
	return (NormalizeDouble(double_value,digits)*MathPow(10,digits));
}
double Restore(int int_value, int digits)
{
	return (NormalizeDouble((int_value/MathPow(10,digits)),digits));
}
//+------------------------------------------------------------------+
int start()
{
	double	Test_Value =  1.29999999;
	int	Test_int;
	double	Test_double;

	Test_int         = Normalize(Test_Value,Digits);
	Test_double   = Restore(Test_int,Digits);
	Print("-----------------------------");
	Print("Restored value    = ",DoubleToStr(Test_double,Digits));
	Print("Shift Point Value = ",Test_int);
	Print("Real Double Value = ",DoubleToStr(Test_Value,8));
}
//+------------------------------------------------------------------+



sortie :
shiftpoint EURUSD,H1 : Real Double Value = 1.29999999
shiftpoint EURUSD,H1 : Valeur du point de décalage = 13000
shiftpoint EURUSD,H1 : Valeur rétablie = 1.3000

 
En général, remplacez ceci par
if ( orderstoploss < ( bid - TrailingStop * point )) )


à l'adresse

if ( TrailingStop < ( bid -orderstoploss)/ point  )


Alternativement.

 
Merci à tous pour votre participation !
Rosh 17.04.05 22:29 <br / translate="no"> il me semble que la vérification de l'absence de niveau de stop loss n'est pas nécessaire pour le trailing.
Je ne suis pas d'accord, le suivi devrait être sans ambiguïté - s'il est activé, cela signifie que SL est exposé.

Sur quelle paire votre trailing n'a-t-il pas fonctionné correctement et n'y a-t-il pas eu de fort mouvement ?
maintenant l'expert fonctionne sur eu - erreurs occasionnelles... tout au long de la journée... Je ne pense pas que ce soit le cas...

En général, il faut le remplacer.
maintenant je vais essayer, peut-être que ça va aider ;) je vous le dirai demain...

Commencé le 17.04.05 22:46
Salut.
Je ramène tout à des nombres entiers pour la comparaison
Bonjour =) c'est certainement une option... mais je ne pensais pas que je devrais passer par tous ces problèmes... J'aurais aimé entendre les développeurs, ils savent mieux que moi...
 
Mes excuses, je n'ai pas participé à la discussion.

2dev :
Le problème est aussi vieux que la première puce informatique :

Vous avez raison - c'est un problème fondamental, il est dangereux de comparer des nombres à virgule flottante.
Aux endroits importants, ramenez toujours les chiffres à une certaine précision via Normalize().

Quelle implémentation de l'arithmétique utilisez-vous ?

Standardiser le type double (8 octets).

D'ailleurs, nous forçons la normalisation de tous les prix passés dans les requêtes commerciales pour éviter les erreurs.
Vous pouvez envoyer une demande de stop loss à 1.2932461, mais il sera fixé à 1.2932.
Veuillez vérifier si c'est l'erreur en essayant de réinitialiser l'arrêt au même prix ?
 
Veuillez vérifier si c'est l'erreur en essayant de réinitialiser l'arrêt au même prix ?

3 personnes regardaient =)) Renat est venu et a juste pointé du doigt l'erreur =)))
Je vais vérifier maintenant, bien sûr, mais c'est très probablement le cas... Je n'ai pas normalisé "bid - TrailingStop * point", et cette construction même est impliquée dans la modification des ordres...
nous ne sommes pas attentifs, messieurs ;)
 
Aux endroits importants, il faut toujours ramener les chiffres à une certaine précision via Normalize().

Vous voulez dire le Normalize() que Begun a suggéré ?
 
В важных местах постоянно приводите числа к определенной точности через Normalize().

Voulez-vous dire le Normalize() que Begun a suggéré ?

Désolé, je voulais dire la norme NormalizeDouble.
Raison: