S'il vous plaît, aidez-moi à résoudre ce mystère !

 

Je ne comprends pas pourquoi le programme saute les lignes après une ligne précédente réussie et ignore les instructions de ces lignes.

Si vous regardez le code ci-dessous, vous verrez qu'il y a une transaction de vente qui est exécutée avec succès dans le testeur de stratégie, mais la transaction de vente n'est jamais enregistrée dans le journal et les lignes de code après l'envoi de l'ordre sont également ignorées et ne sont pas non plus enregistrées dans le journal.

Que se passe-t-il ?

(J'ai effectivement quelques problèmes avec les données comme on peut le voir sur l'une des nombreuses lignes : 2012.12.31 11:21:27 TestGenerator : unmatched data error (volume limit 2430 at 2012.11.05 06:00 exceeded))

Voici le bout de code auquel je fais référence :

if(IsTradeContextBusy()) Sleep(10);
      SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,SellPrice,UseSlippage,SellStopLoss,SellTakeProfit,"CCITrendReversal",MagicNumber,0,Red);
        Print("SellTicket is ",SellTicket);  
           if (SellTicket >= 0) 
           {
             PlaySound("news.wav");
             SellTime = OrderOpenTime();
             SellSignal = false;
           }
          Print("SellSignal2 is ", SellSignal);
 
ernest02:

Je ne comprends pas pourquoi le programme saute les lignes après une ligne précédente réussie et ignore les instructions de ces lignes.

Si vous regardez le code ci-dessous, vous verrez qu'il y a une transaction de vente qui est exécutée avec succès dans le testeur de stratégie, mais la transaction de vente n'est jamais enregistrée dans le journal et les lignes de code après l'envoi d'ordre sont également ignorées et ne sont pas non plus enregistrées dans le journal.

Que se passe-t-il ?

La vente n'a pas fonctionné... ajoutez du code pour imprimer l'erreur lorsque n'importe quelle fonction OrderXxxx() échoue, comme OrderSend(), OrderModify(), OrderClose(), etc... pour plus d'informations :What are Function return values ? Comment les utiliser ?
 

ernest02,

Peut-être cela vous sera-t-il utile ?

Print("Error description",GetLastError());

Merci.

 

Merci les gars....mais...

Le testeur de stratégie montre plusieurs transactions de vente - - et je dispose d'une routine d'erreur en cas d'erreur dans la transaction (code ci-dessous) mais aucune erreur n'est signalée.


  // Error handling
             if(SellTicket == -1)
               {
                ErrorCode = GetLastError();
                ErrDesc = ErrorDescription(ErrorCode);

                ErrAlert = StringConcatenate("Open Sell Order - Error ",ErrorCode,": ",ErrDesc);
                Alert(ErrAlert);

                ErrLog = StringConcatenate("Ask: ",Ask," Lots: ",LotSize," Price: ",SellPrice," Stop: ",SellStopLoss," Profit: ",SellTakeProfit);
                Print(ErrLog);
               }
 
ernest02:

Merci les gars....mais...

Le testeur de stratégie montre plusieurs transactions de vente - - et je dispose d'une routine d'erreur en cas d'erreur dans la transaction (code ci-dessous) mais aucune erreur n'est signalée.

Est-ce que SellTicket est un double ou un int ? Pouvez-vous montrer les 2 bouts de code que vous avez posté avec tous les bouts de code entre les deux s'il vous plaît . . .
 

SellTicket est un Integer.

Voici la suite du code :

if (SellSignal == true && CCIReal < (CCILevel - SellLevel) && TotalSellOrders <= MaxTrans && SellTrans == true)

      {
       Print("CCI is ",CCIReal);
       
       for (Count = OrdersTotal()-1; Count >= 0; Count--)
                    if (OrderSelect(Count, SELECT_BY_POS)
                    && OrderType() == OP_BUY
                    && OrderMagicNumber() == MagicNumber)
                    
                    {
                    int BuyOrder = OrderTicket();
                    
                    while(IsTradeContextBusy()) Sleep(10);
                
                    bool Closed = OrderClose(BuyOrder, OrderLots(), Bid, UseSlippage, Blue);
                                            
                            // Error handling
                  if(Closed == false)
                     {
                        ErrorCode = GetLastError();
                        string ErrDesc = ErrorDescription(ErrorCode);

                        string ErrAlert = StringConcatenate(" Close Buy Order Error - Error ",ErrorCode,": ",ErrDesc, " Bid is ", Bid, " SellTakeProfit is ", SellTakeProfit);
                        Alert(ErrAlert);

                        string ErrLog = StringConcatenate("OrderTicket: ",OrderTicket());
                        Print(ErrLog);
                        
                     }
                      
                            }
                       
      
      RefreshRates();
      
      SellPrice = Bid;
      
      if (TrailingStopFunc == false)
      
         
         SellStopLoss = Bid + (StopLoss * UsePoint);
         else SellStopLoss = 0;
           
      
      SellTakeProfit = Bid - (TakeProfit * UsePoint);
      
      if(IsTradeContextBusy()) Sleep(10);
      SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,SellPrice,UseSlippage,SellStopLoss,SellTakeProfit,"CCITrendReversal",MagicNumber,0,Red);
        Print("SellTicket is ",SellTicket);  
           if (SellTicket >= 0) 
           {
             PlaySound("news.wav");
             SellTime = OrderOpenTime();
             SellSignal = false;
           }
          Print("SellSignal2 is ", SellSignal);
          
          // Error handling
             if(SellTicket == -1)
               {
                ErrorCode = GetLastError();
                ErrDesc = ErrorDescription(ErrorCode);

                ErrAlert = StringConcatenate("Open Sell Order - Error ",ErrorCode,": ",ErrDesc);
                Alert(ErrAlert);

                ErrLog = StringConcatenate("Ask: ",Ask," Lots: ",LotSize," Price: ",SellPrice," Stop: ",SellStopLoss," Profit: ",SellTakeProfit);
                Print(ErrLog);
               }
         
         }
 

ernest02,

Je ne comprends pas ce qui cause l'erreur dont vous parlez mais vous pourriez envisager de réécrire votre code de manière à ce que l'erreur n'existe pas.

Ceci dit, si vous pouviez poster une description de l'action que vous souhaitez que votre EA effectue, il serait plus facile pour moi (et/ou d'autres) de vous fournir une solution.

Au lieu d'essayer d'isoler l'erreur, si l'erreur coûte trop de temps à trouver, envisagez de réécrire le code pour supprimer l'erreur. C'est vous qui décidez. J'espère que cela vous sera utile.

Merci.

 
ernest02:

SellTicket est un Integer.

Voici la suite du code :

Merci. . juste pour être clair sur ce qui devrait se passer si la vente fonctionne... .

Print("SellTicket is ",SellTicket);    //  <---  this will be printed to the journal
           if (SellTicket >= 0) 
           {
             PlaySound("news.wav");    //  <---  PlaySound does not work in the Strategy Tester 
             SellTime = OrderOpenTime();   //  <---  if the Sell worked this variable will be set (or do we first need an OrderSelect() ?)
             SellSignal = false;           //  <---  if the Sell worked this variable will be set
           }
          Print("SellSignal2 is ", SellSignal);    //  <---  this will be printed to the journal
 

C'est ce qui est si étrange !

Le testeur de stratégie enregistre de nombreuses transactions de vente mais rien n'apparaît dans le journal.

Je vais retravailler le code depuis le début, apporter quelques modifications et voir ce qui se passe.

Merci pour votre aide. J'apprécie beaucoup.

(Si je trouve la cause de l'erreur, je ferai un rapport - sinon, je vais simplement réécrire le code).

 
ernest02:

C'est ce qui est si étrange !

Le testeur de stratégie enregistre de nombreuses transactions de vente mais rien n'apparaît dans le journal.

Je vais retravailler le code depuis le début, apporter quelques modifications et voir ce qui se passe.

Merci pour votre aide. J'apprécie beaucoup.

(Si je trouve la cause de l'erreur, je ferai un rapport - sinon je réécrirai simplement le code).

Bizarre ... à moins que vous ne regardiez l'onglet Experts par erreur ? Avez-vous jeté un coup d'œil au journal dans tester/logs/?
 
ernest02: Le testeur de stratégie enregistre de nombreuses transactions de vente mais rien n'apparaît dans le journal.
À moins que vous n'utilisiez le mode visuel dans le testeur, il n'y aura jamais rien dans le journal.