EA mélange les ordres d'ACHAT et de VENTE - page 2

 

Sans connaître l'ensemble de l'ea et la façon dont vous l'utilisez, nous ne ferons que deviner ce qui ne va pas. En supposant qu'il sélectionne un ordre correct pour passer cette instruction.

while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}

il n'y a aucune chance qu'il passe :

if ((orderType == OP_BUY || orderType == OP_BUYSTOP)) {

si c'est Op_Sell. A moins que vous n'ayez cette chose sur plusieurs graphiques du même symbole.

Vu que vous utilisez une boucle while litigieuse. C'est probablement une forme de générateur d'ordre rapide.

Ma dernière hypothèse. L'ordre sélectionné change après la vérification du type d'ordre :)

Pour le reste, je vous suggère, comme Raptor, d'utiliser beaucoup d'instructions d'impression.

 
  1. L'ordre sélectionné ne peut PAS changer après l'orderSelect.
  2.  for(cnt = total-1; cnt >= 0; cnt--)  {
          while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}
    Si l'orderSelect échoue, il échouera continuellement et vous aurez une boucle infinie. Si plusieurs ordres sont clôturés sur un autre graphique pendant que vous mettez à jour le vôtre, la sélection de l'itération suivante échouera. Très dangereux.
 

J'ai imprimé le numéro du ticket et il ne correspond pas au OrderType().


Si la commande sélectionnée est de type OP_BUY, le bon si sera traité, mais ensuite dans mon appel OrderModify(...), je passe OrderTicket() comme premier paramètre, mais c'est le ticket d'une autre commande.


Avez-vous une idée ?

 
dvarrin:

Avez-vous une idée ?

Peut-être que vous essayez de modifier un ordre qui est déjà fermé ? vous ne spécifiez pas le pool dans lequel vous sélectionnez vos transactions ....

OrderSelect( int index, int select, int pool=MODE_TRADES) 
MODE_TRADES (par défaut) - ordre sélectionné dans le pool de négociation (ordres ouverts et en attente),
.

MODE_HISTORY - ordre sélectionné dans le pool historique (ordre fermé et annulé).


	          
 
RaptorUK:

Peut-être essayez-vous de modifier un ordre qui est déjà clôturé ? vous ne spécifiez pas le pool dans lequel vous sélectionnez vos transactions....

MODE_TRADES (par défaut) - ordre sélectionné dans le pool de négociation (ordres ouverts et en attente),

MODE_HISTORY - ordre sélectionné dans le pool historique (ordre fermé et annulé).


J'ai essayé cela aussi, mais cela n'a rien changé. Il semble que je doive stocker toutes les données de l'ordre sélectionné que je veux utiliser :


int ticket=0 ;

double SL = 0.0 ;

OrderSelect(cnt, ...) ;

ticket = OrderTicket() ;

SL = OrderStoposs() ;

si (OrderType() == OP_BUY) {


}


...


Pourquoi en est-il ainsi ? Je ne comprends pas ce qui ne va pas dans mon code pour que l'OrderTicket() ne corresponde pas au même ordre que celui auquel l'OrderType() se réfère.

 
dvarrin:

J'ai imprimé le numéro du ticket et il ne correspond pas au OrderType().


Si la commande sélectionnée est de type OP_BUY, le bon si sera traité, mais ensuite dans mon appel OrderModify(...), je passe OrderTicket() comme premier paramètre, mais c'est le ticket d'une autre commande.

S'agit-il de la commande suivante dans la séquence, ou de la commande précédente dans la séquence ?
 

orderType = OrderType()

changez en

int orderType = OrderType() ; et supprimez la déclaration originale.

 
forexCoder:

orderType = OrderType()

changez en

int orderType = OrderType() ; et supprimez la déclaration originale.


OrderType est correct. C'est le OrderTicket() qui n'est pas le ticket de la bonne commande.
 

Je vous encourage à trouver la cause de votre problème plutôt que de le contourner....

Le génie logiciel consiste à résoudre des problèmes, c'est ainsi que nous apprenons et que nous nous améliorons. J'en suis à ma troisième tentative depuis samedi pour coder un problème particulier lié aux Fibs, j'y suis presque... ... l'utilisation prudente de la fonction Print() aide beaucoup... ...

 
dvarrin:

OrderType est ok. C'est le OrderTicket() qui n'est pas le ticket de la bonne commande.

int OrderType = OrderType() n'est pas correct, l'un peut cacher l'autre (les déclarations locales cachent les globales sans erreur).

int orderType = OrderType()

Raison: