Avoir le prix ouvert de la bougie à une heure précise. - page 2

 
Kane59:

Ok, j'ai inséré votre code dans mon EA et il fonctionne parfaitement ! J'ai souri quand j'ai vu l'EA s'exécuter comme je le voulais ! !!

Très merci très très ......

C'est en backtest car le marché est fermé...

Mais il y a un problème :

L'EA ouvre correctement les positions, mais les achats ne sont jamais fermés et les ventes sont immédiatement fermées lorsqu'elles sont ouvertes.

Ne voulez-vous pas savoir si votre OrderClose() a échoué et si c'est le cas, pourquoi ? pourquoi ne vérifiez-vous pas la valeur de retour de la fonction OrderClose() et ne signalez-vous pas les erreurs ? vous pourriez découvrir que l'achat et la vente essaient de se fermer immédiatement mais que l'OrderClose() de l'achat échoue....

Quelles sont les valeurs de retour des fonctions ? Comment les utiliser ?

 

Il n'y a pas d'erreur dans l'onglet Journal.


Je vais placer des valeurs de retour. Puis-je le faire ?

Close = CloseOrder(....)

if (Close < 1)

Print ("Close Failed", GetLastError())
 
Kane59:

Il n'y a pas d'erreur dans l'onglet Journal.


Je vais placer des valeurs de retour. Puis-je le faire ?

Close a une signification différente . . . OrderClose() renvoie un bool . . .

if ( ! OrderClose(....) )

Print ("Close Failed", GetLastError())
 
RaptorUK:

Close a une signification différente . . . OrderClose() renvoie un bool . . .


Ok ok je vais faire ça, merci :)
 

J'ai inséré :

if(OrdersTotal()>0)
            { 
               for(int i=OrdersTotal()-1; i>=0; i--)
               {
                  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  {
                     if(OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime(Symbol(), PERIOD_H1, 1))
                     {
                        if(OrderType() == OP_BUY)
                        {
                           OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE);
                           {
                              if(! OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE))
                              {
                                 Print ("Close Buy Failed", GetLastError());
                              }
                           }
                        }
                        if(OrderType() == OP_SELL)
                        {
                           OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE);
                           {
                              if(! OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE))
                              {
                                 Print ("Close Sell Failed", GetLastError());

Pas d'erreur d'écriture.

 
Kane59:

J'ai inséré :

Pas d'erreur d'écriture.

On ne peut pas fermer deux fois le même ordre...

 OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE);            //  first attempt to close
    {
    if(! OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE))       //  second attempt to close
 

J'ai résolu le problème, les conditions de boucle n'étaient pas correctement codées...

Merci encore.

 

Bonjour à tous,

J'ai utilisé le code donné par WHRoeder, mais je vois avec le temps que EA ne prend qu'un seul "#define" pour être une référence pour les 4 différentes heures.

    #define HR0900 23400    // 9*3600
    #define HR1500 54000
    #define HR1900 68400
    #define HR2300 59800

J'ai essayé une autre méthode :

J'ai construit un tableau avec des Int qui sont la référence de la bougie et c'est la même chose, seulement un est considéré non les 4 nombre, comment puis-je le résoudre ?

 
Kane59:

Ok, j'ai inséré votre code dans mon EA et il fonctionne parfaitement ! J'ai souri quand j'ai vu l'EA s'exécuter comme je le voulais ! !!

Qu'avez-vous fait pour casser le codedeWHRoeder?
 
Kane59:

. . . comment puis-je le résoudre ?

Je pense que vous devez montrer votre code.