掘金量化3参数优化(使用掘金3的操盘员必读)
原 掘金量化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))
short
和long
长短周期参数的调整需要循环嵌套,输入进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的操盘员必读)相关推荐
- 掘金量化3参数优化(使用掘金3的策略师必读)
原 掘金量化3参数优化(使用掘金3的策略师必读) 参数优化目的 我们在进行策略编写时,很容易受到参数调整的困扰,比如说双均线策略,到底长短均线的周期怎么来定义?"5日线"和&q ...
- 分享掘金量化实现参数优化的过程步骤
掘金量化主要是为了打造功能齐备的终端,集合了策略开发到实盘的功能,便于使用,具备可靠的性能,帮助投资者提高开发策略的效果,降低IT成本. 小编来分享一下掘金量化实现参数优化的过程步骤,将参数进行回测, ...
- 分析股票量化交易实盘接口和人类操盘手的优缺点
股票量化交易,就是将股票市场所有的股票信息,比如股票的涨跌历史数据,成交量历史数据,股票的基本面历史数据,指数涨跌历史数据等等全部输入计算机,进行大数据分析,之后根据大数据选择出炒股成功率最高的方案, ...
- 掘金量化 | 短周期量价策略(附源码)
可能不少朋友都有阅读过国泰君安<基于短周期价量特征的多因子选股体系>这篇研报,对其内多达191个量价因子印象深刻.该研报是在2017年中旬发布的,时至今日已过去四年时光,为此大家可能会好奇 ...
- 掘金量化诚聘技术伙伴,欢迎大佬、优秀的萌新投递!
关于掘金量化: 关键词:量化投资领域.业内数一数二.产品toB也toC.工作氛围轻松.做事以结果为导向 公司成立于2013年,总部和研发中心位于深圳.是一家创新型FinTeTech金融科技公司,致力于 ...
- 掘金量化是什么?有哪些特点?
掘金量化是为专业量化投资打造的一款功能齐备的落地式终端,集成了策略开发到实盘的模块化功能,打通研究.仿真和绩效链路.兼容多种编程语言,易于使用.性能可靠,能够帮助量化投资者提高策略开发效率.减少IT投 ...
- 金融平台(掘金量化)量化PYTHON(二)-量化回测框架介绍
策略创建运行流程 1.创建运行策略 1.1创建策略 打开"掘金量化3.0"客户端,进入"我的策略"-"新建策略",如下所示: 平台本身提供了 ...
- python生产者消费者 掘金_帮助中心--掘金量化Python API文档
快速开始 下载SDK 掘金量化平台提供策略开发服务包(SDK)用于策略开发者实现自己的策略.SDK下载地址请点击这里. Python SDK支持Windows + Python2.7/3.6 + 32 ...
- 掘金量化回测平台 - 1
掘金量化平台初探 python 量化分析包括:策略研发.策略回测.仿真交易.实盘交易.实盘盘后优化. 主要想使用掘金的平台来做策略回测和仿真交易两个环节的功能. 对比了下主流的云平台JoinQuant ...
最新文章
- [分享]C# 获取Outlook帐号和密码
- android实现计算器功能吗,利用Android实现一个简单的计算器功能
- 博士论文:教你如何给女朋友送礼物
- Quagga的安装碰到的问题
- AI算法连载08:统计学之贝叶斯
- 【Docker】OCI runtime exec failed: exec failed: container_linux.go:348: starting container process cau
- JS 将图片编码BASE64
- Java 通过JDBC连接Mysql数据库
- git 设置全局代理_git 代理配置
- 厚着脸皮求领导写了一篇java小白进阶大牛之路!!!
- 2021牛客暑期多校训练营#5:C-Cheating and Stealing
- java高德地图算距离_根据高德地图得出的坐标算出两点之间的距离 java
- 不允许指针指向不完整的类类型
- 【保密知识】排查失泄密隐患 防控保密风险点
- 微信小程序上传和下载文件
- 却话文心一言(Chatgpt们),存算一体真能突破AI算力“存储墙”|“能耗墙”|“编译墙”?
- HBase基础【HBase简介、HBase安装、HBase shell操作】
- Jenkins Pipeline中的自定义环境变量
- html+css+javascript满屏雪花爱心520表白网站 (含音乐)520告白/七夕情人节/生日礼物/程序员表白必备...
- Lodop 动态加载模板,动态加载数据
热门文章
- 【双碳系列】LEAP碳排放预测、LCA生命周期、GAMS电力、CGE一般均衡模型
- 在线音乐付费用户达6090万再创新高、付费率近10%,腾讯音乐娱乐集团Q1财报多项业务获显著突破
- 用PHP实现单向链表结构
- Linux学习笔记19——XFS 文件系统的备份与还原、光盘写入工具、其他常见的压缩与备份工具
- import apex出错,apex标红解决办法
- 算法之美——算法复杂性
- gnu radio学习(三)Message Passing消息传递详解
- oracle sqlunldr 导出csv乱码
- 实验3 路由器的基本配置和远程登录
- 故障特效AE视频模板 Modern Glitch Intro