量化交易 第六课 策略评估指标计算
第六课 策略评估指标计算
- 概述
- 获取取票数据
- 回测收益率
- 回测年华收益率
- 最大回撤
- 夏普比率
概述
我们在创建策略的过程中, 需要通过不同的评估指标来验证策略的有效性. 这些指标可以帮助我们调整策略, 得到更好的结果.
常见的策略评估指标有:
- 回测收益率
- 回测年化收益率
- 最大回撤
- 夏普比率
- 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
量化交易 第六课 策略评估指标计算相关推荐
- 量化交易 第五课 策略评估指标
第五课 策略评估指标 概述 收益指标 回测收益率 年化收益率 基准收益率 风险指标 最大回撤 单位风险收益指标 夏普比率 概述 在量化策略回测研究中, 往往需要通过风险评价指标从各个角度客观, 全面地 ...
- 量化交易 实战第一课 策略入门
量化交易 实战第一课 策略入门 概述 要求 指标 市净率 股票市值 代码实现 概述 不管是技术分析还是基本面分析, 我们在进行投资的时候会选择某些表现好的股票来作为一个股票池. 从中进行交易的判断 ( ...
- 量化交易 实战第二课 金融时间序列分析 Part 1
量化交易 实战第一课 金融时间序列分析 Part 1 概述 平台 获取股票数据 需求 函数 index_components - 获取指数成分股列表 get_price - 合约历史数据 代码 统计分 ...
- 量化交易之单因子策略
量化交易之单因子策略 单因子策略 小市值选股策略 移动平均线:如何躲过股灾和大跌 『布带林线:衡量市场的波动性/趋势』 单因子策略 你知道剩男剩女是如何剩下的吗? 许多年后,他们都一样,都会发现自己其 ...
- 量化交易之多因子策略
量化交易之多因子策略 多因子策略 海龟交易:多因子策略.机械交易系统 『K线:基本功但不能依靠』 『唐安奇通道:衡量市场的波动性/趋势』 『平均真实波幅:过去一段时间内市场的绝对波动幅度』 『海龟择时 ...
- 量化交易 实战第九课 多因子相关性分析
量化交易 实战第九课 多因子相关性分析 概述 研报分析结果 代码实现 导包 总资产回报率 IC 资本回报率 IC 计算相关性 概述 相关性 (Correlation) 在统计中是与独立性 (Indep ...
- 量化交易 聚宽 PEG策略
量化交易 聚宽 PEG策略 PE:市盈率 G:收益增长率 PEG = PE / (G × 100) # 导入函数库 from jqdata import *# 初始化函数,设定基准等等 def ini ...
- Python量化交易02——双均线策略(移动平均线)
参考书目:深入浅出Python量化交易实战 本次带来最经典的交易策略,双均线策略的构建和其回测方法. 双均线一般采用5天均值和10天均值,如果5日均线上穿突破了10日均线,说明股价在最近的涨势很猛,买 ...
- 量化交易:止盈策略与回测
我们买基金或股票的时候通常用最简单的策略进行决策:低买高卖,跌的多了就加仓拉低持有成本,达到收益率就卖出. 那么如何用代码表示这个策略呢?首先定义交易信号则是:0.5%时买入,目标止盈线是1.5%,达 ...
最新文章
- 浅谈敏捷开发及Scrum工具leangoo(三)
- HDU 5988 最小费用流
- 去除警告: FutureWarning: In future, it will be treated as `np.float64 == np.dtype(float).type`.
- 检测代码区校验和实现简易反调试
- android weex跳转闪退,关于weex页面在android端跳转的问题
- DDL语句为什么不能回滚
- [BUUCTF-pwn]——ciscn_2019_en_2
- AM,DSB,SSB,FM信号调制matlab
- /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决
- ArcGIS 10.7如何获取矢量多边形所有折点的坐标(平面坐标和经纬度坐标)?
- 银联分账与银联代付_第三方分账系统到底有哪些作用?
- IDEA如何像Eclipse打开多个项目?
- ARM 编译选项的默认关系 001
- windows和Linux文件路径分隔符的不同及获取
- DVR服务器如何装系统,车载监控dvr如何配置服务器
- 【C++ 与 STL】不定长数组:vector
- 【Computer Organization笔记17】大实验讨论:各组数据通路展示
- Vue:router的beforeEach与afterEach钩子函数
- 求相似三角形的几种方法,相似三角形 计算公式
- ESP8266-SPI通讯连接显示屏
热门文章
- 数据可视化解决方案 Data Visualization with Matplotlib and Seaborn Li
- 浅浅记录一下springSecurity的学习
- 老外如何看待WEB前端与后端? ---来自QUORA
- springMVC数据校验
- Spring5学习笔记------5、事务操作
- 重庆城市交通规划数字化应用场景
- 限制python计算使用32位整数 (signed 32bit int)
- 距离之前的博客不知不觉过去一年半多了,我进步的我自己都不敢信
- 信用卡Java_信用卡号验证Java程序
- android webview 失去焦点,Android的webview失去焦点