错误、漏洞、问题 - 页 1702

 
我明白了。谢谢你。
 
Dmytro Zelenskyy:

好的,如何正确地将双倍数转换为int,并保留符号(数字并不重要,如果超出限制,则限制为int)。

转换为长。
 
fxsaber:
回复,然后立即关闭。

我需要能够删除自己(指标),以防有一个副本在运行,尽管输入参数不同。要做到这一点,我需要找出自己的把柄。不幸的是,当时我不知道在MQL中100%的情况下这是不可能的。因此,我决定尝试一个不太聪明的技巧。

我翻阅了所有的手柄。如果它与我在检查前在指标中写的随机性相吻合,就自动意味着这个手柄属于我,如果有必要,我可以自己删除。

正是从这些考虑出发,写出了这样无害的代码,引起了开发者如此模棱两可,但显然是负面的反应。你看,你不能这样做。你做了什么?好吧,我通过CopyBuffer读取我的缓冲区的值。这是否违法?

开发商的回应中没有 "你不能这样做 "这样的说法。没有任何地方说它是 "非法的"。

如果你认为你绝对需要这种 "无害的代码"--使用它。只要在读取缓冲区后将IndicatorRelease(handle))加入OnCalculate()即可。你不需要在每次打勾时都检查它是否是 "你的 "指标,对吗?

这就是指标如何解决你的问题,不再是 "看不见的"。

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

double Buffer[];

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   ::SetIndexBuffer(0,Buffer,INDICATOR_DATA);
   handle=ChartIndicatorGet(0,1,ChartIndicatorName(0,1,0));
  }

#define  TOSTRING(A) #A + " = " + (string)A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(handle!=INVALID_HANDLE)
     {
      Buffer[rates_total-1]=MathRand();

      double BufferCopy[];

      if(CopyBuffer(handle,0,0,1,BufferCopy)>0)
         Print(TOSTRING(BufferCopy[0])+TOSTRING(Buffer[rates_total-1]));
         
      if(IndicatorRelease(handle)) 
         handle=INVALID_HANDLE;
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int Reason)
  {
   if(handle!=INVALID_HANDLE)
      IndicatorRelease(handle);
   return;
  }


让社区意识到,以这种方式创建一个后台不受控制地执行任何代码,甚至在没有图表的终端上也是可能的。这里有一个小提示。是否认为这是一个错误,可能是一个术语问题。我的理解是,开发商不能够在这里改变任何建筑上的东西。这就是为什么会有这样的愤怒。我无法以任何其他方式解释这种反应。

仆人式的反应 中没有 "愤怒"。人们对你经常夸大你所遇到的问题的动机有误解。

开发商能够改变事情。但他们通常对 "剥夺和禁止 "甚至无证行为的建议非常谨慎,如果它不是明确的有害行为。这个 "黑客 "相当特别,但也许有人正在使用它。

也许在终端仍然会有关于它的编辑,但这肯定不是一个巨大的问题,这个问题的优先级也是最小的。

反正没人愿意说出来。这 样的耙子会在帮助中得到很好的反映。

事实证明,你很清楚,终端的这个 "严重错误 "只对你有兴趣。

在这一点上,让我们结束这个问题。技术上的细节都已经讨论过了,而情感上的问题在这个问题上是没有必要的。

 
Anton:

开发商的答复中没有 "不允许 "这样的字眼。没有任何地方说它是 "非法 "的。

如果你认为这个 "无害的代码 "对你来说是绝对必要的--就使用它。只要在读取缓冲区后将IndicatorRelease(handle))加入OnCalculate()即可。你不需要在每次打钩时都检查它是否是 "你的 "指标,是吗?

不,当然,没有这种需要。

这就是指标如何解决你的问题,不再是 "看不见的"。

关于这个话题,我最近收到了你的同事的回复

关于交易、自动交易系统和策略测试的论坛

错误、漏洞、问题

Slawa, 2016.09.07 17:17

fxsaber:

iCustom后的IndicatorRelease应该怎么做?

为了什么?

不要。在指标创建后也不要做

我还没有得到答案。

关于交易、自动交易系统和交易策略测试的论坛

虫子、虫子、问题

fxsaber, 2016.09.07 17:27

之后并不意味着立即。但是,如果你不必这样做,你什么时候应该 这样做?

仆人式的反应 中没有 "愤怒"。对你经常夸大你所面临的问题的动机有误解。

其动机纯粹是自私的。我希望所有的事情都能按照文档的要求,可预测地工作。虫子很烦人,这就是结果。

开发商有能力改变。但他们通常对 "带走和禁止 "甚至无证行为的建议非常谨慎,除非它明显有害。这个 "黑客 "相当特别,但也许有人正在使用它。

也许在这个问题上还会对终端进行编辑,但这肯定不是一个巨大的问题,这个问题的优先级也是最小的。

我同意关于优先权的说法。

事实证明,你很清楚,终端的这个 "严重错误 "只对你感兴趣。

让我们在这个时候完成这个问题。所有的技术细节都要讨论,但在这个问题上,情绪是不必要的。

不,他们不发表评论还有一个原因。不管这个错误有多严重。我的 "严肃性 "是指你已经可以制作并放在同一个市场中的虫子。然后面临着VPS没有足够的计算资源的事实。总之,你明白这个意思。
 
Vladimir Pastushak:

我不需要这样,我想做很多工作,使我今后的生活更轻松。

我是这样解决我的问题的,在父类中,所有的proteced和继承都在proteced之下,然后是override。

如果父类都是受保护的,那么就不需要做保护继承了(你可以留下公有的)。 但是现在不清楚你最初想要的是什么。 如果你需要把父类方法隐藏在类里面(而不是像我想的那样在外面),那么保护和它有什么关系呢? 你需要一个原始的。
 
Alexey Navoykov:
只是现在已经不清楚你原来想要什么了。
看起来只是摆脱了弹出列表中不可用的方法。
 
Sergei Vladimirov:
似乎只是摆脱了弹出列表中不可用的方法。
那么,无法进入的就不会出现,是吗?
 
Sergei Vladimirov:
看起来只是摆脱了弹出列表中的不可用方法。

不仅如此,我还为自己重写了图形对象的类,从一个描述对象所有属性的类中,我现在很容易理解地(至少对我来说)做出了Button类型的后代。

此外,从这些简单的元素中,我可以以最小的错误概率、最大的速度和简单性(至少,对我来说)建立更复杂的元素。

也许你会友好地踢我一脚,说标准库拥有一切,但我现在要告诉你,这不是全部,而且都是不可理解的。我习惯于用我完全理解的东西来工作,要理解这一切是如何进行的,你需要亲自尝试这一切......。

 
Alexey Navoykov:
那么,无法进入的就不会出现,是吗?

不,他们这样做。

顺便说一下,在工作室里也是一样的。

 
Sergei Vladimirov:

不,他们这样做。

那么Metakvots应该注意这一点。 为什么要显示不可访问的方法呢? 毕竟,在受保护的部分,所有的东西都是隐藏的,因为它应该是这样的。 所以这里也应该是这样的。