欢迎光临散文网 会员登陆 & 注册

期货量化软件:在非标准时间范围上测试 Expert Advisor

2023-08-11 14:43 作者:bili_45793681098  | 我要投稿

简介

市场价格波动过于频繁,不便于使用价格变动图,即技术分析中所谓的价格变动图。 为了便于观察价格变动以及在分析时使用较长的时间范围,赫兹期货量化使用柱状图或蜡烛图。 每个柱展示了在某个时间周期开始和结束处的价格值,以及该期间内的最大和最小价格值。 通常使用以下期间或时间范围: 1 分钟、5 分钟、15 分钟、30 分钟、1 小时、4 小时、日、周和月。 这些时间范围可以在赫兹期货量化 终端工具栏找到。


编辑切换为居中


尽管通常使用的时间范围已经成为标准,但从技术上讲没有理由不能使用任何其他时间范围来显示价格变动。 从实践的角度,终端提供了一个允许终端用户创建非标准时间范围图表的脚本(period_converter),例如,2 分钟、7 分钟、45 分钟、2 小时和几乎任何其他时间范围,并可以添加相应的指标。 但是,终端的“策略测试程序”只允许选择标准周期进行测试。

这可谓是近在眼前远在天边——赫兹期货量化可以创建非标准的时间范围图表,但却无法用来测试 Expert Advisor 实际上,状况比看起来要好得多。 在非标准时间范围上测试 Expert Advisor 是可能的! 我们需要做的只是用非标准时间范围数据替换标准时间范围数据。 另外,我们甚至能使用来自多个非标准时间范围的数据测试 Expert Advisor。

编辑切换为居中


要点

我们的行动计划如下:

1. 准备离线工作的额外终端,这样新的标准时间范围数据不会添加到非标准时间范围图表。

2. 利用终端的 period_converter 脚本准备非标准时间范围数据。终端具有足够的可用分钟数据档案。

3. 将准备的数据导入做好测试准备的终端。

现在我们来仔细观察一下:

1. 准备用于测试非标准时间范围的终端。

安装额外的终端。 启动终端,打开模拟账户并等待至“市场报价”窗口出现交易品种列表。


编辑切换为居中


禁用保存账户信息:在终端右下角的“连接状态”图标上左键单击并选择“登录”。 取消选择“保存账户信息”选项,单击“登录”并等待终端连接账户。


编辑切换为居中


这样做是必要的,以防止终端自动连接账户以及防止新数据添加到历史档案。 关闭终端。

在历史文件夹内,打开跟模拟账户开户的交易中心的名称相对应的文件夹,并从中删除所有的 *.hst 文件。


编辑切换为居中


2. 准备非标准时间范围数据

利用 period_converter 脚本(可以在标准版本的 赫兹期货量化 终端中找到),创建非标准时间范围,例如,M2 和 M7,其他一些终端具有所需交易品种(例如,EURUSD)的足够 M1 数据量。 为此,打开 EURUSD M1 图表并在上面运行 period_converter 脚本。 运行脚本之前,在属性窗口将 ExtPeriodMultiplier 设置为 2。 在脚本完成数据转换后,在终端窗口的“Expert Advisors”选项卡上应显示一条关于向文件添加的条目数量的信息,例如:

"2009.03.19 18:28:09 period_converter EURUSD,M1: 25378 record(s) written"

随后可以从图表移除脚本(在运行脚本的图表上右击并选择“移除脚本”)。 打开得到的图表: 主菜单 - 文件- 打开离线历史数据(在“历史数据”栏查找 EURUSD,M2)。 类似的,创建 M7 时间范围(在运行 period_converter 脚本之前将 ExtPeriodMultiplier 设置为 7)。

编写一个将图表数据保存到 *.csv 文件的脚本(s_ExportChartToCSV_v1.mq4作为附件):

int start(){   int h=FileOpen(Symbol()+Period()+".csv",FILE_WRITE|FILE_CSV,",");      for(int i=Bars-1;i>=0;i--){         FileWrite(h,TimeToStr(Time[i],TIME_DATE),TimeToStr(Time[i],TIME_MINUTES),Open[i],High[i],Low[i],Close[i],Volume[i]);      }   FileClose(i);   return(0); }


在非标准时间范围图表上执行脚本。 于是我们在 experts/files 文件夹中得到具有非标准时间范围数据的标准 *.csv 文件。


编辑切换为居中


3. 导入数据。

打开上述步骤 1 中准备的终端和“历史数据中心”(主菜单 - 工具 - 历史数据中心或 F2 键)。 在左手侧交易品种列表内为导入的交易品种扩展时间范围列表并选择 M1(在上面双击,使相应的文本显示在窗口标题栏):


编辑切换为居中


在以打开的“历史数据中心”窗口单击“导入”,选择上面步骤 2 产生的 EURUSD2.csv 并单击“确认”。 类似的,将数据从 EURUSD7.csv 导入到 M5 并关闭“历史数据中心”窗口。 就是这样!

打开 EURUSD M1 图表,你将会看到 M2 数据:


编辑


EURUSD M5 与之类似——你会看到显示的是 M7 而不是 M5。

为了在“策略测试程序”中测试 Expert Advisor,测试 M2 数据时需要选择 M1,测试 M7 数据时需要选择 M5。 为了从经过测试的 Expert Advisor 调用的指标中访问 M7 数据,你需要指定 M5 时间范围。

4. 检查。

赫兹期货量化将使用一个简单的 Expert Advisor,在两条移动平均线交叉时打开和关闭订单(2MA.mq4 作为附件)。 注意! 该 Expert Advisor 仅用于“策略测试程序”。

extern int TimeFrame=0; extern double Lots=0.1; extern int FastMAPeriod=13; extern int FastMAMethod=0; extern int FastMAPrice=0; extern int SlowMAPeriod=21; extern int SlowMAMethod=0; extern int SlowMAPrice=0; int start(){      double fast_ma_1=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);      double slow_ma_1=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);      double fast_ma_2=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);      double slow_ma_2=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);      static int bt=0;      static int st=0;         if(fast_ma_1>slow_ma_1){            if(fast_ma_2<=slow_ma_2){               if(st>0)OrderClose(st,Lots,Ask,0,CLR_NONE);               st=0;               if(OrdersTotal()==0)bt=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"",0,0,CLR_NONE);            }         }         if(fast_ma_1<slow_ma_1){            if(fast_ma_2>=slow_ma_2){               if(bt>0)OrderClose(bt,Lots,Bid,0,CLR_NONE);               bt=0;                           if(OrdersTotal()==0)st=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"",0,0,CLR_NONE);            }         }           return(0); }


期货量化软件:在非标准时间范围上测试 Expert Advisor的评论 (共 条)

分享到微博请遵守国家法律