错误、漏洞、问题 - 页 2414

 
Andrey Pogoreltsev:

如果你在多货币中使用CSymbolInfo,它在初始化的时候被Name方法调用。

在测试期间,USDCAD符号会出现错误。

测试期间的存款货币 是什么?

 
Slava:

测试时存款的货币 是什么?

美元。欧元兑美元M1测试对。我将尝试在裸体EA中重现它。到目前为止,它还没有成功。但正是这些方法导致了日志中的错误,而且正好是一对。

 
Slava:

测试时存款的货币 是什么?

一般都是转载,发现了一个特点。附上测试设置。

裸露的专家顾问代码本身。

#include <Trade\SymbolInfo.mqh>

int OnInit()
  {
//---
   CSymbolInfo info;
   info.Name("EURCHF.m");
   info.Refresh();
   info.Name("EURJPY.m");
   info.Refresh();
   info.Name("EURUSD.m");
   info.Refresh();
   info.Name("EURGBP.m");
   info.Refresh();
   info.Name("USDCAD.m");
   info.Refresh();
//---
   return(INIT_SUCCEEDED);
  }


现在是 "功能",正如承诺的那样)如果你像这样使用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);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);

则会出现错误。但这样一来,错误就消失了。

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);
   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);


PS。我的cent上有以".m "为前缀命名的配对。这个例子也适用于普通对。

附加的文件:
test.png  11 kb
 
Andrey Pogoreltsev:

总之,转载后发现了一个特点。我已经附上了测试设置。


谢谢你。理解它

 

Bug MT5 build 2007。在优化模式 下,输入字符串被截断为63个字符。

测试的代码。

#property strict

sinput string symbols = "AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY";
input  bool fortestopt = false;
int OnInit(){
   Print("!!! ",StringLen(symbols)," | ",symbols);

   return INIT_FAILED;
}

void OnTick(){}


单次运行一切正常: !90 | Audusd,eurgbp,eurusd,gbpaud,gbpcad,gbpchf,gbpjpy,gbpnzd,gbpusd,nzdusd,usdcad,usdchf,usdjpy

让我们通过fortestopt参数设置优化,让我们去看代理的日志: !63 | Audusd,eurgbp,eurusd,gbpaud,gbpcad,gbpchf,gbpjpy,gbpnzd,gbpusd。

 

有谁想知道...

我在我的页面上看不到新闻联播...以前进去可以看到谁发了什么,现在是空白页......我没有在设置中改变任何东西......

 

编译器错误,会产生歧义错误,尽管这里的一切都很明确。第一个方法应该被调用为最合适的方法在C++中测试。

class A { };

class B
{
  A _a[];
 public:
        A * operator[](uint i)       { return &_a[i]; }
  const A * operator[](uint i) const { return &_a[i]; }  
};

void OnStart()
{
  B b;
  b[0]; // 'operator[]' - ambiguous call to overloaded function
}
 
Evgenii Kuznetsov:

Bug MT5 build 2007。在优化模式 下,输入字符串被截断为63个字符。

测试的代码。


单次运行一切正常: !90 | Audusd,eurgbp,eurusd,gbpaud,gbpcad,gbpchf,gbpjpy,gbpnzd,gbpusd,nzdusd,usdcad,usdchf,usdjpy

让我们通过fortestopt参数设置优化,让我们去看代理的日志: !63 | Audusd,eurgbp,eurusd,gbpaud,gbpcad,gbpchf,gbpjpy,gbpnzd,gbpusd。

事实上,它在一次测试中也没有切到63个字符,这只是一种侥幸。

输入参数类型字符串的长度不得超过63个字符(连同空结尾64个)。

 
Slava:

事实上,它在单次测试中也没有削减到63个字符,这只是一种侥幸。

字符串类型的输入参数的长度不应超过63个字符(连同空结尾64个)。

这是某种严酷的限制。在今天的时代,这样做的理由是什么?那么如何方便地指定一串字符的簇呢?绘制一打不同的参数?它是否方便?

 
Slava:

单一测试没有截断到63个字符的事实只是一个意外。

字符串类型的输入参数的长度不得超过63个字符(连同空尾巴一起为64个)。

这种限制是不恰当的,我们不是把一公斤土豆的价格写进字符串。

原因: