Ошибки, баги, вопросы - страница 2412

 
Andrey Barinov:

Тогда дебажте. Печатайте тикеты сделок и смотрите в тестере что там выбирается на самом деле. Фильтр по типу сделки все-таки добавьте.

лот выдаёт корректно, соответсвенно тикет выбран верно.

 
Andrey Dik:

лот выдаёт корректно, соответсвенно тикет выбран верно.

Нет. У обеих сделок, In и Out лот одинаковый. А профит нет.

Вот мой код. Работает.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ulong LastOutDealTicket(const string symbol,const uint magic)
  {
//===============
   long lasttime=0;
//===============

//===============
   ulong ticket=0;
//===============

//===============
#ifdef __MQL5__
//===============
   ::HistorySelect(0,TimeCurrent()+60);
//===============
   const int deals=::HistoryDealsTotal();
//===============
   for(int i=deals-1;i>=0;i--)
     {
      //===============
      const ulong tempticket=::HistoryDealGetTicket(i);
      //===============

      //===============
      if(::HistoryDealGetInteger(tempticket,DEAL_ENTRY)!=DEAL_ENTRY_OUT || ::HistoryDealGetString(tempticket,DEAL_SYMBOL)!=symbol ||
         ::HistoryDealGetInteger(tempticket,DEAL_MAGIC)!=magic)continue;
      //===============

      //===============
      if(::MQLInfoInteger(MQL_TESTER))return(tempticket);
      //===============

      //===============
      if(::HistoryDealGetInteger(tempticket,DEAL_TIME)<=lasttime)continue;
      //===============

      //===============
      ticket=tempticket;
      lasttime=::HistoryDealGetInteger(tempticket,DEAL_TIME);
      //===============
     }
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   const int ordershistory=OrdersHistoryTotal();
//===============
   for(int i=ordershistory-1;i>=0;i--)
     {
      //===============
      if(!::OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) || ::OrderSymbol()!=symbol || ::OrderMagicNumber()!=magic || 
         (::OrderType()!=OP_SELL && ::OrderType()!=OP_BUY))continue;
      //===============

      //===============
      if(::MQLInfoInteger(MQL_TESTER))return(::OrderTicket());
      //===============

      //===============
      if(::OrderCloseTime()<=lasttime)continue;
      //===============

      //===============
      ticket=::OrderTicket();
      lasttime=::OrderCloseTime();
      //===============
     }
//===============
#endif 
//===============

//===============
   return(ticket);
//===============
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastClosedProfit(const string symbol,const uint magic)
  {
//===============
   const ulong lastoutticket=::LastOutDealTicket(symbol,magic);
//===============

//===============
   if(lastoutticket<=0)return(0);
//===============

//===============
   double result=0;
//===============

//===============
#ifdef __MQL5__
//===============
   result=::HistoryDealGetDouble(lastoutticket,DEAL_PROFIT);
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   if(::OrderSelect((int)lastoutticket,SELECT_BY_TICKET,MODE_HISTORY))result=::OrderProfit();
//===============
#endif 
//===============

//===============
   return(result);
//===============
  }
 
Andrey Barinov:

Нет. У обеих сделок, In и Out лот одинаковый. А профит нет.

Вот мой код. Работает.

попробовал, Ваш код тоже 0.0 выдаёт)))

счет хедженговый, если что.
 
Andrey Dik:

попробовал, Ваш код тоже 0.0 выдаёт)))

счет хедженговый, если что.

Только что проверил все на 2009 билде. Мой код выдает то, что и должен выдавать. Если выдает 0, значит у Вас там 0 и есть.

 
Andrey Barinov:

Только что проверил все на 2009 билде. Мой код выдает то, что и должен выдавать. Если выдает 0, значит у Вас там 0 и есть.

ну как так то, в истории же есть закрытые сделки с ненулевым результатом, а выдает 0

 
Andrey Barinov:
Andrey Dik:

Есть вариант, что проблема может быть на стороне ДЦ.

 
Alexey Kozitsyn:

Есть вариант, что проблема может быть на стороне ДЦ.

пробовал на Metaquotes и Robo, в тестере.

 
Нашёл ошибку... мой косяк, дело в том, что в функцию закрытия позиции я не передовал маджик, а в функцию открытия передавал, в итоге сделка не могла быть выбрана по маджику..
 

Если в мультивалютнике использовать CSymbolInfo, который в момент инициализации методом Name вызывает:

if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
   return(false);
if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
   return(false);
if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
   return(false);

То во время тестирования для символа USDCAD будут выдаваться ошибки:

no prices for symbol
 
Andrey Pogoreltsev:

Если в мультивалютнике использовать CSymbolInfo, который в момент инициализации методом Name вызывает:

То во время тестирования для символа USDCAD будут выдаваться ошибки:

Кто-то вообще понял о чём речь?

Причина обращения: