OrderClose ne fonctionne pas - page 3

 

Merci thrdel, je vais examiner votre codage. Vous êtes vraiment très gentil. Merci encore

 
thrdel:


Si vous voulez dire que ce n'est pas la meilleure façon de fermer un ordre, je suis d'accord, mais si le gars ne veut pas utiliser OrderSelect (ou ne sait pas comment) et ne laisse aucun ordre ouvert sur le marché, cela fonctionne.

Nous essayons de nous entraider ici et votre réponse ne l'a pas aidé du tout, vous ne lui avez pas montré comment utiliser la fonction Order Select et son EA ne fonctionne pas mieux maintenant à cause de votre commentaire.

La prochaine fois que vous voulez aider, faites-le de la bonne manière, mettez le bon code pour que les autres puissent apprendre quelque chose.

 
Merci à tous ceux qui ont répondu à ma question. Mon intention est d'ouvrir une transaction lorsque la barre 2 remplit certaines conditions. Je teste sur GBPJPY et j'ouvre une seule transaction à la fois car je suis très novice dans MQL4. Avec une seule transaction, je suis capable d'utiliser le ticket dans Orderclose(). Je ne suis toujours pas familier avec OrderSelect. La transaction sera donc clôturée si la barre 3 remplit certaines conditions. J'aimerais poser une question : existe-t-il un moyen de stocker l'exécution du programme dans un fichier à des fins de débogage ? J'ai constaté que lorsque le programme s'exécute, je ne sais pas quelle partie de l'exécution s'est mal passée.
 
chuale:
Merci à tous ceux qui ont répondu à ma question. Mon intention est d'ouvrir une transaction lorsque la barre 2 remplit certaines conditions. Je teste sur GBPJPY et n'ouvre qu'une seule transaction à la fois car je suis très novice dans MQL4. Avec une seule transaction, je suis capable d'utiliser le ticket dans Orderclose(). Je ne suis toujours pas familier avec OrderSelect. La transaction sera donc clôturée si la barre 3 remplit certaines conditions. J'aimerais poser une question : existe-t-il un moyen de stocker l'exécution du programme dans un fichier à des fins de débogage ? J'ai constaté que lorsque le programme s'exécute, je ne sais pas quelle partie de l'exécution s'est mal passée.

Vous êtes le bienvenu Chuale, j'ai beaucoup appris des autres sur ce forum aussi, donc pas de problème. Vous n'avez pas vraiment besoin de sauvegarder l'exécution du programme dans un fichier, il y a plusieurs façons de surveiller les valeurs de vos variables et les erreurs qui peuvent survenir. J'utilise principalement la fonction Comment() et la fonction Print (). Je peux vous envoyer des exemples si vous le souhaitez. Comme je l'ai déjà mentionné, GBPJPY ne m'a pas donné de résultats positifs, mais USDJPY oui. Je n'ai fait qu'un back test d'un mois (Jan21/2014 - Feb25/2015) et avec mes paramètres le retour était un peu plus de 400 USD. Je testerai d'autres paires dès que j'aurai un peu de temps et je vous le ferai savoir. Par ailleurs, si vous avez besoin d'aide pour savoir comment utiliser Print() ou Comment() pour voir les valeurs à l'écran en temps réel, faites-le moi savoir. L'image précédemment jointe était le graphique de performance de votre EA sur une période d'un mois. Il n'a pas l'air trop mauvais jusqu'à présent.
 

Cher thedel,

Merci

Oui, j'utilise Print(). J'ai besoin de savoir comment utiliser OrderSelect() s'il y a plusieurs transactions ouvertes. Pour une seule transaction, si j'utilise SELECT_BY_POS, quelle sera la valeur de l'index (OrderSelect (int index, in select, int pool=MODE_TRADES) ? Est-ce 1 ?

ou quelle valeur ?

 
chuale:
Merci à tous ceux qui ont répondu à ma question. Mon intention est d'entrer dans une transaction lorsque la barre 2 remplit certaines conditions. Je teste sur GBPJPY et j'ouvre une seule transaction à la fois car je suis très novice dans MQL4. Avec une seule transaction, je suis capable d'utiliser le ticket dans Orderclose(). Je ne suis toujours pas familier avec OrderSelect. La transaction sera donc clôturée si la barre 3 remplit certaines conditions. J'aimerais poser une question : existe-t-il un moyen de stocker l'exécution du programme dans un fichier à des fins de débogage ? J'ai constaté que lorsque le programme s'exécute, je ne sais pas quelle partie de l'exécution s'est mal passée.


Voici un exemple d'utilisation de la fonction Order Select :

Dans cet exemple, la fonction CountTrades vérifie tous les ordres ouverts et en attente, écarte ceux qui n'ont pas de symbole et de numéro magique correspondant et ne compte que ceux dont nous avons besoin.

Dans cet exemple, la sélection se fait du plus récent au premier.

Si vous avez besoin de plus d'aide, faites-le moi savoir.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
/*
On every tick program checks what the value of myTrades is
by calling (executing) the CountTrades() function and asign the value
returned to myTrades..
*/
int myTrades = CountTrades();
/*
Comment() function will display the words in quotes and the value of 
myTrades variable.
*/
Comment("You have "+myTrades+" open trades.");
   
  }
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;// we start counting from zero
int trade;  // define a variable that will hold the total number of trades that are open
// Get the number of trades from OrdersTotal() and asign that value to trade variable.
for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
   OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); // Select orders by position (OP_BUY and OP_SELL) - orders can be selected by position or by ticket
                                                 // select from Open or pending orders = MODE_TRADES or select from History = MODE_HISTORY
   if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)// if the order has a different symbol or magic number, skip to next order
   continue;
   if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)// if symbol is right and magic number is right, that is my order ,then
   if(OrderType()==OP_SELL                                         // if it's an open sell do this.....
   || OrderType()==OP_BUY)                                         // if it's an open buy do this......      
   count++;                                                        // in this example increase the counter since I'm counting all my orders
   }
return(count);                                                     // When finished counting, return the result
}
 
thrdel:


Si tu veux dire que ce n'est pas la meilleure façon de fermer un ordre, je suis d'accord mais si le gars ne veut pas utiliser OrderSelect (ou ne sait pas comment) et ne laisse pas d'ordres ouverts sur le marché, ça marche.

Nous essayons de nous entraider ici et votre réponse ne l'a pas aidé du tout, vous ne lui avez pas montré comment utiliser la fonction Order Select et son EA ne fonctionne pas mieux maintenant à cause de votre commentaire.

La prochaine fois que vous voulez aider, faites-le de la bonne manière, mettez le bon code pour que les autres puissent apprendre quelque chose.


Si vous essayez d'aider alors expliquez-le correctement

Vous avez dit

thrdel:

D'abord vous comptez les ordres avec OrdersTotal().

total=OrdersTotal();


mauvais exemple...... que vous avez donné

si le gars ne veut pas utiliser OrderSelect() alors il doit arrêter de programmer des EAs

c'est un grand non-sens ce que vous dites ici, https://www.mql5.com/en/forum/149958/page2#915413

j'ai commenté ton exemple de code et t'ai dit ce que tu devais faire

il y a beaucoup d'exemples que j'ai donné comment faire ...

google pour cela si tu veux les trouver

 
thrdel:


Il y a plusieurs choses que vous avez mal faites. Je suppose que vous voulez que cet EA fonctionne sur les paires JPY sur le cadre temporel M1. Voulez-vous placer des ordres sur la nouvelle barre uniquement et fermer les ordres sur la nouvelle barre uniquement ou voulez-vous entrer sur la nouvelle barre et sortir si les conditions sont remplies ? Voici ce que je pense :

Tout d'abord, vous comptez les commandes avec OrdersTotal().

Ensuite, vous calculez vos variables

S'il y a des ordres sur le marché, vérifiez s'ils doivent être fermés.

S'il n'y a pas d'ordres sur le marché, vérifiez si les conditions d'entrée sont remplies.

Faites-moi savoir si vous avez des questions.

 
Lorsque j'ai compilé les éléments suivants, le système a indiqué que la fonction Time n'était pas définie. Veuillez me conseiller.
if(Time[0]==previousTime) return(0);         //EA will not go past this point unless it is a new bar
   previousTime=Time[0];                        // If it was a new bar , it's old now but continue to the end
 
chuale:
Lorsque j'ai compilé les éléments suivants, le système a indiqué que la fonction Time n'était pas définie. Veuillez me conseiller.


ok j'ai réparé car j'ai mal tapé la parenthèse pour Time, c'est supposé être [] au lieu de (). Merci