Я не могу понять, почему программа пропускает строки после успешной предыдущей строки и игнорирует инструкции в этих строках.
Если вы посмотрите на код ниже, то увидите, что есть транзакция на продажу, которая успешно выполняется в тестере стратегий, но транзакция на продажу никогда не записывается в журнал, и строки кода после 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); }
Спасибо, ребята, но...
Тестер стратегий показывает несколько транзакций на продажу - - - и у меня есть процедура обработки ошибок в случае ошибки в транзакции (код показан ниже), но никаких ошибок не сообщается.
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
Вот что странно!
Тестер стратегий регистрирует множество сделок на продажу, но в журнале ничего не отображается.
Я собираюсь снова проработать код с самого начала, внести несколько изменений и посмотреть, что произойдет.
Спасибо за помощь, ребята. Очень признателен.
(Если я найду причину ошибки, я сообщу о ней - в противном случае я просто перепишу код).
Вот что странно!
Тестер стратегий регистрирует множество сделок на продажу, но в журнале ничего не отображается.
Я собираюсь снова проработать код с самого начала, внести несколько изменений и посмотреть, что произойдет.
Спасибо за помощь, ребята. Очень признателен.
(Если я найду причину ошибки, я сообщу о ней - в противном случае я просто перепишу код).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я не могу понять, почему программа пропускает строки после успешной предыдущей строки и игнорирует инструкции в этих строках.
Если вы посмотрите на код ниже, то увидите, что есть транзакция на продажу, которая успешно выполняется в тестере стратегий, но транзакция на продажу никогда не записывается в журнал, и строки кода после OrderSend также игнорируются и также не записываются в журнал.
Что происходит?
(У меня действительно есть некоторые проблемы с данными, как видно из одной из многих строк: 2012.12.31 11:21:27 TestGenerator: ошибка несопоставленных данных (превышен лимит объема 2430 в 2012.11.05 06:00))
Вот фрагмент кода, на который я ссылаюсь: