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

📅 发布时间:2026/7/7 3:20:10 👁️ 浏览次数:
【期货量化进阶】期货量化交易策略策略评估指标(Python量化)
一、前言策略评估是量化交易的重要环节。选择合适的评估指标可以准确衡量策略表现。本文将介绍各种策略评估指标及其计算方法。本文将介绍收益指标风险指标风险调整收益指标交易指标综合评估方法二、为什么选择天勤量化TqSdkTqSdk策略评估支持功能说明回测框架支持策略回测数据统计pandas/numpy支持指标计算灵活扩展支持自定义指标结果分析支持结果分析安装方法pipinstalltqsdk pandas numpy scipy三、收益指标3.1 总收益率#!/usr/bin/env python# -*- coding: utf-8 -*- 功能策略评估指标 说明本代码仅供学习参考 fromtqsdkimportTqApi,TqAuthimportpandasaspdimportnumpyasnpdefcalculate_total_return(returns):计算总收益率total_return(1returns).cumprod().iloc[-1]-1returntotal_return# 使用示例strategy_returnspd.Series([0.01,-0.005,0.02,0.01,-0.01])total_returncalculate_total_return(strategy_returns)print(f总收益率:{total_return:.2%})3.2 年化收益率defcalculate_annualized_return(returns,periods_per_year252):计算年化收益率total_return(1returns).cumprod().iloc[-1]-1n_periodslen(returns)annualized_return(1total_return)**(periods_per_year/n_periods)-1returnannualized_return# 使用示例annual_returncalculate_annualized_return(strategy_returns)print(f年化收益率:{annual_return:.2%})3.3 累计收益曲线defcalculate_cumulative_returns(returns):计算累计收益cumulative(1returns).cumprod()returncumulative四、风险指标4.1 波动率defcalculate_volatility(returns,periods_per_year252):计算年化波动率volatilityreturns.std()*np.sqrt(periods_per_year)returnvolatility# 使用示例volatilitycalculate_volatility(strategy_returns)print(f年化波动率:{volatility:.2%})4.2 最大回撤defcalculate_max_drawdown(returns):计算最大回撤cumulative(1returns).cumprod()running_maxcumulative.expanding().max()drawdown(cumulative-running_max)/running_max max_drawdowndrawdown.min()returnmax_drawdown# 使用示例max_ddcalculate_max_drawdown(strategy_returns)print(f最大回撤:{max_dd:.2%})4.3 下行波动率defcalculate_downside_volatility(returns,periods_per_year252,target0):计算下行波动率downside_returnsreturns[returnstarget]iflen(downside_returns)0:return0downside_voldownside_returns.std()*np.sqrt(periods_per_year)returndownside_vol五、风险调整收益指标5.1 夏普比率defcalculate_sharpe_ratio(returns,risk_free_rate0.0,periods_per_year252):计算夏普比率excess_returnsreturns-risk_free_rate/periods_per_year sharpeexcess_returns.mean()/returns.std()*np.sqrt(periods_per_year)returnsharpe# 使用示例sharpecalculate_sharpe_ratio(strategy_returns)print(f夏普比率:{sharpe:.2f})5.2 索提诺比率defcalculate_sortino_ratio(returns,risk_free_rate0.0,periods_per_year252,target0):计算索提诺比率excess_returnsreturns-risk_free_rate/periods_per_year downside_volcalculate_downside_volatility(returns,periods_per_year,target)ifdownside_vol0:return0sortinoexcess_returns.mean()/downside_vol*np.sqrt(periods_per_year)returnsortino# 使用示例sortinocalculate_sortino_ratio(strategy_returns)print(f索提诺比率:{sortino:.2f})5.3 卡玛比率defcalculate_calmar_ratio(returns,periods_per_year252):计算卡玛比率annual_returncalculate_annualized_return(returns,periods_per_year)max_drawdownabs(calculate_max_drawdown(returns))ifmax_drawdown0:return0calmarannual_return/max_drawdownreturncalmar# 使用示例calmarcalculate_calmar_ratio(strategy_returns)print(f卡玛比率:{calmar:.2f})六、交易指标6.1 胜率defcalculate_win_rate(trades):计算胜率iflen(trades)0:return0winssum(1fortradeintradesiftrade[pnl]0)win_ratewins/len(trades)returnwin_rate# 使用示例trades[{pnl:100},{pnl:-50},{pnl:200},{pnl:-30}]win_ratecalculate_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_profitnp.mean(profits)ifprofitselse0avg_lossnp.mean(losses)profit_loss_ratioavg_profit/avg_lossifavg_loss0else0returnprofit_loss_ratio# 使用示例pl_ratiocalculate_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:ifentry_timeintradeandexit_timeintrade:period(trade[exit_time]-trade[entry_time]).total_seconds()/3600holding_periods.append(period)iflen(holding_periods)0:return0avg_periodnp.mean(holding_periods)returnavg_period七、综合评估7.1 综合评估函数defcomprehensive_evaluation(returns,tradesNone):综合评估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# 使用示例metricscomprehensive_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,tradesNone):生成评估报告metricscomprehensive_evaluation(returns,trades)reportf 策略评估报告 收益指标: 总收益率:{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:reportf 交易指标: 胜率:{metrics[win_rate]:.2%}盈亏比:{metrics[profit_loss_ratio]:.2f}交易次数:{metrics[trade_count]}平均持仓时间:{metrics[avg_holding_period]:.2f}小时 returnreport# 使用示例reportgenerate_evaluation_report(strategy_returns,trades)print(report)八、总结8.1 评估指标分类类别指标用途收益总收益率、年化收益率衡量收益风险波动率、最大回撤衡量风险风险调整夏普、索提诺、卡玛综合评估交易胜率、盈亏比交易质量8.2 注意事项综合评估- 使用多个指标综合评估样本外验证- 使用样本外数据验证持续监控- 持续监控策略表现对比基准- 与基准对比评估免责声明本文仅供学习交流使用不构成任何投资建议。期货交易有风险入市需谨慎。更多资源天勤量化官网https://www.shinnytech.comGitHub开源地址https://github.com/shinnytech/tqsdk-python官方文档https://doc.shinnytech.com/tqsdk/latest