Operation of Programs in the Strategy Tester
在策略测试器中的程序操作
MetaTrader 4交易终端中的策略测试器允许您在历史数据上测试专家顾问的性能。
在测试交易机器人时,应考虑策略测试器中的程序测试和优化特性:
- 策略测试器中的功能限制
- 客户端终端的全局变量
- 策略测试器中的时间模拟
- 测试中的图形对象
- 测试器中的事件处理
策略测试器中的功能限制
客户端终端的策略测试器中某些功能的操作存在限制。调用这些功能会导致4059错误(在测试模式下不允许使用功能)。
Sleep()函数
Sleep()函数不会在策略测试器中引起任何延迟。
Print()和PrintFormat()函数
为了提高性能,在优化交易机器人参数时不会执行Print()和PrintFormat()函数。例外情况是这些函数在OnInit()处理程序中的使用。这允许您轻松找到出现错误的原因。
Alert(), MessageBox(), PlaySound(), SendFTP, SendMail(), SendNotification(), WebRequest()函数
专为与“外部世界”交互而设计的Alert(), MessageBox(), PlaySound(), SendFTP(), SendMail(), SendNotification()和WebRequest()函数在策略测试器中不会执行。
OrderSend(), OrderModify(), OrderDelete(), OrderClose(), OrderCloseBy()函数
交易操作不会在与测试对象不同的符号上执行。
客户端终端的全局变量
由于测试器是客户端终端的一部分,它们共享共同的全局变量。因此,它们的名称不应与工作应用程序的全局变量名称重叠。这可能导致程序运行错误和测试结果不准确。
测试器中的时间模拟
在测试时,时间根据历史数据进行模拟。TimeLocal()当地时间始终等于TimeCurrent()服务器时间。而服务器时间始终等于GMT对应的时间TimeGMT()。这样,所有这些函数在测试期间显示相同的时间。
在测试器中故意不区分GMT、当地时间和服务器时间之间的差异,以防与服务器的连接丢失。无论是否有连接,测试结果始终应相同。关于服务器时间的信息不会本地存储,而是从服务器获取。
测试中的图形对象
在可视化过程中,专家顾问与真实图表交互。如果没有可视化,专家顾问则使用未显示的“虚拟”图表工作。前一种情况有一些特殊之处。在优化过程中,不支持处理图形对象。
测试器中的事件处理
策略测试器中处理以下事件:在OnInit()单次运行之前初始化专家顾问,在OnDeInit()单次运行之后反初始化专家顾问,以及模拟新的一笔交易OnTick()。
此外,在在历史数据上测试交易机器人之后调用OnDeInit()反初始化函数之前,会在OnTester()函数中生成Tester事件。此函数返回的值用作优化输入参数的自定义最大标准。
Timer和ChartEvent事件在策略测试器中不会处理。