量化交易 第六课 策略评估指标计算

第六课 策略评估指标计算

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

概述

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

  • 回测收益率
  • 回测年化收益率
  • 最大回撤
  • 夏普比率
  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/46869.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自己做量化交易软件(3)通通量化分析框架构成1

自己做量化交易软件(3)通通量化分析框架构成1 通通股票量化分析框架采用模块化设计,每个模块存放在不同的py文件中。 通通股票量化分析框架下载: https://download.csdn.net/download/hepu8/10668509 运行python环境,可以在我的网盘下载绿色python软…

股票量化分析工具V2.0版-视频更新完毕!代码已上传!

视频课程《理性投资!2天入门量化思维炒股!定制自己的股票分析工具》Day1录播内容已全部上线。 已经购买的读者们速去学习!!! ----点击【阅读原文】跳转 升级的V2.0回测工具的代码已经上传课件,同时也上传了…

python版期货量化交易(AlgoPlus)案例(多进程处理子任务)

python版期货量化交易(AlgoPlus)案例(多进程处理子任务) python因为简单、易上手,所以深受大家的喜爱,并且随着人工智能的不断发展与进步,python也一跃成为了最受欢迎的编程语言之一&#xff0…

程序员如何学习量化交易,一文总结

最近有位金融行业的朋友想把一个盈利能力很强的策略做成量化程序遇到问题,问题是这样的 线程A在while(true)的循环里做条件判断,循环耗时1分钟。循环结束判断条件满足的时候调用交易接口下单建仓。想实现条件成立马上建仓,而不需要等待1分钟的…

屏蔽 app 开屏广告,舒畅了

之前吐槽过开屏广告 吐槽一下 ,今天分享下iOS手机屏蔽 app 开屏广告的方法: 1.打开手机设置 2.打开 屏幕使用时间 3.打开 内容和隐私访问限制 4.找到 广告 设置为不允许 设置完后大部分app的开屏广告没了,当然可能有漏网之鱼,可…

【K8S系列】快速初始化⼀个最⼩集群

序言 走得最慢的人,只要不丧失目标,也比漫无目的地徘徊的人走得快。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级重要蓝色:用来标记二级重要 希望这篇文章能让你不仅有…

吴恩达教你写提示词 ChatGPT prompt engineering

文章目录 吴恩达教你写提示词 ChatGPT prompt engineering1. 关键提示(prompt)原则1. 基础2. 编写明确和具体的提示词3. 给模型时间“思考”4. 模型的限制5. 迭代式提示(prompt)开发过程 2. 提示(prompt)一…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)迭代提示词笔记(中文chatgpt版)...

Iterative Prompt Develelopment 迭代提示词开发 在本课中,您将反复分析和优化您的提示,以从产品说明书生成营销文案。 设置 import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env fil…

Unity Shader人物发光特效

Unity Shader人物发光特效 写在前面效果实现方法项目地址写在后面 写在前面 当人物被击中或则有任务引导提升时,人物身上将会有发光特效,这里我自己实现一下。 效果 实现方法 核心思想就是将贴图试图向量(朝摄像机方向)与法线向量单位化后做点乘从而得…

【Unity】awake和start

生命周期流程如下 本篇主要讲的是在比较靠前的awake和start阶段,因为这两个阶段效果类似,都只会执行一次,但是具有触发条件. awake、enable、start依照次顺序执行,awake会在一开始的时候就会执行,但start则是在被激活…

Unity Shader - 类似七龙珠的人物气焰效果

文章目录 环境效果思路passespass - 气焰优化后的 shader Project关于效果落地 环境 Unity : 2018.3.11f1 Pipeline : BRP 效果 覆盖身前 覆盖身前 叠加混合 风格化 版本,更适合 NPR: 再优化一版本 该效果是自己摸索的(也是自己再国…

虚幻引擎中GPU Lightmass全局光照的使用步骤

GPU Lightmass (GPULM) 是一种光烘焙方法,它预先计算来自具有 Stationary 或 Static 移动性的灯光的复杂光交互,并将该数据存储在创建的应用于场景几何体的光照贴图纹理中。GPU Lightmass 显着减少了为复杂场景计算、构建和生成光照数据所需的时间&#…

UE4 Shader 常用函数 学习笔记

Add:快捷键a 将两数相加,也可以将两纹理相加,如下图: append(追加): Subtract(减): 和加相反,特例,如下: Abs&#xff0…

Ubuntu搭建原神3.7版本服务器

本文涉及知识点 linux基础命令|mongoDB服务端搭建及指令|Java环境搭建 原神私服可以用来抽卡满足自己用,他的许多任务都得登录控制台自己发,不建议拿私服玩,想要体验完美原神请到官服,本文只做LINUX MongoDB java教学例子 写在前…

原神角色渲染详解

整体效果展示:主要方案是对下面几张图做不同的处理 身体 基础颜色光照:主要贴图卡通贴图ramp图法线图光照图 金属度与高光,头发部分高光:光照图,头发部分用高光black图 深度边缘光:用额外pass DepthNor…

打脸了兄弟们,Go1.20 arena 来了!

大家好,我是煎鱼。 大概半年前,我写过一篇文章《Go 要违背初心吗?新提案:手动管理内存》。有兴趣了深入解的同学,可以再回顾一下。 当时我们还想着 Go 团队应该不会接纳,至少不会那么快: 没想到…

对正在打野发育的红队同学的一次反制

文章目录 故事开始其他反制思路隐蔽C2CS重定向器实验 故事开始 真的是对同学的反制哈,我们最近都在学习内网&钓鱼就互相”攻击“,就有那么一天我就在想我偷懒把CS登录密码设置的很简单,会不会其它人也偷懒,于是就抱着尝试的心…

zsteg安装及CTF打野wp

下载文件解压后拖进kali里,移到root目录下 使用命令 zsteg 文件名 执行成功后即可获取qwxf{you_say_chick_beautiful?} 下面介绍zsteg的安装 使用命令 git clone http://www.github.com/zed-0xff/zsteg apt-get install gem gem install zsteg 若报错,…

AI版女网红“半藏森林”上线,服务项目让人意想不到

目前首批网红明星“AI克隆人”已提前上线,主营业务就是打造各种名人版AI聊天机器人,用户付费便可与之聊天。其后台报名参加AI克隆人的网红明星“全网粉丝总数已超过5亿”。该公司这波上线的网红明星AI克隆人,包括此前因“疑似插足他人恋情”&…