Por favor, ajude-me a resolver este mistério!!

 

Não consigo entender porque o programa pula as linhas após uma linha anterior bem sucedida e ignora as instruções nessas linhas.

Se você olhar para o código abaixo, verá que há uma transação de Venda que é realizada com sucesso no Strategy Tester, mas a transação de Venda nunca é registrada no Diário e as linhas de código após o OrderSend também são ignoradas e também não são registradas no Diário.

O que está acontecendo?

(Eu tenho alguns problemas com os dados, como pode ser visto em uma das muitas linhas: 2012.12.31 11:21:27 TestGenerator: erro de dados incomparável (limite de volume 2430 em 2012.11.05 06:00 excedido))

Aqui está o trecho de código ao qual me refiro:

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:

Não consigo entender porque o programa pula as linhas após uma linha anterior bem sucedida e ignora as instruções nessas linhas.

Se você olhar para o código abaixo, verá que há uma transação de Venda que é realizada com sucesso no Strategy Tester, mas a transação de Venda nunca é registrada no Diário e as linhas de código após o OrderSend também são ignoradas e também não são registradas no Diário.

O que está acontecendo?

O Sell não funcionou . . . adicionar código para imprimir o erro quando qualquer função OrderXxxx() falhar, como OrderSend(), OrderModify(), OrderClose(), etc . . . para mais informações:O que são valores de retorno de função ? Como eu os utilizo ?
 

ernest02,

Talvez isto seja útil para você?

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

Obrigado.

 

Obrigado, pessoal....mas...

O testador de estratégia mostra várias transações de venda - e eu tenho uma rotina de erro no caso de um erro na transação (código mostrado abaixo), mas não há erros relatados.


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

Obrigado, pessoal....mas...

O testador de estratégia mostra várias transações de venda - e eu tenho uma rotina de erro no caso de um erro na transação (código mostrado abaixo), mas não há erros relatados.

SellTicket é um duplo ou um int ? você pode mostrar os 2 bits de código que você postou com todos os bits de código no meio, por favor . .
 

O SellTicket é um Integer.

Aqui está mais do código:

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,

Não entendo o que está causando o erro de que você fala, mas você poderia considerar reescrever seu código de tal forma que o erro não exista.

Dito isto, se você pudesse publicar uma descrição da ação que deseja que sua EA realize, seria mais fácil para mim (e/ou outros) fornecer-lhe uma solução.

Em vez de tentar isolar o erro, se o erro custar muito tempo para ser encontrado, considere reescrever o código para remover o erro. Depende completamente de você. Espero que isto seja útil.

Obrigado.

 
ernest02:

O SellTicket é um Integer.

Aqui está mais do código:

Obrigado . . só para ficar claro o que deveria acontecer se a Venda funcionasse . .

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
 

Isto é o que é tão estranho!

O Testador de Estratégia registra muitas transações de Venda, mas nada é mostrado no Jornal.

Vou trabalhar no código desde o início novamente, fazer algumas mudanças e ver o que acontece.

Obrigado por toda a ajuda. Muito apreciado.

(Se eu encontrar a causa do erro, eu vou relatar de volta - caso contrário, eu vou apenas reescrever o código).

 
ernest02:

Isto é o que é tão estranho!

O Testador de Estratégia registra muitas transações de Venda, mas nada é mostrado no Jornal.

Vou trabalhar no código desde o início novamente, fazer algumas mudanças e ver o que acontece.

Obrigado por toda a ajuda. Muito apreciado.

(Se eu encontrar a causa do erro, eu vou relatar de volta - caso contrário, eu vou apenas reescrever o código).

Estranho . . . a menos que você esteja olhando para a guia Especialistas por engano ? você já deu uma olhada no log in tester/logs/?
 
ernest02: O Testador de Estratégia registra muitas transações de Venda, mas nada é mostrado no Jornal.
A menos que você esteja usando o modo visual no testador, nunca haverá nada no diário.