掘金量化3参数优化(使用掘金3的操盘员必读)

版权声明:无情不似多情苦,一寸还成千万缕。天涯地角有穷时,只有相思无尽处。 https://blog.csdn.net/u011078141/article/details/89453493

原 掘金量化3参数优化(使用掘金3的操盘员必读)

参数优化目的

​ 我们在进行策略编写时,很容易受到参数调整的困扰,比如说双均线策略,到底长短均线的周期怎么来定义?“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(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为参数。

回测报告指标主要有:

名称 含义
account_id 策略ID
pnl_ratio 累计收益率
pnl_ratio_annual 年化收益率
sharp_ratio 夏普比率
max_drawdown 最大回撤率
open_count 开仓次数
close_count 平仓次数
win_count 盈利次数
lose_count 亏损次数
win_ratio 胜率

循环输入参数回测

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

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))

shortlong长短周期参数的调整需要循环嵌套,输入进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) 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格式:

 =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')=final_report.sort_values(axis=0, ascending=False, by='pnl_ratio')

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

文章来源:掘金量化 转载请注明出处!


《算法导论 第三版英文版》_高清中文版

《深度学习入门:基于Python的理论与实现》_高清中文版

《深入浅出数据分析》_高清中文版

《Python编程:从入门到实践》_高清中文版

《Python科学计算》_高清中文版

《深度学习入门:基于Python的理论与实现》_高清中文版

《深入浅出数据分析》_高清中文版

《Python编程:从入门到实践》_高清中文版


猜你喜欢

转载自blog.csdn.net/u011078141/article/details/89453493