news 2026/4/16 9:06:34

【期货量化进阶】期货量化交易策略策略评估指标(Python量化)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【期货量化进阶】期货量化交易策略策略评估指标(Python量化)

一、前言

策略评估是量化交易的重要环节。选择合适的评估指标,可以准确衡量策略表现。本文将介绍各种策略评估指标及其计算方法。

本文将介绍:

二、为什么选择天勤量化(TqSdk)

TqSdk策略评估支持:

功能说明
回测框架支持策略回测
数据统计pandas/numpy支持指标计算
灵活扩展支持自定义指标
结果分析支持结果分析

安装方法

pipinstalltqsdk pandas numpy scipy

三、收益指标

3.1 总收益率

#!/usr/bin/env python# -*- coding: utf-8 -*-""" 功能:策略评估指标 说明:本代码仅供学习参考 """fromtqsdkimportTqApi,TqAuthimportpandasaspdimportnumpyasnpdefcalculate_total_return(returns):"""计算总收益率"""total_return=(1+returns).cumprod().iloc[-1]-1returntotal_return# 使用示例strategy_returns=pd.Series([0.01,-0.005,0.02,0.01,-0.01])total_return=calculate_total_return(strategy_returns)print(f"总收益率:{total_return:.2%}")

3.2 年化收益率

defcalculate_annualized_return(returns,periods_per_year=252):"""计算年化收益率"""total_return=(1+returns).cumprod().iloc[-1]-1n_periods=len(returns)annualized_return=(1+total_return)**(periods_per_year/n_periods)-1returnannualized_return# 使用示例annual_return=calculate_annualized_return(strategy_returns)print(f"年化收益率:{annual_return:.2%}")

3.3 累计收益曲线

defcalculate_cumulative_returns(returns):"""计算累计收益"""cumulative=(1+returns).cumprod()returncumulative

四、风险指标

4.1 波动率

defcalculate_volatility(returns,periods_per_year=252):"""计算年化波动率"""volatility=returns.std()*np.sqrt(periods_per_year)returnvolatility# 使用示例volatility=calculate_volatility(strategy_returns)print(f"年化波动率:{volatility:.2%}")

4.2 最大回撤

defcalculate_max_drawdown(returns):"""计算最大回撤"""cumulative=(1+returns).cumprod()running_max=cumulative.expanding().max()drawdown=(cumulative-running_max)/running_max max_drawdown=drawdown.min()returnmax_drawdown# 使用示例max_dd=calculate_max_drawdown(strategy_returns)print(f"最大回撤:{max_dd:.2%}")

4.3 下行波动率

defcalculate_downside_volatility(returns,periods_per_year=252,target=0):"""计算下行波动率"""downside_returns=returns[returns<target]iflen(downside_returns)==0:return0downside_vol=downside_returns.std()*np.sqrt(periods_per_year)returndownside_vol

五、风险调整收益指标

5.1 夏普比率

defcalculate_sharpe_ratio(returns,risk_free_rate=0.0,periods_per_year=252):"""计算夏普比率"""excess_returns=returns-risk_free_rate/periods_per_year sharpe=excess_returns.mean()/returns.std()*np.sqrt(periods_per_year)returnsharpe# 使用示例sharpe=calculate_sharpe_ratio(strategy_returns)print(f"夏普比率:{sharpe:.2f}")

5.2 索提诺比率

defcalculate_sortino_ratio(returns,risk_free_rate=0.0,periods_per_year=252,target=0):"""计算索提诺比率"""excess_returns=returns-risk_free_rate/periods_per_year downside_vol=calculate_downside_volatility(returns,periods_per_year,target)ifdownside_vol==0:return0sortino=excess_returns.mean()/downside_vol*np.sqrt(periods_per_year)returnsortino# 使用示例sortino=calculate_sortino_ratio(strategy_returns)print(f"索提诺比率:{sortino:.2f}")

5.3 卡玛比率

defcalculate_calmar_ratio(returns,periods_per_year=252):"""计算卡玛比率"""annual_return=calculate_annualized_return(returns,periods_per_year)max_drawdown=abs(calculate_max_drawdown(returns))ifmax_drawdown==0:return0calmar=annual_return/max_drawdownreturncalmar# 使用示例calmar=calculate_calmar_ratio(strategy_returns)print(f"卡玛比率:{calmar:.2f}")

六、交易指标

6.1 胜率

defcalculate_win_rate(trades):"""计算胜率"""iflen(trades)==0:return0wins=sum(1fortradeintradesiftrade['pnl']>0)win_rate=wins/len(trades)returnwin_rate# 使用示例trades=[{'pnl':100},{'pnl':-50},{'pnl':200},{'pnl':-30}]win_rate=calculate_win_rate(trades)print(f"胜率:{win_rate:.2%}")

6.2 盈亏比

defcalculate_profit_loss_ratio(trades):"""计算盈亏比"""profits=[trade['pnl']fortradeintradesiftrade['pnl']>0]losses=[abs(trade['pnl'])fortradeintradesiftrade['pnl']<0]iflen(losses)==0:returnfloat('inf')iflen(profits)>0else0avg_profit=np.mean(profits)ifprofitselse0avg_loss=np.mean(losses)profit_loss_ratio=avg_profit/avg_lossifavg_loss>0else0returnprofit_loss_ratio# 使用示例pl_ratio=calculate_profit_loss_ratio(trades)print(f"盈亏比:{pl_ratio:.2f}")

6.3 交易次数

defcalculate_trade_count(trades):"""计算交易次数"""returnlen(trades)

6.4 平均持仓时间

defcalculate_avg_holding_period(trades):"""计算平均持仓时间"""iflen(trades)==0:return0holding_periods=[]fortradeintrades:if'entry_time'intradeand'exit_time'intrade:period=(trade['exit_time']-trade['entry_time']).total_seconds()/3600holding_periods.append(period)iflen(holding_periods)==0:return0avg_period=np.mean(holding_periods)returnavg_period

七、综合评估

7.1 综合评估函数

defcomprehensive_evaluation(returns,trades=None):"""综合评估"""metrics={}# 收益指标metrics['total_return']=calculate_total_return(returns)metrics['annualized_return']=calculate_annualized_return(returns)# 风险指标metrics['volatility']=calculate_volatility(returns)metrics['max_drawdown']=calculate_max_drawdown(returns)# 风险调整收益指标metrics['sharpe_ratio']=calculate_sharpe_ratio(returns)metrics['sortino_ratio']=calculate_sortino_ratio(returns)metrics['calmar_ratio']=calculate_calmar_ratio(returns)# 交易指标iftrades:metrics['win_rate']=calculate_win_rate(trades)metrics['profit_loss_ratio']=calculate_profit_loss_ratio(trades)metrics['trade_count']=calculate_trade_count(trades)metrics['avg_holding_period']=calculate_avg_holding_period(trades)returnmetrics# 使用示例metrics=comprehensive_evaluation(strategy_returns,trades)forkey,valueinmetrics.items():ifisinstance(value,float):print(f"{key}:{value:.4f}")else:print(f"{key}:{value}")

7.2 评估报告

defgenerate_evaluation_report(returns,trades=None):"""生成评估报告"""metrics=comprehensive_evaluation(returns,trades)report=f""" 策略评估报告 ============ 收益指标: 总收益率:{metrics['total_return']:.2%}年化收益率:{metrics['annualized_return']:.2%}风险指标: 年化波动率:{metrics['volatility']:.2%}最大回撤:{metrics['max_drawdown']:.2%}风险调整收益: 夏普比率:{metrics['sharpe_ratio']:.2f}索提诺比率:{metrics['sortino_ratio']:.2f}卡玛比率:{metrics['calmar_ratio']:.2f}"""iftrades:report+=f""" 交易指标: 胜率:{metrics['win_rate']:.2%}盈亏比:{metrics['profit_loss_ratio']:.2f}交易次数:{metrics['trade_count']}平均持仓时间:{metrics['avg_holding_period']:.2f}小时 """returnreport# 使用示例report=generate_evaluation_report(strategy_returns,trades)print(report)

八、总结

8.1 评估指标分类

类别指标用途
收益总收益率、年化收益率衡量收益
风险波动率、最大回撤衡量风险
风险调整夏普、索提诺、卡玛综合评估
交易胜率、盈亏比交易质量

8.2 注意事项

  1. 综合评估- 使用多个指标综合评估
  2. 样本外验证- 使用样本外数据验证
  3. 持续监控- 持续监控策略表现
  4. 对比基准- 与基准对比评估

免责声明:本文仅供学习交流使用,不构成任何投资建议。期货交易有风险,入市需谨慎。

更多资源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 18:25:37

还在为PPT发愁?这些AI助手来救场,特别是针对学术答辩用途

何谓“黑科技”&#xff1f;若能在三分钟之内速成一份完备的PPT&#xff0c;难道这不算是一种黑科技吗&#xff1f;AI制作PPT简直是小菜一碟。通常&#xff0c;我们制作PPT需耗费大量时间和精力&#xff0c;既要寻找合适的图片&#xff0c;又要撰写并排版文字&#xff0c;还需挑…

作者头像 李华
网站建设 2026/4/5 20:03:39

深度测评一键生成论文工具 千笔写作工具 VS 知文AI 面向自考的高效选择

随着人工智能技术的迅猛发展&#xff0c;AI辅助写作工具正在成为高校学生完成毕业论文的重要助手。越来越多的学生开始借助这些工具来提升写作效率、降低学术压力。然而&#xff0c;面对市场上种类繁多、功能各异的AI写作平台&#xff0c;许多学生在选择时感到无所适从——既担…

作者头像 李华
网站建设 2026/4/14 5:52:06

Go语言面向对象特性详解(封装、组合、多态)

Go语言面向对象特性详解&#xff08;封装、组合、多态&#xff09;Go语言并未遵循传统面向对象&#xff08;OOP&#xff09;的“类、继承、重载”范式&#xff0c;而是以“极简实用”为核心&#xff0c;通过**结构体&#xff08;struct&#xff09;、方法&#xff08;method&am…

作者头像 李华
网站建设 2026/4/2 0:19:28

网太卡?看 DNS 是如何影响你冲浪速度的?

1. 域名与域名服务器在日常上网过程中&#xff0c;出于好记的原因&#xff0c;人们更喜欢在浏览器中输入网站的域名&#xff0c;而不是 IP 地址。比如想要访问百度&#xff0c;则会输入 www.baidu.com&#xff0c;而不是 202.108.22.5&#xff08;或者百度网站的其他 IP&#x…

作者头像 李华