Répondre

Ordre stop/limite trop proche du prix réel

6 réponses

sansay

Abonné, bbp_participant, communauté, 11 réponses.

Visiter le profil

Il y a 7 ans #116332

Voir la capture d'écran ci-jointe.

Lorsque j'ai vu pour la première fois le journal de l'EA, "ordre stop/limite trop proche du prix réel", j'ai immédiatement pensé "OK, le niveau du stop est incorrect". J'ai donc édité le code et changé la valeur de MinDistanceOfStopFromPrice à 70, comme c'était le cas pour la paire USDMXN. Cependant, comme vous pouvez le voir sur la capture d'écran, cela n'a pas résolu le problème. En fait, j'ai même essayé 100, 200, 700, cela n'a rien changé.

Toute aide serait grandement appréciée.

0

sansay

Abonné, bbp_participant, communauté, 11 réponses.

Visiter le profil

Il y a 7 ans #141561

Quelle capture d'écran ?

 

J'ai le problème inverse, j'ai besoin que certains ordres Stop_limit soient plus proches du prix.

 

C'est bizarre, je suis presque sûr d'avoir joint le fichier png. Essayons encore une fois...

0

tomas262

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 7 ans #141585

Cela se produit-il lorsque vous passez un ordre ou que vous essayez de modifier PT, SL ou le prix de l'ordre ?

0

sansay

Abonné, bbp_participant, communauté, 11 réponses.

Visiter le profil

Il y a 7 ans #141594

Je ne fais rien, c'est un EA créé avec SQ. Il fait cela, et je pense que le code est ajouté à chaque EA qu'il crée. La différence dans ce cas est que ce courtier forex particulier a un niveau de 70 stops, alors que d'autres en ont 0.

Bien sûr, ceux qui ont 0 ne déclenchent rien.

Le code est en fonction : 

void openPosition(int tradeDirection) {

      // vérifie que le prix d'arrêt/limite n'est pas trop proche
      if(NormalizeDouble(MathAbs(openPrice - AskOrBid), Digits) <= NormalizeDouble(eaStopDifferenceNumber, Digits)) {
         //Log("l'ordre stop/limite est trop proche du prix réel") ;
         retour ;
      }
Bien entendu, lorsque cela se produit, aucune transaction n'est ouverte.
Hier, j'ai essayé de voir ce qui se passerait si je supprimais la déclaration de retour. Je voulais voir si le concessionnaire rejetterait également la commande. 
La déclaration est apparue dans le journal de l'expert, mais aucune transaction n'a eu lieu et aucun autre journal n'est apparu. Je vais tenter une nouvelle fois ma chance, cette fois-ci en ajoutant d'autres journaux afin de savoir quel chemin le processus a emprunté.

0

sansay

Abonné, bbp_participant, communauté, 11 réponses.

Visiter le profil

Il y a 7 ans #141656

Ce matin, j'ai constaté qu'il avait tenté de placer un ordre de vente stop sans succès. Voir le journal ci-joint.

0

tomas262

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 7 ans #141681

Je pose la question parce que vous l'avez placée dans le fil "EA Wizard".

 

Vous pouvez afficher la stratégie ici ou m'envoyer à l'adresse suivante [email protected] je peux donc essayer de le tester sur USDMXN aussi

0

sansay

Abonné, bbp_participant, communauté, 11 réponses.

Visiter le profil

Il y a 7 ans #141685

En fait, mes tests m'ont permis de trouver le problème et j'ai corrigé le code.

Le problème est que le serveur du courtier vérifie la présence de :
short : orderPrice < currentPrice - stopLevel 

long : orderPrice > currentPrice + stopLevel

 

Si la condition n'est pas remplie, la demande de modification échoue. Actuellement, le code ajuste le stopLoss et le targetProfit pour qu'ils soient au moins à l'intérieur de orderPrice + ou - dealer stop level. Le test échoue dès que le prix de l'ordre est exactement égal à PrixCourant -+ niveau de stop. La solution a donc été d'ajouter ou de soustraire simplement 1 pip. Voici le changement de code :

 

Dans les paramètres cachés, déclarer :

double stopOffset = 0.0001;

 

Ajouter et passer le paramètre tradeDirection à la signature et à l'appel de la méthode openOrderWithErrorHandling :
int openOrderWithErrorHandling(int tradeDirection, int orderType, double orderLots, double openPrice, double stopLoss, double profitTarget, string comment, int magicNumber) {

 

Dans la même méthode, ajoutez le code en vert :

 

   if(stopLoss != 0 || profitTarget != 0) {
      si( tradeDirection == 1 )
      {
         stopLoss -= stopOffset ;
         profitTarget += stopOffset ;
      }
      else if( tradeDirection == -1 )
      {
         stopLoss += stopOffset ;
         profitTarget -= stopOffset ;
      }
      Log("Setting SL/PT, SL : ", stopLoss, ", PT : ", profitTarget) ;
      if(OrderModify(ticket, OrderOpenPrice(), stopLoss, profitTarget, 0, 0)) {
         Log("Ordre modifié, StopLoss : ", OrderStopLoss(),", Profit Target : ", OrderTakeProfit()) ;
      } else {
         Log("Erreur lors de la modification de la commande : ",error, " : ", ErrorDescription(error)) ;
      }
   }
 
Cela fonctionne. Les modifications des échanges sont acceptées par le serveur.

0

Affichage de 6 réponses de 1 à 6 (sur un total de 6)