news 2026/5/1 11:26:27

【期货量化进阶】期货量化交易策略策略评估指标(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/5/1 6:13:52

排序(2)

先赞后看&#xff0c;养成习惯&#xff01;&#xff01;&#xff01; ^ _ ^ ❤️ ❤️ ❤️ 码字不易&#xff0c;大家的支持就是我坚持下去的动力&#xff0c;点赞后不要忘记关注我哦 个人主页&#xff1a;伯明翰java 文章专栏&#xff1a;数据结构和算法 如有错误&#xff0…

作者头像 李华
网站建设 2026/5/1 6:13:50

本科生必看!全网顶尖的AI论文平台 —— 千笔·专业论文写作工具

你是否曾为论文选题发愁&#xff0c;反复修改却总对结果不满意&#xff1f;是否在查重和格式上花费大量时间却收效甚微&#xff1f;面对繁重的学术任务&#xff0c;很多同学都感到力不从心。而如今&#xff0c;一款专为学生打造的AI论文写作工具——千笔AI&#xff0c;正悄然改…

作者头像 李华
网站建设 2026/5/1 6:04:05

从零开始学Flink:Flink SQL 极简入门

Flink SQL 是 Apache Flink 的核心模块之一&#xff0c;它让开发者可以使用标准的 SQL 语法来编写流处理和批处理作业。对于不想深究 Java/Scala 复杂 API 的“小白”来说&#xff0c;Flink SQL 是进入实时计算领域的最佳敲门砖。 本文将基于 Flink 1.20.1 版本&#xff0c;手把…

作者头像 李华
网站建设 2026/5/1 6:11:07

企业年会大屏投票小程序:亲测好用案例分享

技术痛点引入公司企业年会大屏扫码实时节目投票小程序的数据同步与用户体验优化是当前行业普遍面临的难题。解决方案定位熹乐互动针对这一问题提供了专业解决方案&#xff0c;通过其先进的技术手段和丰富的实践经验&#xff0c;显著提升了系统的稳定性和用户满意度。技术详解该…

作者头像 李华
网站建设 2026/5/1 11:13:58

AUTOSAR中安全事件(Security Event)的采集与上报机制?

随着车联网和智能驾驶技术的迅猛发展&#xff0c;汽车不再是单纯的机械设备&#xff0c;而是变成了一个高度互联的智能终端。这种转变在带来便利的同时&#xff0c;也让汽车信息安全问题变得异常突出。黑客攻击、数据泄露、甚至远程控制车辆的可能性&#xff0c;已经从科幻电影…

作者头像 李华