¡¡Por favor, ayúdame a resolver este misterio!!

 

No puedo entender por qué el programa se salta las líneas después de una línea anterior exitosa e ignora las instrucciones de esas líneas.

Si mira el código de abajo verá que hay una transacción de venta que se lleva a cabo con éxito en el Probador de Estrategias, pero la transacción de venta nunca se registra en el Diario y las líneas de código después del OrderSend también se ignoran y tampoco se registran en el Diario.

¿Qué sucede?

(Tengo algunos problemas con los datos como se puede ver en una de las muchas líneas: 2012.12.31 11:21:27 TestGenerator: unmatched data error (volume limit 2430 at 2012.11.05 06:00 exceeded))

Este es el fragmento de código al que me refiero:

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:

No puedo entender por qué el programa se salta las líneas después de una línea anterior exitosa e ignora las instrucciones de esas líneas.

Si mira el código de abajo verá que hay una transacción de venta que se lleva a cabo con éxito en el Probador de Estrategias, pero la transacción de venta nunca se registra en el Diario y las líneas de código después del OrderSend también se ignoran y tampoco se registran en el Diario.

¿Qué está pasando?

La venta no funcionó... añada código para imprimir el error cuando cualquier función OrderXxxx() falle, como OrderSend(), OrderModify(), OrderClose(), etc... para más información:¿Qué son los valores de retorno de las funciones? ¿Cómo los utilizo?
 

ernest02,

¿Tal vez esto le sea de utilidad?

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

Gracias.

 

Gracias chicos....pero...

El probador de estrategias muestra varias transacciones de venta - - y tengo una rutina de error en caso de un error en la transacción (código mostrado abajo) pero no hay errores reportados.


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

Gracias chicos....pero...

El probador de estrategias muestra varias transacciones de venta - - y tengo una rutina de error en caso de un error en la transacción (código mostrado abajo) pero no hay errores reportados.

¿Es SellTicket un double o un int? puede mostrar los 2 trozos de código que ha publicado con todos los trozos de código entre ellos por favor....
 

SellTicket es un Integer.

Aquí está más del 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,

No entiendo qué es lo que está causando el error del que hablas, pero podrías considerar reescribir tu código de tal manera que el error no exista.

Dicho esto, si pudieras publicar una descripción de la acción que deseas que realice tu EA, sería más fácil para mí (y/o para otros) darte una solución.

En lugar de intentar aislar el error, si el error cuesta demasiado tiempo encontrarlo, considere reescribir el código para eliminar el error. Depende completamente de ti. Espero que esto sea útil.

Gracias.

 
ernest02:

SellTicket es un Integer.

Aquí está más del código:

Gracias . . sólo para tener claro lo que debería pasar si la Venta funcionara . .

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
 

¡Esto es lo que es tan extraño!

El Probador de Estrategias registra muchas transacciones de Venta pero no se muestra nada en el Diario.

Voy a trabajar a través del código desde el principio de nuevo, hacer algunos cambios y ver qué pasa.

Gracias por toda la ayuda chicos. Se agradece mucho.

(Si encuentro la causa del error, informaré al respecto; de lo contrario, simplemente reescribiré el código).

 
ernest02:

¡Esto es lo que es tan extraño!

El Probador de Estrategias registra muchas transacciones de Venta pero no se muestra nada en el Diario.

Voy a trabajar a través del código desde el principio de nuevo, hacer algunos cambios y ver qué pasa.

Gracias por toda la ayuda chicos. Se agradece mucho.

(Si encuentro la causa del error, informaré al respecto; de lo contrario, simplemente reescribiré el código).

Es extraño... a no ser que estés mirando la pestaña de Expertos por error... ¿has mirado el registro en tester/logs/?
 
ernest02: El Probador de Estrategias registra muchas transacciones de venta pero no se muestra nada en el Diario.
A menos que esté utilizando el modo visual en el probador, nunca habrá nada en el diario.