错误、漏洞、问题 - 页 2412

 
Andrey Barinov:

然后进行调试。打印交易票据,并在测试器中看到那里实际选择的内容。不过,添加一个交易类型 的过滤器。

地段显示正确,所以票面选择正确。

 
Andrey Dik:

地段是正确的,所以票是正确的。

不,两种交易,进和出,都有相同的手数。但利润却没有。

这是我的代码。它是有效的。

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

不,两种交易,进和出,都有相同的手数。利润是没有的。

这是我的代码。它是有效的。

试过了,你的代码也给出了0.0))))。

如果有的话,该账户是被套期保值的。
 
Andrey Dik:

试过了,你的代码也给出了0.0))))。

如果有的话,该账户是被套期保值的。

刚刚检查了2009年建造的一切。我的代码给出了它应该给出的东西。如果它给出了0,这意味着你那里有0。

 
Andrey Barinov:

刚刚检查了2009年建造的一切。我的代码给出了它应该给出的东西。如果它给出了0,这意味着你那里有0。

怎么会这样,在历史上有关闭的交易,其结果不是零,而它给出的是0

 
Andrey Barinov:
安德烈-迪克

有一种可能性,问题可能出在直流侧。

 
Alexey Kozitsyn:

有一种可能性,问题可能出在直流侧。

在Metaquotes和Robo上试过,在测试器中。

 
发现我的错误...我的错误是,我没有把majik传给平仓 函数,而是传给了开仓函数,结果交易无法被majik选中......
 

如果你在多货币中使用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符号会出现错误。

有没有人明白我们在说什么?