原 掘金量化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 contextcontext.short=shortcontext.long=longcontext.list=a_listrun(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 contextcontext.short=shortcontext.long=longcontext.list=a_listrun(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编程:从入门到实践》_高清中文版


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

  1. 掘金量化3参数优化(使用掘金3的策略师必读)

    原 掘金量化3参数优化(使用掘金3的策略师必读) 参数优化目的 ​ 我们在进行策略编写时,很容易受到参数调整的困扰,比如说双均线策略,到底长短均线的周期怎么来定义?"5日线"和&q ...

  2. 分享掘金量化实现参数优化的过程步骤

    掘金量化主要是为了打造功能齐备的终端,集合了策略开发到实盘的功能,便于使用,具备可靠的性能,帮助投资者提高开发策略的效果,降低IT成本. 小编来分享一下掘金量化实现参数优化的过程步骤,将参数进行回测, ...

  3. 分析股票量化交易实盘接口和人类操盘手的优缺点

    股票量化交易,就是将股票市场所有的股票信息,比如股票的涨跌历史数据,成交量历史数据,股票的基本面历史数据,指数涨跌历史数据等等全部输入计算机,进行大数据分析,之后根据大数据选择出炒股成功率最高的方案, ...

  4. 掘金量化 | 短周期量价策略(附源码)

    可能不少朋友都有阅读过国泰君安<基于短周期价量特征的多因子选股体系>这篇研报,对其内多达191个量价因子印象深刻.该研报是在2017年中旬发布的,时至今日已过去四年时光,为此大家可能会好奇 ...

  5. 掘金量化诚聘技术伙伴,欢迎大佬、优秀的萌新投递!

    关于掘金量化: 关键词:量化投资领域.业内数一数二.产品toB也toC.工作氛围轻松.做事以结果为导向 公司成立于2013年,总部和研发中心位于深圳.是一家创新型FinTeTech金融科技公司,致力于 ...

  6. 掘金量化是什么?有哪些特点?

    掘金量化是为专业量化投资打造的一款功能齐备的落地式终端,集成了策略开发到实盘的模块化功能,打通研究.仿真和绩效链路.兼容多种编程语言,易于使用.性能可靠,能够帮助量化投资者提高策略开发效率.减少IT投 ...

  7. 金融平台(掘金量化)量化PYTHON(二)-量化回测框架介绍

    策略创建运行流程 1.创建运行策略 1.1创建策略 打开"掘金量化3.0"客户端,进入"我的策略"-"新建策略",如下所示: 平台本身提供了 ...

  8. python生产者消费者 掘金_帮助中心--掘金量化Python API文档

    快速开始 下载SDK 掘金量化平台提供策略开发服务包(SDK)用于策略开发者实现自己的策略.SDK下载地址请点击这里. Python SDK支持Windows + Python2.7/3.6 + 32 ...

  9. 掘金量化回测平台 - 1

    掘金量化平台初探 python 量化分析包括:策略研发.策略回测.仿真交易.实盘交易.实盘盘后优化. 主要想使用掘金的平台来做策略回测和仿真交易两个环节的功能. 对比了下主流的云平台JoinQuant ...

最新文章

  1. Windows如此普及,为什么要学Linux
  2. 被“嫌弃”的AI药物设计
  3. cisco中的igrp笔记
  4. WKQ学习(后台知识)
  5. 排队枪毙游戏c语言,基于C语言实现的约瑟夫生者死者游戏
  6. 「CF 932E」 Team Work
  7. I00021 有负数项的数列之和
  8. .vue文件怎么使用_师父给了我一个 .proto 文件,我应该怎么使用?
  9. python为什么要安装pip_为什么您应该使用`python -m pip`
  10. MongoDB 网页可视化管理(adminMongo 的安装、配置)
  11. 什么是智能家电?消费者不知判定标准
  12. 【Word】公式“大括号”中的内容对齐
  13. 因为计算机丢失user32.dll,电脑丢失USER32.dll怎么处理
  14. 微信好友数目限制突破5000人? 这点钉钉、BTchat链语早就做到了
  15. java中length 的用法
  16. 记录docker nacos解决Field ‘encrypted_data_key‘ doesn‘t have a default valu方法
  17. 打开PDF文件时,出现“打开本文档时发生错误。无法找到本文件。”解决办法,亲自尝试成功
  18. stm32cubeMX结合matlab使用
  19. 数据资产管理体系方案
  20. Unity3D FPS Game:第一人称射击游戏(二)

热门文章

  1. 在哪里能下载纯净的系统镜像?让我来告诉你……
  2. unittest自动化测试-测试夹具TestFixtrue与忽略测试用例方法
  3. Linux环境yum,安装MySQL
  4. 申请去美国读博士条件有哪些
  5. 2017年PHP程序员未来路在何方
  6. P、V操作与c++代码实现爸爸放苹果,妈妈放桔子,两个儿子专吃盘子中桔子,两个女儿专吃盘子中苹果问题
  7. python用函数绘制椭圆_Python 如何绘制椭圆?
  8. java 判断是否是生日_java判断生日字符串是否合法
  9. 华为NAT地址转换配置
  10. 2020-05-07