mql5语言的特点、微妙之处以及技巧 - 页 129

 
fxsaber:

ME有一个ALT+V的组合,你可以看到系统剪贴板以前的数值。即使你从浏览器中复制了一些东西,而ME在后台工作,ME也会看到它并记住它。

粗略地说,ME能看到你在电脑上做的很多事情。例如,如果你通过缓冲区粘贴一个账户密码,它会进入ME的历史。

我复制了很多东西到这个巨型缓冲区,我必须重新启动ME来清除这个缓冲区,但当ME启动时,它仍然从缓冲区中获取当前的数据,这很烦人,我建议在底部添加一个清除缓冲区的按钮,并对位置进行编号,当粘贴时,通过位置编号而不是内容来导航更容易。

 
Vitaly Muzichenko:

哇,我在复制加密货币的密码。这对我来说有多大的危害呢?

例如,如果你允许从外部访问你的计算机(TeamViewer等),建议在这之前注销所有的ME,并清理缓冲区(复制那里的垃圾)。

 
fxsaber:

ME有一个ALT+V的组合,你可以看到系统剪贴板以前的数值。即使你从浏览器中复制了一些东西,而ME在后台工作,ME也会看到它并记住它。

粗略地说,ME能看到你在电脑上做的很多事情。

谢谢。有趣的是。值得补充的是,被保存的不仅仅是被复制到ME的内容,而是所有应用程序中的所有内容。具体来说,你必须检查被保存到什么深度,我现在正在检查,看到三个复制的文本,两个来自ME,一个来自这个论坛上的帖子的文本。

ps;甚至有两个来自论坛的文本


 
而且为了以防万一,要确保没有任何东西被搜索或替换。在metaeditor.ini中,这个
FindWhatX=text
ReplaceWithX=text
 
fxsaber:

ME有一个ALT+V的组合,你可以看到系统剪贴板以前的数值。即使你从浏览器中复制了一些东西,而ME在后台工作,ME也会看到它并记住它。

粗略地说,ME能看到你在电脑上做的很多事情。例如,如果你通过缓冲区从其他资源粘贴一个账户或个人账户的密码,它将进入当前ME会话的历史。

这是一个有趣的特点。好在缓冲区是储存在内存中,而不是文件中。

 

这里还有一个微妙之处。

对于输入参数不同的同名函数,即使它们不属于一个类,编译器也不会抱怨。

void OnStart()
{
 f1("28-70 ОГО");
 f1(1.01);
}

void f1(string s)
{
 Print(__FUNCSIG__, " ", s);
}

void f1(double s)
{
 Print(__FUNCSIG__, " ", s);
}

运行时的结果

2019.03.10 10:34:45.566 !00 (EURUSD,H4) void f1(string) 28-70 ОГО
2019.03.10 10:34:45.566 !00 (EURUSD,H4) void f1(double) 1.01
 

多缓冲区对于加快编辑器的速度很有帮助,而且很安全。

它不向磁盘写任何东西,只在内存中保留数据。

 
Alexey Viktorov:

这里还有一个微妙之处。

对于输入参数不同的同名函数,即使它们不属于一个类,编译器也不会抱怨。

执行结果

这是一个正常的函数重载。一切都是标准的。

 
Artyom Trishkin:

这是一个正常的功能过载。一切都是标准的。

出于某种原因,我以为重载只在类中起作用。我想,我不是唯一的一个。也许这能帮助某人。))))

 
可以通过以下技术禁用优化器缓存
// Способ выключить кеш оптимизатора
sinput bool inCache = true; // Выключить кеш оптимизатора

input int Range = 0; // 0..10

void OnTesterInit( void )
{  
  if (inCache)
  {
    MathSrand((int)TimeLocal());
    
    ParameterSetRange("inCache", false, MathRand(), 0, 0, 0);    
  }
}

void OnTesterDeinit( void ) {}

void OnTesterPass( void )
{
  static int i = 0;
  
  Print(i++); // Признак того, что кеш выключен.
}

double OnTester( void )
{
  if (MQLInfoInteger(MQL_OPTIMIZATION))
  {
    uchar Data[];

    FrameAdd(NULL, 0, 0, Data);
  }

  return(0);
}


当然,更好的解决方案是,如果开发者给OptimizationCacheOff()

注意,bool的输入参数实际上是一个long。所以bool inCache = 1bool inCache = 2 是不同的输入参数,尽管它们在两种情况下都是真的。