MT5和速度在行动 - 页 88

 
fxsaber:

一个就够了。

int CTickSeriesCollection::IndexTickSeries(const string symbol)
  {
   const CTickSeries *obj=new CTickSeries(symbol==NULL || symbol=="" ? ::Symbol() : symbol);
   ...
   ...
   ...
  }

此外,我还检查了""。我自己在调用当前字符的方法时总是使用NULL。

 
Artyom Trishkin:

你的代码不会给出加速。

 
fxsaber:
我发现很难解释明显的事情。在这段代码中,有可能加快GetMarketWatchTick的速度。
const MqlTick GetMarketWatchTick( const string &Symb )
{
  MqlTick Tick = {0};

  SymbolInfoTick(Symb, Tick);

  return(Tick);
}

void OnTick()
{
  MqlTick Ticks[1];
  
  Ticks[0] = GetMarketWatchTick(_Symbol);
  ArrayPrint(Ticks);
}

你认为即使_Symbol作为Symbol参数被传递,一个字符串也会被传递给SymbolInfoTick()吗?

我不认为标准函数内部没有检查字符串与当前符号是否相等,如果当前符号的缓存在手,这种显式参数就开始 "全速 "检查。

 

加速是在编译时进行的,而不是在运行时。

编译器会进行这种替换。

SymbolInfoTick(_Symbol, Tick) -> SymbolInfoTickInside(Tick);
SymbolInfoTick(NULL, Tick) -> SymbolInfoTickInside(Tick);
SymbolInfoTick(::Symbol(), Tick) -> SymbolInfoTickInside(Tick);

在所有其他情况下,不进行替换。

 
fxsaber:

加速是在编译时进行的,而不是在运行时。

编译器会进行这种替换。

在所有其他情况下,不进行替换。

好吧。这就是我所说的--你的代码不会对非当前字符的常规函数进行加速。也不会加快当前的字符。

而我的不会。而且它从来没有。我对这一点也不抱幻想。但在调用普通函数时,如果我的函数被传入NULL或"",我总是使用Symbol()或NULL。这就调用了常规函数的快速代码--从缓存中获取当前符号的数据。
如果我的函数调用使用Symbol() 或_Symbol - 如果它与当前的符号重合,是否不在标准函数内检查?它真的会用当前符号的全范围检查来执行代码吗?我不相信...

 
Artyom Trishkin:

好吧。这就是我所说的--你的代码不会对非当前字符的常规函数进行加速。也不会加快当前的字符。

也许有人可以向你解释得更清楚。这对我来说并不奏效。

 
fxsaber:

也许有人可以向你解释得更清楚。我没有得到它。

你在用什么巫术来加快常规功能?

当你把当前字符的值传递给staff函数时,你是用替换的方法使它使用缓存中的当前字符的数据。这不会加快正常的功能,而是使用它的速度来处理当前的字符。

你不可能对你无法获得的东西进行加速。你正在使用标准的技术来正确调用函数。但我不确定,如果在处理欧元兑美元时,Symbol被字符串指定为 "EURUSD",即使用当前的符号,那么工作人员函数不会检查字符串 "EURUSD "是否等于Symbol(),不会使用缓存的数据,而是开始全速检查符号。

那么,正则函数的加速度在哪里?如果它存在,那就更有趣和有用了。

 
fxsaber:

在MT4中也是这样吗?而在MT5-Tester中,情况如何?

CopyTicks的情况也是如此吗?

 
fxsaber:

也许有人可以向你解释得更清楚。我没有得到它。

更有可能的是,你没有理解我的问题。我已经重复了好几次(而且这个问题不是关于 "加快常规功能")。

 
Slava:

如果指定了一个普通的字符串参数,而不是Symbol()、_Symbol或NULL,那么就会进行全面检查,也会查询属性。

不知道为什么,这个解释没有说,如果字符串参数与当前符号相同,那么就不会对完整的程序进行检查。