
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Vangrosh
merci pour votre contribution
pouvez-vous m'aider à comprendre
Est-ce correct ?
Je fais un EA avec auto trail
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{si (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red) ; // place un TP et un SL
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // placer un TP
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // vérifier si c'est vrai
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // si vrai modifier l'ordre
Print("Error_Modify - ",GetLastError()) ;
else str=StringConcatenate("\n Mon numéro de ticket est ", OrderTicket(), " et mon réglage de stop loss est ", DoubleToStr(Ask+Point*TrailingStop,Digits)) ; // nouveau code
}
}
}
Voici ce que j'ai écrit dans un autre post, expliquant l'approche différente.
>>Voici une solution simple qui consiste à vérifier que le nouveau prix stoploss est supérieur d'au moins 1 point à l'ancien prix stoploss. Il suffit de faire l'inverse pour un ordre de vente.
Voici la fonction complète que j'utilise. Maintenant que j'y pense, j'aurais pu utiliser un meilleur nom de var que nextStopLoss, et je devrais également ajouter un contrôle d'erreur à la fonction OrderModify().
De plus, ma fonction Trailing Stop est dans un EA qui peut avoir plusieurs ordres ouverts en même temps, c'est pourquoi elle a ces paramètres afin que je puisse mettre à jour le Trailing Stop sur plusieurs ordres en même temps.
Ensuite, dans ma fonction start(), j'ai :
J'ai laissé les autres appels de fonction ici pour que vous puissiez voir que j'aime partitionner mon code en fonctions spécifiques autant que possible. Cela rend les choses beaucoup plus faciles.
Bonne chance avec votre EA.
Voici ce que j'ai écrit dans un autre post, expliquant l'approche différente.
>>Voici une solution facile : il suffit de vérifier que le nouveau prix stoploss est supérieur d'au moins 1 point à l'ancien prix stoploss. Il suffit de faire l'inverse pour un ordre de vente.
Voici la fonction complète que j'utilise. Maintenant que j'y pense, j'aurais pu utiliser un meilleur nom de var que nextStopLoss, et je devrais également ajouter un contrôle d'erreur à la fonction OrderModify().
De plus, ma fonction Trailing Stop est dans un EA qui peut avoir plusieurs ordres ouverts en même temps, c'est pourquoi elle a ces paramètres afin que je puisse mettre à jour le Trailing Stop sur plusieurs ordres en même temps.
Ensuite, dans ma fonction start(), j'ai :
J'ai laissé les autres appels de fonction ici pour que vous puissiez voir que j'aime partitionner mon code en fonctions spécifiques autant que possible. Cela rend les choses beaucoup plus faciles.
Bonne chance avec votre EA.
merci - ça a l'air bien
Alors, est-ce que vous placez votre fonction start() en bas de l'EA ?
J'ai aussi un problème avec une erreur épouvantable. Le truc, c'est que je n'ai pas de stop loss ou de take profit, il échoue juste à placer l'ordre en attente, à plusieurs pips du marché où il ne devrait pas y avoir de problème...
Le problème avec le bon vieux 130 est qu'il indique (l'une des) une classe ou un groupe d'erreurs et ne conduit pas à une solution instantanée...
Vous pouvez même corriger un problème et il est toujours là...
La seule chose qui se produit ici est une faute de frappe ?
Peut-être que vous entrez un ordre d'achat limite au-dessus de l'Ask, alors que vous vouliez un ordre d'achat stop ?
FWIW
-BB-
Le problème avec le bon vieux 130 est qu'il indique (l'une des) une classe ou un groupe d'erreurs et ne conduit pas à une solution instantanée...
Vous pouvez même corriger un problème et il est toujours là...
La seule chose qui se produit ici est une faute de frappe ?
Peut-être que vous entrez un ordre d'achat limite au-dessus de l'Ask, alors que vous vouliez un ordre d'achat stop ?
FWIW
-BB-
J'ai une fonction qui sélectionne le type d'opération :
comme ceci :
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily : Ouverture de la vente au niveau 2 pour le pylône 0 @ 0.8024 alors que l'offre = 0.8016
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily : Erreur OrderSend 130
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily : ReliableOrderSend error : 130 : Invalid stops.
Bonjour TheEconomist
juste quelques petites choses...
1. Je ne vois pas de normalisation sur ToCompare, à moins que WhatOperation() soit garanti d'avoir normalisé le réel donné.
2. Les comps doubles ont des problèmes - par exemple, 'Conditional Statement failure... [At wits end] if ( 1.4225 > 1.4225) is NOT TRUE !!!!!!".
3. Suivez-vous les conseils de https://book.mql4.com/appendix/limits
Cordialement,
J'ai étudié ce post dans l'espoir de résoudre mon erreur dans la 'Question rapide' avec 130. La fonction d'envoi de commande est là ainsi que les écritures de journal avec la fonction d'impression, est-ce que l'un d'entre vous sait ce qui se passe ?
Merci,
Garçon Bauer
.
vu sur .../24681
1. StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL) ;
SL,TP doivent être au moins à des points StopLevel de l'offre.
Voir ci-dessous (**)
2. ACCTxx = NormalizeDouble(Ask ..(..), Digits) ;
3. Print("Bid=",DoubleToString(Ask,Digits),", Ask=",DoubleToString(Bid,Digits)) ;
4. Print ("Stop Loss Value",DoubleToString( ACCTSL,Digits),", stopLoss=",stopLoss) ;
Print ("Take Profit Value", DoubleToString(ACCTTP,Digits),", takeProfit=",takeProfit) ;
Pourquoi DoubleToString() ? Print() n'affiche que QUATRE CHIFFRES
Par ailleurs, j'aimerais aussi que l'on utilise au moins une fois Print("MyDig=",MyDig) ; Pourquoi ? Vous n'avez pas à vous en soucier ensuite. Cela peut sembler insignifiant, mais vous seriez étonné de l'humour qui entoure des choses aussi simples !
5. TOUS vos problèmes peuvent être facilement résolus en obtenant toutes les informations disponibles au bout de vos doigts et en les affichant.
Ensuite, avec le bon vieux papier + crayon , vous pouvez voir où sont les malentendus.
(**)
Réf : https://book.mql4.com/appendix/limits
Limitation de la distance minimale de StopLevel.
Une opération de trading ne sera pas effectuée si l'une des conditions suivantes est perturbée.
.
vu sur .../24681
1. StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL) ;
SL,TP doivent être au moins à des points StopLevel de l'offre.
Voir ci-dessous (**)
2. ACCTxx = NormalizeDouble(Ask ..(..), Digits) ;
3. Print("Bid=",DoubleToString(Ask,Digits),", Ask=",DoubleToString(Bid,Digits)) ;
4. Print ("Stop Loss Value",DoubleToString( ACCTSL,Digits),", stopLoss=",stopLoss) ;
Print ("Take Profit Value", DoubleToString(ACCTTP,Digits),", takeProfit=",takeProfit) ;
Pourquoi DoubleToString() ? Print( ) n'affiche que QUATRE CHIFFRES
Par ailleurs, j'aimerais aussi que l'on utilise au moins une fois Print("MyDig=",MyDig) ; Pourquoi ? Vous n'avez pas à vous en soucier ensuite. Cela peut sembler insignifiant, mais vous seriez étonné par les plaisanteries qui entourent des choses aussi simples !
5. TOUS vos problèmes peuvent être facilement résolus en obtenant toutes les informations disponibles au bout de vos doigts et en les affichant.
Ensuite, avec le bon vieux papier + crayon , vous pouvez voir où sont les malentendus.
(**)
Réf : https://book.mql4.com/appendix/limits
Limitation de la distance minimale de StopLevel.
Une opération de trading ne sera pas effectuée si l'une des conditions suivantes est perturbée.
Je ne peux vraiment pas dire ce qui se passe et pourquoi cela se produit.
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1 : OrderSend (Trender Beta Test ) a échoué avec l'erreur #130
05.08.2009 14:32:26 Trender Beta Test EURUSD,H1 : MyDig=10
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1 : Take Profit Value1.43155, takeProfit=110
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1 : Valeur du Stop Loss1.42255, stopLoss=200
2009.08.05 14:32:26 Trender Beta Test EURUSD,H1 : Bid=1.44255, Ask=1.44229
Je ne peux vraiment pas dire ce qui se passe et pourquoi cela se produit.
Il est vraiment temps de montrer le code entier. Si vous hésitez, vous pouvez utiliser le PM.
Je vois que vous avez un TP plus bas alors Bid