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?
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); }
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.
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.
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).
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).
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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: