MT5和速度在行动 - 页 87

 
fxsaber:

更快。

它做同样的事情--返回函数值。但它也事先做了检查。
在函数本身中,也有对符号名称传递值的检查,从它--"如果是一个简单的字符串参数,而不是Symbol()、_Symbol或NULL,那么就检查完整的程序和更多的属性请求",或者使用缓存中的当前符号的值,而无需额外检查。
为什么你再做一次,还声称能加快数据的检索速度?我不明白这种推理的逻辑。

顺便说一下,我总是在我的函数中这样做,但我不认为这在某种程度上加快了数据检索的速度,而是因为在我的函数中对传递的符号名称值进行了检查而减慢了速度。

 
Artyom Trishkin:

为什么你又要做这些事,却声称它能加快数据的速度?

你自己引用了这个解释。

 
Slava:

Symbol(), _Symbol条目等同于NULL(其中允许用NULL代替符号名称)。

在MT4中也是这样吗?而在MT5测试器中呢?

 
Artyom Trishkin:

顺便说一下,我总是在我的函数中这样做

请给我看看。

 
fxsaber:

你自己引用了这个解释。

没错--这都是在常规函数中完成的。为什么在外面也要重复呢?

 
Artyom Trishkin:

没错--这都是在常规函数中完成的。为什么在外面也要重复呢?

那么你就没有理解这个解释。这两个电话的速度是不同的。

void OnTick()
{
  static const string Symb = _Symbol;
  MqlTick Tick;
  
  SymbolInfoTick(_Symbol, Tick);
  SymbolInfoTick(Symb, Tick);  
}
 
fxsaber:

请给我看看。

所有的功能和方法都是和我一起完成的?

他们有太多的人了。

 
Artyom Trishkin:

我这样做的所有功能和方法?

一个就够了。

 
fxsaber:

那么你就没有理解这个解释。这两个电话的速度是不同的。

我似乎已经明白了这一切。当然,这是不一样的。那么你是如何加速的呢?在一种情况下,你将一个不是当前符号的值传递给函数--如果它是not_Symbol。

在这里,在你将上述数值传递给函数的情况下,函数不进行检查,而是从缓存中获取当前符号的数值。

在其他情况下,它查询指定符号的数据,检查 "完整程序 "+其在市场概览中的存在。你的 "快速 "函数在向非本地符号请求数据时并没有摆脱这些检查。那么,加速度在哪里呢?

bool SymbolInfoTickFast( const string &Symb, MqlTick &Tick )
{
  return((Symb == _Symbol) ? SymbolInfoTick(_Symbol, Tick)
                           : SymbolInfoTick(Symb, Tick));
}

在你的函数中,当调用if(SymbolInfoTickFast(Symbol(), tick_array))时只有两个选项{}

  1. 获取当前符号的数据--调用SymbolInfoTick,参数为_Symbol(快速)。
  2. 获取另一个符号数据--调用带有字符串参数的SymbolInfoTick(缓慢)。

还有一点,如果你(在你定义所有移动的东西的习惯中)为当前的符号创建了一个字符串变量,那么是的--你必须在这里做检查,用一个预定义的变量 取代你的宏替换,或者调用Symbol()。

 
Artyom Trishkin:

你是如何加速的?

我很难解释明显的问题。
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);
}
在这段代码中,可以加快GetMarketWatchTick的速度。