下载MetaTrader 5
要添加评论,请登录注册
您有博客吗?把链接放在MQL5.community 并获利
Jinsong Zhang
14651
Jinsong Zhang 2009.10.07 07:54 
我们知道,tick跳动一下,就进入starrt()进行运算,如果在运算过程中又有一个新的tick, 那么是继续原来的运算,忽略新的tick, 还是怎样?
connect y2k
178
connect y2k 2009.10.07 07:56  

应该是忽略。

直到本次start()完成后,重新接收到新的报价时,再进入start()。

yuanming
37
yuanming 2009.10.10 16:32  
我测试的感觉不是忽略的,而是直接就进入start(),个人见解
connect y2k
178
connect y2k 2009.10.11 04:19  

个人认为:

在实时行情中运行ea,是忽略。

在测试中,是等待ea的start()运行完成后,向ea提供新的测试数据。

yuanming
37
yuanming 2009.10.11 06:18  
y2k_connect 写道 >>

个人认为:

在实时行情中运行ea,是忽略。

在测试中,是等待ea的start()运行完成后,向ea提供新的测试数据。

在波动很频繁的行情下实盘测试时,我的某些EA给我的感觉是并不能及时执行某些指令(如修改订单),有时波动特别频繁时,经常会在这一段时间内这些指令都得不到执行,但是如果我在程序中加入一个Print("1")指令,每个TICK都会输出一次1,所以我感性的认为可能是接受到一个新TICK就执行一次start()

cao
40
cao 2009.10.11 14:19  
skytodme 写道 >>

在波动很频繁的行情下实盘测试时,我的某些EA给我的感觉是并不能及时执行某些指令(如修改订单),有时波动特别频繁时,经常会在这一段时间内这些指令都得不到执行,但是如果我在程序中加入一个Print("1")指令,每个TICK都会输出一次1,所以我感性的认为可能是接受到一个新TICK就执行一次start()

有同感

connect y2k
178
connect y2k 2009.10.11 18:35  
skytodme 写道 >>

在波动很频繁的行情下实盘测试时,我的某些EA给我的感觉是并不能及时执行某些指令(如修改订单),有时波动特别频繁时,经常会在这一段时间内这些指令都得不到执行,但是如果我在程序中加入一个Print("1")指令,每个TICK都会输出一次1,所以我感性的认为可能是接受到一个新TICK就执行一次start()

如何加入Print("1")的?

是将程序所有内容用Print("1")替换,还是在发出OrderMOdify()之前加?

Jinsong Zhang
14651
Jinsong Zhang 2009.10.12 03:57  

我用以下代码在不同平台实际测试EA:

void start()
{
Print("--1");
Sleep(10000);
Print("----2");
}

返回的结果说明start()运行完成后再等待下一个tick

connect y2k
178
connect y2k 2009.10.12 04:40  

在1秒钟的时间里,mt4会接收到n(n>2)次行情数据。如果start()对每个行情数据都处理一次,当前图表最新数据就和计算机时间不同步了。因此,只能忽略start()执行期间接收的行情数据。

在智能交易测试平台中,不存在这个问题。因此可以对每个行情数据执行一次start()。

yuanming
37
yuanming 2009.10.12 04:49  
song_song 写道 >>

我用以下代码在不同平台实际测试EA:

void start()
{
Print("--1");
Sleep(10000);
Print("----2");
}

返回的结果说明start()运行完成后再等待下一个tick

是这么回事,谢谢楼上

yuanming
37
yuanming 2009.10.12 04:49  
y2k_connect 写道 >>

在1秒钟的时间里,mt4会接收到n(n>2)次行情数据。如果start()对每个行情数据都处理一次,当前图表最新数据就和计算机时间不同步了。因此,只能忽略start()执行期间接收的行情数据。

在智能交易测试平台中,不存在这个问题。因此可以对每个行情数据执行一次start()。

恩,我搞清楚了,谢谢

/
要添加评论,请登录注册