Per favore aiutatemi a risolvere questo mistero!

 

Non riesco a capire perché il programma salta le linee dopo una linea precedente di successo e ignora le istruzioni su quelle linee.

Se guardate il codice qui sotto vedrete che c'è una transazione Sell che viene eseguita con successo nello Strategy Tester, ma la transazione Sell non viene mai registrata nel Journal e anche le linee di codice dopo l'OrderSend vengono ignorate e non registrate nel Journal.

Cosa sta succedendo?

(Ho qualche problema con i dati come si può vedere da una delle tante righe: 2012.12.31 11:21:27 TestGenerator: unmatched data error (volume limit 2430 at 2012.11.05 06:00 exceeded))

Ecco il frammento di codice a cui mi riferisco:

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:

Non riesco a capire perché il programma salta le linee dopo una linea precedente di successo e ignora le istruzioni su quelle linee.

Se guardate il codice qui sotto vedrete che c'è una transazione Sell che viene eseguita con successo nello Strategy Tester, ma la transazione Sell non viene mai registrata nel Journal e anche le linee di codice dopo l'OrderSend vengono ignorate e non registrate nel Journal.

Cosa sta succedendo?

La vendita non ha funzionato. . . aggiungere codice per stampare l'errore quando qualsiasi funzione OrderXxxx() fallisce, come OrderSend(), OrderModify(), OrderClose(), ecc . . . per maggiori informazioni:Cosa sono i valori di ritorno delle funzioni? Come si usano?
 

ernest02,

Forse questo ti sarà utile?

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

Grazie.

 

Grazie ragazzi.... ma...

La strategia Tester mostra diverse transazioni Sell - - e ho una routine di errore in caso di errore nella transazione (codice mostrato sotto) ma non ci sono errori riportati.


  // 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:

Grazie ragazzi.... ma...

La strategia Tester mostra diverse transazioni Sell - - e ho una routine di errore in caso di errore nella transazione (codice mostrato sotto) ma non ci sono errori riportati.

SellTicket è un double o un int? Puoi mostrare i 2 bit di codice che hai postato con tutti i bit di codice in mezzo per favore.
 

SellTicket è un intero.

Qui c'è altro codice:

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,

Non capisco cosa sta causando l'errore di cui parli, ma potresti considerare di riscrivere il tuo codice in modo tale che l'errore non esista.

Detto questo, se tu potessi postare una descrizione dell'azione che desideri che il tuo EA esegua, sarebbe più facile per me (e/o altri) fornirti una soluzione.

Invece di cercare di isolare l'errore, se l'errore costa troppo tempo per trovarlo, considera di riscrivere il codice per rimuovere l'errore. Dipende completamente da voi. Spero che questo sia utile.

Grazie.

 
ernest02:

SellTicket è un intero.

Qui c'è altro codice:

Grazie . . . solo per essere chiari su ciò che dovrebbe accadere se il Sell ha funzionato . . .

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
 

Questo è ciò che è così strano!

Lo Strategy Tester registra molte transazioni di vendita ma non viene mostrato nulla nel Journal.

Ho intenzione di lavorare di nuovo sul codice dall'inizio, fare alcune modifiche e vedere cosa succede.

Grazie per tutto l'aiuto ragazzi. Molto apprezzato.

(Se trovo la causa dell'errore lo comunicherò - altrimenti riscriverò semplicemente il codice).

 
ernest02:

Questo è ciò che è così strano!

Lo Strategy Tester registra molte transazioni di vendita ma non viene mostrato nulla nel Journal.

Ho intenzione di lavorare di nuovo sul codice dall'inizio, fare alcune modifiche e vedere cosa succede.

Grazie per tutto l'aiuto ragazzi. Molto apprezzato.

(Se trovo la causa dell'errore lo comunicherò - altrimenti riscriverò semplicemente il codice).

Strano... a meno che tu non stia guardando per errore la scheda Experts, hai dato un'occhiata al log in tester/logs/?
 
ernest02: Lo Strategy Tester registra molte transazioni di vendita ma non viene mostrato nulla nel Journal.
A meno che tu non stia usando la modalità visiva nel tester, non ci sarà mai nulla nel giornale.