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
Bonjour à tous
Désolé, mais j'ai parlé trop vite. Bien que l'ajout de RefreshRates() semble faire une différence, j'ai toujours le même problème. Il ouvre parfois les deux ordres en attente, parfois seulement l'un des deux, et parfois aucun des deux. Je reçois toujours l'erreur 130 quand il n'ouvre pas un ordre, ou les deux, mais aucune erreur quand les deux sont effectivement ouverts. J'ai également remarqué que sur les paires où mes entrées sont inférieures à MODE_STOPLEVEL, il n'ouvre jamais d'ordre et j'ai toujours l'erreur 130, même si le programme ajuste mes entrées comme demandé. J'imprime les valeurs et elles sont ajustées comme prévu. J'essaie donc de comprendre pourquoi mon OrderSend ne fonctionne pas vraiment.
Sur une paire comme EURUSD où le niveau de base est de 5, il envoie généralement les deux ordres, mais pas toujours. Cependant, sur une paire comme EURAUD où le niveau de base est de 10, il n'envoie jamais d'ordre.
J'ai également essayé comme cela, mais cela ne fait aucune différence :
Et même si je fais cela, cela ne fait aucune différence :
Merci pour votre aide à tous. J'ai finalement réussi à le faire fonctionner. La seule façon de le faire fonctionner de manière cohérente était de le changer en ceci :
J'ai aussi compris que le niveau de Pipmove avant que l'ordre en attente ne soit activé doit aussi être supérieur au stoplevel. Donc tout semble fonctionner maintenant... Merci.
Merci pour votre aide à tous. J'ai finalement réussi à le faire fonctionner. La seule façon de le faire fonctionner de manière cohérente était de le changer en ceci :
J'ai aussi compris que le niveau de Pipmove avant que l'ordre en attente ne soit activé doit aussi être supérieur au stoplevel. Donc tout semble fonctionner maintenant... Merci.
La réponse simple est de ne pas essayer d'ouvrir des ordres en attente si près du prix actuel. 5 points correspondent généralement à un demi-pip.
Merci pour la réponse. Mon calcul est en fait en pips, donc les ordres en attente sont au moins à 50 points (5 pips du prix actuel), cependant, il semble fonctionner si je le déplace au moins 1 pip plus loin du niveau de référence, qui est de 50 points sur l'EURUSD. Il semble qu'il ouvre maintenant les deux trades sauf le premier après que je l'ai fait glisser sur le graphique. Mais je suis d'accord avec cela pour le moment. Mon code ressemble maintenant à ceci :
J'ai rencontré un problème distinct mais similaire. Une fois que l'un des ordres en attente est déclenché, l'une des deux choses suivantes peut se produire. Soit il déclenche le TrailingStop, auquel cas l'autre ordre en attente est supprimé. Soit, si cette transaction est en ma défaveur, il devrait ouvrir une couverture dans la direction opposée. Selon la façon dont j'écris le code, il ouvrira plus d'une couverture ou aucune couverture. J'ai tout essayé, y compris les deux suivantes :
Ou bien :
Dois-je utiliser une boucle for séparée pour cela ? Merci.
Bonjour à tous
Cela fait des semaines que j'essaie et je n'ai toujours pas progressé. Tout fonctionne maintenant, sauf que dans certaines conditions, l'EA ouvre plus d'un hedge trade sur le trade original. Le SL sur le trade original est de 11 pips et le SL sur le Hedge trade est de 9 pips. Parfois, le hedge trade est arrêté à 9 pips alors que le trade original est encore ouvert. Il ouvre alors un deuxième hedge trade et même un troisième et un quatrième alors que le trade original est encore ouvert. Je veux simplement limiter le nombre de hedge trades à un seul et s'il est arrêté, attendre et voir ce qui se passe avec le trade original.
C'est le type de résultats que j'obtiens :
576 2015.01.15 11:39 buy stop 29 0.48 1.16786 1.16616 0.00000 0.00 4834.24
577 2015.01.15 11:39 sell stop 30 0.48 1.16642 1.16812 0.00000 0.00 4834.24
578 2015.01.15 11:39 vendre 30 0.48 1.16642 1.16812 0.00000 0.00 4834.24
579 2015.01.15 11:39 supprimer 29 0.48 1.16786 1.16616 0.00000 0.00 4834.24
580 2015.01.15 11:42 acheter 31 1.44 1.16743 1.16653 0.00000 0.00 4834.24
581 2015.01.15 11:42 s/l 31 1.44 1.16653 1.16653 0.00000 -129.60 4704.64
582 2015.01.15 11:44 acheter 32 1.44 1.16742 1.16652 0.00000 0.00 4704.64
583 2015.01.15 11:44 s/l 30 0.48 1.16812 1.16812 0.00000 -81.60 4623.04
584 2015.01.15 11:48 modifier 32 1.44 1.16742 1.16893 0.00000 0.00 4623.04
Les ordres buystop et sellstop (29 et 30) sont ouverts comme il se doit. Le prix baisse ensuite et l'ordre de vente (30) est exécuté tandis que le buystop (29) est supprimé. Le prix remonte ensuite et l'ordre hedge(martingale) (31) est déclenché (3*lotsize). Le prix baisse à nouveau et le hedge (31) est stoppé, mais comme 30 est toujours ouvert, il déclenche un autre hedge (32), etc. Comment puis-je empêcher le déclenchement de l'ordre 32 ? Merci.
Bonjour à tous. Cela fait plus d'un mois que j'essaie de résoudre ce problème et je commence à penser qu'il est impossible de le coder. Si quelqu'un veut bien me le confirmer, je pourrai passer à autre chose. N'est-il pas possible de définir un niveau profond pour le nombre d'ordres de couverture (martingale) comme expliqué dans le message ci-dessus ? Merci.
Le meilleur que j'ai jusqu'à présent est :
Il existe différentes façons d'y parvenir.
Lorsque la couverture est ouverte, créez une Variable Globale du terminal client.
Donnez-lui un nom qui inclut le numéro de ticket de la transaction principale.
Donnez-lui une valeur qui sert d'indicateur qu'une opération de couverture a été ouverte pour ce numéro de ticket, ou un compte de couverture si nécessaire.
Vérifiez le GV avant d'ouvrir une opération de couverture.
Le hedge et le trade principal ont des tailles de lot différentes.
Avant d'ouvrir une couverture, vérifiez les ordres ouverts et l'historique pour voir si un ordre opposé a été ouvert avec la taille de lot correspondante et une OrderOpenTime() postérieure à l'heure d'ouverture de la transaction principale.
Il existe différentes façons d'y parvenir.
Lorsque la couverture est ouverte, créez une variable globale du terminal client.
Donnez-lui un nom qui inclut le numéro de ticket de la transaction principale.
Donnez-lui une valeur qui indique qu'une opération de couverture a été ouverte pour ce numéro de ticket, ou un nombre de couvertures si nécessaire.
Vérifiez le GV avant d'ouvrir une opération de couverture.
La transaction de couverture et la transaction principale ont des tailles de lot différentes.
Avant d'ouvrir une couverture, vérifiez les ordres ouverts et l'historique pour voir si un ordre opposé a été ouvert avec la taille de lot correspondante et une OrderOpenTime() ultérieure à l'heure d'ouverture de la transaction principale.
J'ai donc essayé d'y parvenir par le biais d'une variable globale, mais depuis que j'ai ajouté ce code, il n'ouvre pas du tout de transaction de couverture. Je pense que le problème est que l'EA effectue un GlobalVariableCheck, mais comme aucun n'a encore été créé, il ne continue pas. Il sélectionne et imprime cependant le bon numéro de ticket. Peut-être que je m'y prends mal. Voici le code correspondant :