ernest02:
卖出交易没有成功 ......添加代码,当任何OrderXxxx()函数失败时打印错误,如OrderSend(), OrderModify(), OrderClose(), 等等 ......更多信息:什么是函数返回值?我如何使用它们?
我不明白为什么程序会跳过前一行成功后的几行,而忽略了这几行的指令。
如果你看一下下面的代码,你会发现有一个卖出交易 在策略测试器中被成功执行,但是卖出交易从未被记录在日志中,OrderSend之后的几行代码也被忽略,也没有记录在日志中。
这到底是怎么回事?
ernest02,
也许这对你会有帮助?
Print("Error description",GetLastError());
谢谢你。
谢谢大家....,但是...
// 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:
SellTicket是双数 还是整数? 你能不能把你发布的两段代码和中间的所有代码显示出来?
谢谢大家....,但是...
SellTicket是一个整数。
下面是更多的代码。
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:
SellTicket是一个整数。
下面是更多的代码。
谢谢你.......只是想弄清楚,如果Sell成功了,应该发生什么。.
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
ernest02:
奇怪 ......除非你错看了专家选项卡? 你有没有看一下测试器/日志/中 的日志?
这就是最奇怪的地方!
策略测试器记录了许多卖出交易,但日志中却没有显示。
我打算再从头看一遍代码,做一些修改,看看会发生什么。
谢谢大家的帮助。非常感谢。
(如果我找到了错误的原因,我将向你们报告--否则我将重写代码)。
ernest02: 策略测试器记录了许多卖出交易,但在日志中却没有显示。
除非你在测试器中使用可视化模式,否则日记中永远不会有任何东西。
我不明白为什么程序会跳过前一行成功后的几行,而忽略了这几行的指令。
如果你看一下下面的代码,你会发现有一个卖出交易 在策略测试器中 被成功执行,但是卖出交易从未被记录在日志中,OrderSend之后的几行代码也被忽略,也没有记录在日志中。
这到底是怎么回事?
(我的数据确实有一些问题,从许多行中可以看出。2012.12.31 11:21:27 TestGenerator: unmatched data error (volume limit 2430 at 2012.11.05 06:00 exceeded))
以下是我所指的代码片段。