错误、漏洞、问题 - 页 2222

 
Alexander:

稳定的播放?什么建筑?

是的,这个问题是可以重现的。1870年版本。
 

问题。

假设我在一个专家顾问或指标中处理几个符号,或者说处理市场观察窗口中显示的所有符号。

任务是抓住任何一个符号上出现新刻度的时刻。

到目前为止,我只看到几个选项。
  1. 通过一个定时器,对所有符号进行轮询。(当然,你只能轮询TimeCurrent() 的新值,但在这种情况下,错误将是1秒,因为这个函数返回的是以秒为单位的值)
  2. 在OnTick(或OnCalculate)中的每个符号,通过EventChartCustom产生一个自定义事件。

第一个选项的缺点是在资源和数据相关性方面的非优化。OnTimer主要在空闲时敲击,当它捕捉到一个新的报价时,到达时间的误差将等于定时器的周期性。

第二种变体的缺点是繁琐,尤其是在有几十个符号的情况下。

我的理解是否正确,没有其他选择(更简单和更优雅)?或者(我希望)我错了吗?

 
Nikolai Semko:

问题。

假设我在一个专家顾问或指标中处理几个符号,或者说处理市场观察窗口中显示的所有符号。

任务是抓住任何一个符号上出现新刻度的时刻。

到目前为止,我只能看到有几个选择。
  1. 通过一个定时器,对所有符号进行轮询。(当然,你只能轮询TimeCurrent() 的新值,但在这种情况下,错误将是1秒,因为这个函数返回的是以秒为单位的值)
  2. 在OnTick(或OnCalculate)中的每个符号,通过EventChartCustom产生一个自定义事件。

第一个选项的缺点是在资源和数据相关性方面的非优化。OnTimer主要在空闲时敲击,当它捕捉到一个新的报价时,到达时间的误差将等于定时器的周期性。

第二种变体的缺点是繁琐,尤其是在有几十个符号的情况下。

我的理解是否正确,没有其他选择(更简单和更优雅)?或者(我希望)我错了吗?

也许这个会有帮助?https://www.metatrader5.com/ru/terminal/help/trading_advanced/custom_instruments

具有实时报价的合成工具

交易平台允许你创建合成金融工具--基于一个或多个现有工具的工具。你只需要设置一个公式来计算报价,平台就会实时生成合成工具的点位,还可以创建其分钟历史。
它是如何工作的

你创建了一个合成工具,并为其设定了公式。
该平台将以每秒10次的频率计算其ticks(并且只有在公式中至少有一个工具的价格发生变化时才会计算)
 
SEM:

也许这个会有帮助?https://www.metatrader5.com/ru/terminal/help/trading_advanced/custom_instruments

具有实时报价的合成工具

交易平台允许你创建合成金融工具--基于一个或多个现有工具的工具。你只需要设置计算报价的公式,平台就会实时生成合成工具的点数并创建其分钟历史。
它是如何工作的

你创建了一个合成工具,并为其设定了公式。
平台将以每秒10次的频率计算其ticks(并且只有在公式中至少有一个工具的价格发生变化时才会计算)

是的,当然,那个变种人也有生命权。谢谢!
但是,事实上,它与我的变体#1相同,定时器周期为100毫秒,具有相同的缺点。

不过,在我看来,方案2似乎更合理。

顺便说一下,我记得这里 已经讨论过方案2了。


 
Nikolai Semko:

是的,当然,这种变体也有生命权。谢谢你!
然而,从本质上讲,它与上面的变体#1相同,定时器周期为100ms。

使EA与它所工作的符号相联系不是更容易吗?然后打开所有符号,将带有该EA的模板应用 于每个图表。

for(int i=PositionsTotal()-1;i>=0;i--)
     {
      if(PositionGetSymbol(i)==Symbol())
        {
         //Код
        };

     }
 
SEM:
使EA与它所工作的符号相联系不是更容易吗?然后打开所有的符号,并为每个图表应用 该EA的模板

很明显,这是可以做到的。问题是,我不知道一些事情,有可能通过一个多货币EA的代码来追踪另一个符号的报价的确切时刻。
但似乎通过自定义中断的变体2 是唯一合理的解决方案。

 
Nikolai Semko:

是的,很明显,可以这样做。问题是,我不知道一些事情,有可能通过一个多货币专家顾问的代码来捕捉另一个符号的报价的确切时刻。
但似乎通过自定义中断的变体2 是唯一合理的解决方案。

实施。

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.01.28
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Nikolai Semko:
  1. 通过定时器,对所有字符进行轮询。(当然,你可以直接轮询TimeCurrent() 的新值,但在这种情况下,错误会是1秒,因为这个函数返回的是以秒为单位的值)。

我认为没有其他选择(更简单、更优雅),这样的假设是否正确?或者(我希望)我错了吗?

毫秒计时器+SymbolInfoTick()将得到毫秒的时间。

 
fxsaber:

实施。

是的,我已经在第22214号帖子中给了你实施的这个链接。我再说一遍--我认为这个变体是迄今为止最合理的。而且,从最小的CPU负载和所产生的新刻度时刻的相关性来看,似乎没有更好的实现。
 
Nikolai Semko:
  1. через таймер c опросом всех символов. (можно, конечно, только опрашивать новое значение функции TimeCurrent(), но в этом случае погрешность будет равна 1 секунде, т.к. эта функция возвращает значение в секундах)

Я правильно понимаю, что других вариантов (более простых и изящных) не существует? Или (надеюсь) я не прав?

毫秒级计时器+SymbolInfoTick()获得毫秒级的时间。

阿列克谢-科齐岑

Millisecond计时器+SymbolInfoTick()得到的时间为毫秒。

我的意思是这样的结构(毫秒计时器+SymbolInfoTick()循环)。我提到TimeCurrent() 是因为它返回"Market Watch窗口中任何符号的最后一次报价的到达时间",不仅是针对当前符号,但不幸的是它只返回秒数,这对ticks来说非常不礼貌
客观地说,带有用户中断的变体更加合理,因为不需要不断地用昂贵的SymbolInfoTick函数组织一个循环,即使在报价器处于睡眠状态时也是如此,从而使处理器加载了闲置时间。此外,计算新刻度的误差可能等于定时器的周期性,所有的刻度将在OnTimer执行之间丢失,如果这些刻度超过1。
SZZ 我们正在谈论mql5。在mql4上,用户中断不能正常工作。因此,mql4只能使用定时器。
原因: