第六课 策略评估指标计算

  • 概述
  • 获取取票数据
  • 回测收益率
  • 回测年华收益率
  • 最大回撤
  • 夏普比率

概述

我们在创建策略的过程中, 需要通过不同的评估指标来验证策略的有效性. 这些指标可以帮助我们调整策略, 得到更好的结果.

常见的策略评估指标有:

  • 回测收益率
  • 回测年化收益率
  • 最大回撤
  • 夏普比率
  • Alpha, Beta

获取取票数据

  • 以伊利股份和贵州茅台为例
  • 分析区间 2019-01-01 到 2021-01-01

注: 贵州茅台兑牛奶, 那叫一个爽.

代码:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
plt.style.use("fivethirtyeight")# 定义获取数据时间段
start_date = "2019-01-01"  # 开始日期
end_date = "2021-01-01"  # 结束日期# 获取洋河股份数据
data = get_price(["600887.XSHG", "600519.XSHG"], start_date=start_date, end_date=end_date, fields="close")
data = pd.DataFrame(data, index=data.index)# 调试输出
print(data.head())# 绘制走势图
data.plot(figsize=(16, 10), subplots=True)

输出结果:

            600887.XSHG  600519.XSHG
date
2019-01-02      21.3696     583.4249
2019-01-03      21.1985     574.6781
2019-01-04      21.4076     586.3665
2019-01-07      21.6453     589.7659
2019-01-08      21.4837     589.0840

回测收益率

代码:

# 计算每天的累计收益
data_new = data / data.iloc[0]
print(data_new.head())# 画图
data_new.plot(figsize=(16, 10))# 区间累计收益率
total_return = data_new.iloc[-1] - 1  # 用最后一个值减去1
total_return = pd.DataFrame(total_return.values, columns=["累计收益"], index=total_return.index)
print(total_return)

输出结果:

            600887.XSHG  600519.XSHG
date
2019-01-02     1.000000     1.000000
2019-01-03     0.991993     0.985008
2019-01-04     1.001778     1.005042
2019-01-07     1.012902     1.010869
2019-01-08     1.005339     1.009700累计收益
600887.XSHG  1.076314
600519.XSHG  2.424605

回测年华收益率


代码:

# 查看数据长度
data_length = len(data_new)
print("数据长度:", data_length)# 计算年化收益率
annual_return = pow(data_new.iloc[-1], 250 / data_length) - 1# 调试输出
print("年化收益:")
print(annual_return)

调试输出:

数据长度: 487
年化收益:
600887.XSHG    0.455062
600519.XSHG    0.881225
Name: 2020-12-31 00:00:00, dtype: float64

最大回撤

代码:

# 计算累计最大值
max = data.cummax()# 调试输出
print(data.head())
print(max.head())# 计算每天回撤
drawdown_daily = (data.cummax() - data) / data.cummax()# 调试输出
print(drawdown_daily.head())# 计算最大回测
total_drawdown = drawdown_daily.max()# 改成df
total_drawdown = pd.DataFrame([str(i * 100) + "%" for i in total_drawdown], columns=["最大回撤"], index= total_drawdown.index)# 调试输出
print(total_drawdown.head())

输出结果:

# 计算累计最大值
max = data.cummax()# 调试输出
print(data.head())
print(max.head())# 计算每天回撤
drawdown_daily = (data.cummax() - data) / data.cummax()# 调试输出
print(drawdown_daily.head())# 计算最大回测
total_drawdown = drawdown_daily.max()# 改成df
total_drawdown = pd.DataFrame([str(i * 100) + "%" for i in total_drawdown], columns=["最大回撤"], index= total_drawdown.index)# 调试输出
print(total_drawdown.head())

输出结果:

            600887.XSHG  600519.XSHG
date
2019-01-02      21.3696     583.4249
2019-01-03      21.1985     574.6781
2019-01-04      21.4076     586.3665
2019-01-07      21.6453     589.7659
2019-01-08      21.4837     589.0840600887.XSHG  600519.XSHG
date
2019-01-02      21.3696     583.4249
2019-01-03      21.3696     583.4249
2019-01-04      21.4076     586.3665
2019-01-07      21.6453     589.7659
2019-01-08      21.6453     589.7659600887.XSHG  600519.XSHG
date
2019-01-02     0.000000     0.000000
2019-01-03     0.008007     0.014992
2019-01-04     0.000000     0.000000
2019-01-07     0.000000     0.000000
2019-01-08     0.007466     0.001156最大回撤
600887.XSHG  21.322799729408366%
600519.XSHG  19.270518955514174%

夏普比率

夏普比率指的是策略承受一单位总风险, 会产生多少的超额报酬.

  • 假设无风险收益率为年化 3%
  • 超额收益率以无风险收益率为基准


代码:

# 向后填补缺失值
data_fill = data.fillna(method='pad')# 计算每日收益率
return_rate = data_fill.apply(lambda x: x / x.shift(1) - 1)[1:]  # 去除首个NaN# 调试输出
print(return_rate.head())# 计算超额回报率
exReturn = return_rate - 0.03 / 250#计算夏普比率
sharpe_rate = np.sqrt(len(exReturn)) * exReturn.mean() / exReturn.std()#夏普比率的输出结果
SHR = pd.DataFrame(sharpe_rate,columns=['夏普比率'])# 输出伊利和茅台的夏普比率
print(SHR)

输出结果:

|  |  |
|--|--|
|  |  |600519.XSHG  600887.XSHG
date
2019-01-03    -0.014992    -0.008007
2019-01-04     0.020339     0.009864
2019-01-07     0.005797     0.011104
2019-01-08    -0.001156    -0.007466
2019-01-09     0.018734     0.008849夏普比率
600519.XSHG  3.048383
600887.XSHG  1.715563

量化交易 第六课 策略评估指标计算相关推荐

  1. 量化交易 第五课 策略评估指标

    第五课 策略评估指标 概述 收益指标 回测收益率 年化收益率 基准收益率 风险指标 最大回撤 单位风险收益指标 夏普比率 概述 在量化策略回测研究中, 往往需要通过风险评价指标从各个角度客观, 全面地 ...

  2. 量化交易 实战第一课 策略入门

    量化交易 实战第一课 策略入门 概述 要求 指标 市净率 股票市值 代码实现 概述 不管是技术分析还是基本面分析, 我们在进行投资的时候会选择某些表现好的股票来作为一个股票池. 从中进行交易的判断 ( ...

  3. 量化交易 实战第二课 金融时间序列分析 Part 1

    量化交易 实战第一课 金融时间序列分析 Part 1 概述 平台 获取股票数据 需求 函数 index_components - 获取指数成分股列表 get_price - 合约历史数据 代码 统计分 ...

  4. 量化交易之单因子策略

    量化交易之单因子策略 单因子策略 小市值选股策略 移动平均线:如何躲过股灾和大跌 『布带林线:衡量市场的波动性/趋势』 单因子策略 你知道剩男剩女是如何剩下的吗? 许多年后,他们都一样,都会发现自己其 ...

  5. 量化交易之多因子策略

    量化交易之多因子策略 多因子策略 海龟交易:多因子策略.机械交易系统 『K线:基本功但不能依靠』 『唐安奇通道:衡量市场的波动性/趋势』 『平均真实波幅:过去一段时间内市场的绝对波动幅度』 『海龟择时 ...

  6. 量化交易 实战第九课 多因子相关性分析

    量化交易 实战第九课 多因子相关性分析 概述 研报分析结果 代码实现 导包 总资产回报率 IC 资本回报率 IC 计算相关性 概述 相关性 (Correlation) 在统计中是与独立性 (Indep ...

  7. 量化交易 聚宽 PEG策略

    量化交易 聚宽 PEG策略 PE:市盈率 G:收益增长率 PEG = PE / (G × 100) # 导入函数库 from jqdata import *# 初始化函数,设定基准等等 def ini ...

  8. Python量化交易02——双均线策略(移动平均线)

    参考书目:深入浅出Python量化交易实战 本次带来最经典的交易策略,双均线策略的构建和其回测方法. 双均线一般采用5天均值和10天均值,如果5日均线上穿突破了10日均线,说明股价在最近的涨势很猛,买 ...

  9. 量化交易:止盈策略与回测

    我们买基金或股票的时候通常用最简单的策略进行决策:低买高卖,跌的多了就加仓拉低持有成本,达到收益率就卖出. 那么如何用代码表示这个策略呢?首先定义交易信号则是:0.5%时买入,目标止盈线是1.5%,达 ...

最新文章

  1. 浅谈敏捷开发及Scrum工具leangoo(三)
  2. HDU 5988 最小费用流
  3. 去除警告: FutureWarning: In future, it will be treated as `np.float64 == np.dtype(float).type`.
  4. 检测代码区校验和实现简易反调试
  5. android weex跳转闪退,关于weex页面在android端跳转的问题
  6. DDL语句为什么不能回滚
  7. [BUUCTF-pwn]——ciscn_2019_en_2
  8. AM,DSB,SSB,FM信号调制matlab
  9. /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决
  10. ArcGIS 10.7如何获取矢量多边形所有折点的坐标(平面坐标和经纬度坐标)?
  11. 银联分账与银联代付_第三方分账系统到底有哪些作用?
  12. IDEA如何像Eclipse打开多个项目?
  13. ARM 编译选项的默认关系 001
  14. windows和Linux文件路径分隔符的不同及获取
  15. DVR服务器如何装系统,车载监控dvr如何配置服务器
  16. 【C++ 与 STL】不定长数组:vector
  17. 【Computer Organization笔记17】大实验讨论:各组数据通路展示
  18. Vue:router的beforeEach与afterEach钩子函数
  19. 求相似三角形的几种方法,相似三角形 计算公式
  20. ESP8266-SPI通讯连接显示屏

热门文章

  1. 数据可视化解决方案 Data Visualization with Matplotlib and Seaborn Li
  2. 浅浅记录一下springSecurity的学习
  3. 老外如何看待WEB前端与后端? ---来自QUORA
  4. springMVC数据校验
  5. Spring5学习笔记------5、事务操作
  6. 重庆城市交通规划数字化应用场景
  7. 限制python计算使用32位整数 (signed 32bit int)
  8. 距离之前的博客不知不觉过去一年半多了,我进步的我自己都不敢信
  9. 信用卡Java_信用卡号验证Java程序
  10. android webview 失去焦点,Android的webview失去焦点