掘金社区

掘金量化3参数优化Pinned highlighted

掘金小Q 【 论坛管理员 】 发表在策略研究 2018-04-16 18:16:16

策略研究
573
0
0

参数优化目的

我们在进行策略编写时,很容易受到参数调整的困扰,比如说双均线策略,到底长短均线的周期怎么来定义?“5日线”和“10日线”组合一定是最好的吗?如果多次回测,怎么记录回测结果?

带着这些疑问,我们来共同探讨掘金量化3的参数优化示例程序。

参数优化思想

我们将心目中的参数进行循环遍历回测,记录每次回测结果和参数,然后就可以根据某种规则将回测结果排序,这样就可以找到最好的参数了,当然,建议不要用“最好”的参数,因为可能会出现“过拟合”问题。

参数优化实现步骤

基础配置

  • 首先,需要有个策略(init函数和on_bar(tick)函数或algo函数),策略里面有参数可以调整(废话)。
  • 将两个策略函数复制进示例程序中替代示例策略。
  • 调整run里面回测的各个参数。

记录每次回测结果

def on_backtest_finished(context, indicator):
    report=[indicator['pnl_ratio'],indicator['pnl_ratio_annual'],indicator['sharp_ratio'],indicator['max_drawdown'],context.short,context.long]
    context.list.append(report)

定义on_backtest_finished函数,report里面需要添加你想看到的回测报告指标以及输入的参数,context.short,context.long为参数。

回测报告指标主要有:
0_1523873483573_13.jpg
循环输入参数回测

这里我们以双均线策略为例:

for short in range(5,10,2):
     for long in range(10,21,5):
        process=multiprocessing.Process(target=run_strategy, args=(short,long,a_list))

short和long长短周期参数的调整需要循环嵌套,输入进args中,a_list是用来记录回测报告数据的list,必须保留!

def run_strategy(short,long,a_list):
    from gm.model.storage import context
    context.short=short
    context.long=long
    context.list=a_list
    run(strategy_id='set_strategy_id',
        filename='参数优化.py',
        mode=MODE_BACKTEST,
        token='set_token',
        backtest_start_time='2017-05-01 08:00:00',
        backtest_end_time='2017-10-01 16:00:00',
        backtest_adjust=ADJUST_PREV,
        backtest_initial_cash=50000,
        backtest_commission_ratio=0.0001,
        backtest_slippage_ratio=0.0001)

传入参数时,需要修改策略运行函数的输入参数,并通过context将参数传入策略中,原策略中的参数定义语句需要删除!

结果分析

首先,我们需要把回测报告结果转换成Dataframe格式:

a_list=np.array(a_list)
final_report=pd.DataFrame(a_list,columns['pnl_ratio','pnl_ratio_annual','sharp_ratio','max_drawdown','short','long'])

其中columns需要与之前所获取的回测参数保持一致。

然后,将回测结果按照某种原则进行排序:

final_report=final_report.sort_values(axis=0, ascending=False, by='pnl_ratio')

我们这里以'pnl_ratio'降序排列为例,如果想升序排列,可将ascending=False改为ascending=True。
0_1523873675897_18.jpg

暂无评论

Looks like your connection to 掘金量化社区 - 量化交易者的策略交流学习社区 was lost, please wait while we try to reconnect.