vous pouvez faire un cas d'erreur dans votre code et utiliser RefreshRates()
Je ne sais pas comment le faire, mais vous pouvez peut-être faire quelque chose comme ceci.
if(Trade==fase)
{
int ErrorCode= GetLastError() ;
si (ErrorCode=130)
{
RefreshRates() ;
}
}
Encore une fois, ce code peut ne pas être correct, vous devriez donc chercher sur Google comment le faire.
De plus, si vous ne l'avez pas encore fait, utilisez la fonction NormalizeDouble pour arrondir les chiffres.
vous pouvez faire un cas d'erreur dans votre code et utiliser RefreshRates()
Comment cela va-t-il aider ?
C'est peut-être un problème temporaire. Il a dit que c'était sensible à la casse, donc rafraîchir les taux pourrait le résoudre.
il pourrait s'agir d'un problème temporaire. il a dit que c'était sensible à la casse, donc rafraîchir les taux pourrait le résoudre.
vrai.
Raptor, je ne connais pas le spread pour la transaction ci-dessus. J'ai ajouté une sortie de journal dans le code, la prochaine fois que l'erreur se produit, je serai en mesure de vous dire le spread.
Mais pouvez-vous me dire pourquoi le spread est important? De quelle manière dois-je prendre en compte l'écart, lorsque je détermine le stoploss ?
J'envoie un ordre avec par exemple :
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green) ;
ainsi la seule variable prédéfinie que j'utilise lors de l'envoi des ordres est : Ask
SLIPPAGE et TAKEPROFIT sont tous deux égaux à 0.
EXPERT_ID est un numéro magique unique
position_size est un nombre entier, par exemple 3
initial_stop est mon stoploss, qui est (dans le cas de l'exemple ci-dessus) Bid - risk.
Le risque est une valeur supérieure à (MODE_STOPLEVEL * Point), dans le cas du trade du premier post. Le risque était de : 1.35
Merci pour vos réflexions.
Raptor, je ne connais pas le spread de la transaction ci-dessus. J'ai ajouté une sortie de journal dans le code, la prochaine fois que l'erreur se produit, je serai en mesure de vous dire le spread.
Mais pouvez-vous me dire pourquoi le spread est important ? De quelle manière dois-je prendre en compte le spread, lorsque je détermine le stoploss ?
Bravo pour avoir ajouté l'impression au journal pour l'avenir:-)
Je dois toujours réfléchir longuement à la question de savoir si la diffusion doit être prise en compte ou non... Il semble que j'aie un blocage mental à ce sujet... mais je pense que j'ai raison.
Pour un achat, cela ne devrait pas avoir d'importance, acheter à l'Ask, SL se produira à l'Bid, donc le Spread est déjà pris en compte dans votre OpenPrice. Pour une vente, c'est une autre histoire... vous vendez à l'offre et votre SL sera pris par le prix de l'offre... où est le prix de l'offre ? cela dépend du spread à ce moment-là... Je pense que c'est correct, réfléchissez-y et voyez si cela a du sens... Je suis plus qu'heureux d'être corrigé si je me trompe... :-)
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);Les EAs doivent s'ajuster pour les brokers à 4/5 chiffres, TP, SL, ET slippage. Sur les courtiers ECN, vous devez ouvrir et ensuite fixer des stops.
//++++ These are adjusted for 5 digit brokers. int pips2points; // slippage 3 pips 3=points 30=points double pips2dbl; // Stoploss 15 pips 0.0015 0.00150 int Digits.pips; // DoubleToStr(dbl/pips2dbl, Digits.pips) int init(){ if (Digits % 2 == 1){ // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262 pips2dbl = Point*10; pips2points = 10; Digits.pips = 1; } else { pips2dbl = Point; pips2points = 1; Digits.pips = 0; } // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl //---- These are adjusted for 5 digit brokers. /* On ECN brokers you must open first and THEN set stops int ticket = OrderSend(...) if (ticket < 0) Alert("OrderSend failed: ", GetLastError()); else if (!OrderSelect(ticket, SELECT_BY_POS)) Alert("OrderSelect failed: ", GetLastError()); else if (!OrderModify(OrderTicket()...) Alert("OrderModify failed: ", GetLastError()); */
il pourrait s'agir d'un problème temporaire. il a dit que c'était sensible à la casse, donc rafraîchir les taux pourrait le résoudre.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
J'ai vu que beaucoup de personnes sur le forum sont aux prises avec cette erreur.
Comme je l'ai compris dans les autres fils de discussion, l'erreur peut être causée par
a : la définition d'une valeur stoploss trop proche du prix actuel
b : un mauvais nombre de chiffres après 0.
Concernant a :
Si j'ai bien compris. MarketInfo(Symbol(), MODE_STOPLEVEL)) devrait me donner la distance minimale que le stoploss doit avoir.
Voici donc un exemple de trade raté :
Marekt Info :
Date : 2011/9/15 16:31
Symbole : #ESU1
Niveau d'arrêt : 75.00000000
Point : 0.01000000
Taille du tick : 0.25000000
Valeur du tick : 12.50000000
Chiffres : 2.00000000
Ainsi, la distance minimale devrait être le niveau d'arrêt * point, n'est-ce pas ? donc 0,75.
Voici donc mon ordre qui a échoué :
2011.09.15 16:32:07 '393930' : ordre de vente 18.00 #ESU1 ouverture à 1201.00 sl : 1202.35 tp : 0.00 échoué [S/L ou T/P invalide].
L'erreur est : 130 / stops invalides
Le stoploss est à 1.35 de l'ouverture. Cela devrait donc être correct. Les chiffres (b) correspondent également.
Alors pourquoi est-ce que je reçois cette erreur ?
De plus, cette erreur est difficile à reproduire. Parfois, elle apparaît. Parfois, elle n'apparaît pas.
Parfois, elle apparaît plusieurs fois de suite.
Avez-vous une idée ?
Merci d'avance !
shinobi