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

 
 

我们正在扩展初始化序列"{ ...}",在下一次构建中,任何表达式都将被允许,而不仅仅是一个常数。

取而代之的是,对于使用常数的枚举,将有一个限制(如同正则表达式):如果一个常数不是枚举的一部分,将产生一个适当的错误。

对现有代码的分析表明,单零序列"{0}"经常被错误地使用。

例如,像这样。

MqlTradeRequest request={0};


这样的符号意味着为结构的第一个字段设置零值,并将其余的字段置零。

对于上述代码行,根据新的规则,会有一个错误,因为第一个字段的类型是 ENUM_TRADE_REQUEST_ACTIONS,这个枚举缺乏值 "0"。

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


正确的方法应该是。

MqlTradeRequest request={};
 
Ilyas:

这一点是正确的。

MqlTradeRequest request={};

然后request.action会等于什么呢?

 
mktr8591:

然后request.action会等于什么呢?

当然是零,就像为这个结构的对象调用ZeroMemory 一样。

 

我如何跟踪时间序列和基于时间序列的指标?

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

虫子、虫子、问题

斯拉瓦, 2021.05.29 18:16

我想提醒你。

1.对于每个符号,至少有一个图表是开放的,一个单独的线程正在工作,以处理进入的ticks。几个图表可能对某些符号开放,但仍将只有一个线程。

2.符号线程处理时间序列,而不是图表。也就是提交给CopyRates请求的同样的数据数组。

3.在OnTick或OnCalculate 中询问你的符号是否同步是没有用的。当然是这样!

4.所有时间序列都按顺序处理,从低到高。首先,我们应用刻度线,然后计算所有指标,在这个时间序列创建。如果你从指标中询问同一H1符号的数据,在M1上工作,你将永远不会得到应用tick的数据。无论你运用什么技巧,数据都会往后退一个刻度。因为每个符号有一个线程,有连续的时间框架处理。

5.前面的说法并不适用于EA和脚本,因为EA和脚本各自在自己的独立线程中工作。


 
Andrey Khatimlianskii:

我如何跟踪时间序列和基于时间序列的指标?

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

虫子,虫子,问题

斯拉瓦, 2021.06.01 06:34

当你第一次请求时,指标可能没有收到来自其符号的数据,而是另一个时间框架,原因只有一个--所需的时间序列尚未建立,或者在一段时间后已经被销毁,当时没有请求。

在一个不成功的请求之后,只要向你的图表发送一个命令来更新 它,并立即终止OnCalculate。保证OnCalculate会被调用,并且时间序列会在这个时候准备好。

 

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

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

fxsaber, 2017.11.30 09:48

备忘录

行动/方案类型 改变TF或符号 账户变更
指标 运行OnDeinit和OnInit,全局类对象改变(完全重置)。 除了prev_calculated被重置外,什么也没有发生。
EA 运行OnDeinit和OnInit,全局类对象没有 变化。 运行OnDeinit和OnInit,全局类对象改变(完全重载)。
指标的突出行为已经改变。它现在与EA相同。
 
fxsaber:
突出显示的指标行为已经改变。它现在与EA重合。

问题是不同的--这可能是一个疏忽,而不是故意改变行为?你发现了吗?

 
Artyom Trishkin:

问题是不同的--这可能是一个疏忽,而不是故意改变行为?你认出它了吗?

我没有。反馈几乎是不存在的。然而,这里有一个我刚刚发现的功能。

const bool Init = EventSetMillisecondTimer(1);
const long Account = AccountInfoInteger(ACCOUNT_LOGIN);

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnTimer()
{
  if (Account != AccountInfoInteger(ACCOUNT_LOGIN))
    Alert(TOSTRING(Account) + TOSTRING(AccountInfoInteger(ACCOUNT_LOGIN)));
}

该专家顾问在账户之间切换时发出警报。根据规则,它似乎不应该这样做。

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

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

fxsaber, 2017.11.30 09:48

备忘录

行动/方案类型 改变TF或符号 账户变更
指标 运行OnDeinit和OnInit,全局类对象改变(完全重置)。 除了prev_calculated被重置外,什么也没有发生。
EA 运行OnDeinit和OnInit,全局类对象没有 变化。 运行OnDeinit和OnInit,全局类对象改变(完全重载)。
然而,这是由于定时器的原因。
 
fxsaber:

这个顾问在账户之间切换时发出警报。根据规则,它似乎不应该这样做

然而,这是因为计时器的原因而发生的。

没有人保证其他事件处理程序会被打断(或不运行)。

在警报之后,deinit和init都会发生,对吗?