Questions "pour" du conducteur de vélo - page 11

 
WhooDoo22:


Je pense que vous ne comprenez pas ce que je veux dire... Si j'ajoute des accolades, ce sera plus clair... ... tu as fait ça...

Je crois que j'ai voulu faire ça...

C'est parce que je souhaitais que la condition...

soit appliquée à la section de code entre accolades ("{ }").

Alors pourquoi n'avez-vous pas fait ce changement dans la dernière version de votre code ? ... si vous vouliez le faire, pourquoi ne l'avez-vous pas fait ?

 
WhooDoo22:

Simon,


Le 0 dans votre image est probablement de . . . .


Nah-uh-uh ! ;)

Faisons un voyage dans le monde de la documentation, d'accord ? Hahaha.

datetime OrderCloseTime( )
Renvoie l'heure de clôture de l'ordre actuellement sélectionné. Si l'heure de clôture de l'ordre est différente de 0, alors l'ordre sélectionné a été fermé et récupéré dans l'historique du compte. Le temps de fermeture des ordres ouverts et en attente est égal à 0.

Note : L'ordre doit être préalablement sélectionné par la fonction OrderSelect().


D'abord, jetons un coup d'oeil au bloc de code de la fonction OrderClose() que j'ai récemment codé...

Ensuite, jetons un coup d'oeil au résultat affiché dans un instantané du panneau 'Experts'...

Aaah, qu'est-ce que nous avons ici ? :)

Je ne suis pas sûr de ce que vous essayez de faire ici, pouvez-vous expliquer s'il vous plaît ? le Print(OrderCloseTime()) est évidemment faux mais vous l'avez toujours dans votre code, pourquoi ? que s'est-il passé quand vous avez ajouté les 2 lignes de code que j'ai suggéré ?
 

Simon,

Alors pourquoi n'avez-vous pas fait ce changement dans la dernière version de votre code ? ... si vous aviez l'intention de le faire, pourquoi ne l'avez-vous pas fait ?

Donnez-moi une seconde pour regarder, s'il vous plaît.

J'avais l'intention de coder ceci auparavant mais je n'ai pas l'intention de le faire maintenant. Il n'y a aucune raison de coder ceci...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
      {
      if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
      if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}           
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
         {
         OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
         Print(OrderCloseTime());
         GetLastError();
         }
      }

Quand je peux coder ceci à la place...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      Print(OrderCloseTime());
     }

Toutes les conditions 'if' s'appliquent à ce qui se trouve à l'intérieur des accolades ("{}"). Ajouter des accolades à ce bloc de code (de la manière dont je voulais le coder) est inefficace et ne sert à rien.


Merci.

 

Simon,


Je ne suis pas sûr de ce que vous essayez de faire ici, pouvez-vous expliquer s'il vous plaît ?

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      Print(OrderCloseTime());
     }

// replace above code block with...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
//      Print(OrderCloseTime());
     }

Faites tourner l'EA (sans la fonction Print()) dans le terminal sur un compte de démonstration, puis cliquez sur le volet "Experts" et visualisez l'absence du zéro (0) dans le reste des résultats du volet "Experts".

Remarquez qu'il n'y a pas de 0. Hmm, n'est-ce pas ? ;)

Faites maintenant tourner l'EA (avec la fonction Print() incluse).

Remarquez un 0 dans le volet "Experts".


Vous avez deviné pourquoi il y avait un zéro dans les résultats du volet "Experts" précédemment et vous aviez raison (rayez "Nah-uh-uh ! ;)" au début du message).

Le 0 dans votre image provient probablement de . . .

Print(OrderCloseTime());

Vous vous souvenez ? Bien sûr que oui. :)


le Print(OrderCloseTime()) est manifestement faux mais vous l'avez toujours dans votre code, pourquoi ?

Veuillez expliquer pourquoi vous pensez que c'est une erreur.

Je l'ai mis dans le code pour vous montrer un point. Ce que je veux dire: Zéro apparaît dans le panneau "Experts" parce que ce bout de code est dans le code.


Que s'est-il passé lorsque vous avez ajouté les 2 lignes de code que j'ai suggérées ?

Je suis en train de travailler rapidement sur ce problème :)


Je vous remercie

 
WhooDoo22:

le Print(OrderCloseTime()) est manifestement erroné mais vous l'avez toujours dans votre code, pourquoi ?

Veuillez expliquer pourquoi vous pensez que c'est une erreur.

Je l'ai mis dans le code pour vous montrer un point. Ce que je veux dire: Zéro apparaît dans le volet "Experts" parce que ce bout de code est dans le code.


La dernière image que vous avez postée montre que l'ordre USDJPY a été clôturé à 01:45:35 ... la ligne de code suivante qui suit la ligne qui a clôturé l'ordre est Print(OrderCloseTime()) ; et il en résulte une valeur de 0 .... . 0 comme date est Midnight 1st Jan 1970, ce n'est pas quand vous avez fermé l'ordre, comme vous l'avez correctement souligné une valeur de retour de 0 de OrderCloseTime() peut aussi être quand l'ordre est ouvert ou est un ordre en attente, bien votre ordre est fermé, vous savez qu'il est fermé, votre dernière image le prouve . ... alors comment une valeur de 0 peut-elle être correcte ? la réponse est qu'elle ne peut pas être correcte, ce qui signifie qu'elle est fausse.

 

Simon,

Je travaille actuellement sur ce sujet...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}           
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      int ClosedTicketNum = OrderTicket();   //  <---- add this line
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      
      OrderSelect(ClosedTicketNum, SELECT_BY_TICKET);   //  <---- add this line

      Print(OrderCloseTime());
      GetLastError();
     }

Merci.

 
WhooDoo22:

Simon,

Alors pourquoi n'avez-vous pas fait ce changement dans la dernière version de votre code ? ... si vous aviez l'intention de le faire, pourquoi ne l'avez-vous pas fait ?

Donnez-moi une seconde pour regarder, s'il vous plaît.

J'avais l'intention de coder ceci auparavant mais je n'ai pas l'intention de le faire maintenant. Il n'y a aucune raison de coder ceci...

Quand je peux coder ceci à la place...

Toutes les conditions 'if' s'appliquent à ce qui se trouve à l'intérieur des accolades ("{}"). Ajouter des accolades à ce bloc de code (de la manière dont je voulais le coder) est inefficace et ne sert à rien.

OK, en regardant ce code . . . .

if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))                                  // 1.
if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}                   // 2.
if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}                  // 3.
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);                   // 5.
      Print(OrderCloseTime());                                                    // 6.
     }

J'ai numéroté les lignes pour faciliter la discussion.

En regardant la ligne 1, laquelle des autres lignes de code numérotées sera exécutée si OrderStopLoss() et OrderTakeProfit() sont tous les deux à0?

 

Simon,

Corrigé, donc cela fonctionne comme prévu.

if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}                   // 2.
if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}                  // 3.
if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))                                  // 1.
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);                   // 5.
      Print(OrderCloseTime());                                                    // 6.
     }

Lignes 2 et 3.

Merci.

 

Simon,

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      int ClosedTicketNum=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      OrderSelect(ClosedTicketNum,SELECT_BY_TICKET);
      
      Print(OrderCloseTime());
     }

Résultat :

Résultat du volet "Experts".

Pourquoi l'heure de clôture de l'ordre est-elle représentée sous une telle forme (1357306061) ?

Est-ce que la raison pour laquelle la fonction Print() fonctionne est que la fonction OrderSelect() (dans les accolades) doit sélectionner l'ordre fermé et NON un ordre ouvert ? Cela doit être fait à l'intérieur des accolades, n'est-ce pas ? ;) C'est délicat, délicat.

Merci.

 

Simon,

C'est parti... BAM !

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }

Encore mieux ! Hahaha ;)

Merci.

Dossiers :
Raison: