交易开拓者TBQuant中,单品种参数优化的方法。顺便看看 ...

论坛 期权论坛 期权     
期权匿名问答   2022-5-4 06:52   7744   0
参数优化时,基于历史数据所形成的参数优化报告,一方面,可以帮助我们了解到,目前所用策略及参数的胜率、盈亏及相应的排名状况等。另一方面,还可以帮助我们了解到,目前所用策略在不同视角下的最优参数,如胜率最高的参数、或盈亏比最高的参数等。同时,通过对样板内、外数据的回测及综合分析,或许可以帮助自己筛选出一个符合预期的较佳参数。

下面,我们就上证指数,以一个单均线交易策略为例,讲解一下在交易开拓者TBQuant中,单品种参数优化的方法。

一、策略公式的调用

1、登录交易开拓者TBQuant软件后,首先,单击上方的“行情报价”按钮,然后,双击打开上证指数走势图。

2、在上证指数走势图中,先将鼠标移动到系统默认的指标上方,如“MA”指标的上方,然后,单击右键并选择“删除”,这样就可删除系统默认的指标,如下图所示。



3、在走势图的空白区域点击右键,之后,点击“插入公式”,然后,双击所要使用的策略公式,如“DJX”策略公式,就可调用相应的策略公式,如下图所示。



二、示例策略说明

1、示例策略为一个单均线交易策略,参数的初始值为20,即为一条20日均线。

2、买入条件:收盘时,如果收盘价上穿均线,则按收盘价开价买入100股。走势图中,最低价下方,向上的箭头,为买入信号;方括号中的数字为买入股数,如后图所示。

3、卖出条件:收盘时,如果收盘价下穿均线,则按收盘价平多卖出100股。走势图中,最高价上方,向下的箭头,为卖出信号;方括号中的数字为卖出股数,如后图所示。

4、初始资金设置为100万,买入手续费按万分之5计,卖出手续费按万分之15计。

5、走势图中,红色的连线,为盈利的交易;绿色的连线,为亏损的交易,如下图所示。



三、策略单元设置

在走势图的空白处,单击右键,然后点击“策略单元设置”,就可打开策略单元设置界面。

1、周期范围设置:上证指数的起始日期可以设置为1990年1月1日(也可将样本数设置为10000根),复权方式可以选择“后复权”,如下图所示。



2、交易设置:开仓(买入)手续费设置为万分之5,平仓(卖出)手续费设置为万分之15,如下图所示。



3、委托设置:委托设置中,初始资金设置为100万,如下图所示。



四、参数优化设置

走势图中,鼠标移动到策略公式上方,如“DJX”策略公式的上方,然后点击右键,并在下拉菜单中点击“参数优化”,就可进入“参数优化设置”界面。

1、确定优化目标:点击“优化目标”右侧向下的箭头,就可根据自己的需要,选择具体的优化目标,如胜率最大、盈亏比最大,净利润最大,夏普比率最大等。这里,我们选择了“净利润最大”,如下图所示。



2、设置参数范围:点击下方的“设置”按钮,可以设置参数的取值范围,设置完成后,点击 “确定”,就可完成参数范围的设置。例如,我们这里设置的参数最小值为1、最大值为500、步长为1,如下图所示。



3、上述设置完成后,点击下方的“立即优化”,就可进入优化回测过程。完成后,会显示相应的参数优化报告。并且,点击参数优化报告左上方的“保存”按钮,可以将报告保存到电脑上,以便进行数据分析,如下图所示。



五、优化报告分析

在电脑上,打开保存的回测结果数据,可以对其进行排序及综合分析。

例如,上证指数上市至今,如按前述规则操作,实现净利润最高的均线为53日均线,共实现净利润757071.65元,年化收益率为2.42%,胜算率为24.97%,盈亏比为6.8,最大回撤率为10.04%,等等,如下图所示。



又如、通过排序,还可了解到,按前述规则操作,上证指数上市至今,胜算率最高的均线为4日均线,其胜算率为36.24%,实现的净利润为212150.55元,盈亏比为1.89,年化收益率为0.68%,最大回撤率为20.62%,等等,如下图所示。



当然,实际回测时,需要将时间段切割为两段或多段,分为样本内与样板外,分别获取参数优化报告,以了解不同参数在不同时间段的结果状况,以使所选的参数在不同的时间段,都能有一个符合预期的效果。

同时,如果策略规则有所变化的话,则相应的参数优化结果也可能会相应的变化,例如,如果将上述规则中的买卖时间和价格,由“当天收盘价买卖”,改为“次日开盘价买卖”,则参数优化结果也会有相应的变化。

假设,综合考虑过各项因素,如净利润、盈亏比、胜算率、回撤率等因素后,如有合适的参数,则可进行相应的参数优化设置。

六、参数优化设置

走势图中,将鼠标移到策略公式上方,然后单击右键,并选择“属性设置”,就可打开参数设置界面并进行相应的参数设置,如下图所示。各号同名,欢迎关注!



附:示例策略源码
Params
        Integer N(20);       
Vars
        Numeric MA;       
Events       
        OnBarClose(ArrayRef<Integer> indexs)
        {
                //简单移动平均线
                MA = Average(Close,N);
                //买入条件
                If(CrossOver(Close,MA) And MarketPosition==0)
                {
                buy(100,Close);               
                }
                //卖出条件
                If(CrossUnder(Close,MA) And MarketPosition==1)
                {
                Sell(100,Close);       
                }
        }
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP