大盘及策略收益率的公式推导与Python代码
一、模型前提与假设
设策略总天数为\(n\)、第\(t\)日大盘的收盘价为\(P_t\)、第\(t\)日的单日收益率为\(r_t\)、\(n\)天的累积收益率为\(r_{cum}\)
假设策略仅买卖大盘指数,第\(t\)日的头寸是根据第\((t-1)\)日收盘价计算出的\(s_{t-1}\),因此第1天的收益率\(r_{1}=0\)
特别注意:为避免未来函数,不能使用\(s_{t}\)计算第\(t\)日的头寸。
二、大盘单日收益率
1. 离散型
\]
对应的Python代码为:
df['market_dis'] = df['close']/df['close'].shift()-1
或
df['market_dis'] = df['close'].pct_change()
2. 连续型
\]
对应的Python代码为:
df['market_con'] = np.log(df['close'] / df['close'].shift())
三、大盘累积收益率
1. 离散型
1+r_{cum}&=(1+r_{1})(1+r_{2})\cdots(1+r_{n})\\[1.5ex]
&=\frac{P_{1}}{P_{0}}\cdot \frac{P_{2}}{P_{1}}\cdots\frac{P_{n}}{P_{n-1}}\\[1.5ex]
&=\frac{P_{n}}{P_{0}}
\end{align}
\]
对应的Python代码为:
# 注意:这里的累积收益率是以净值形式体现的,在实际应用中可能需要在此结果基础上-1
df['market_dis_cum'] = (1+df['market_dis']).cumprod()
2. 连续型
\text{exp}(r_{cum})& = \text{exp}(r_{1}+r_{2}+\cdots+r_{n}) \\[1.5ex]
& = \text{exp}\left({ln\frac{P_{1}}{P_{0}}+ln\frac{P_{2}}{P_{1}}+\cdots+ln\frac{P_{n}}{P_{n-1}}}\right)\\[1.5ex]
& =\frac{P_{1}}{P_{0}}\cdot\frac{P_{2}}{P_{1}}\cdots\frac{P_{n}}{P_{n-1}}\\[1.5ex]
& =\frac{P_{n}}{P_{0}}\\[2ex]
\end{align}
\]
对应的Python代码为:
# 注意:这里的累积收益率是以净值形式体现的,在实际应用中可能需要在此结果基础上取np.log()
df['market_con_cum'] = df['market_con'].cumsum().apply(np.exp)
四、策略单日收益率
1. 离散型
\begin{cases}
0&,t=1\\[2ex]
s_{t-1}\left(\cfrac{P_t}{P_{t-1}}-1\right)&,t=2,3,\cdots,n\\[2ex]
\end{cases}
\]
对应的Python代码为:
df['strategy_dis'] = df['position'].shift()*df['market_dis']
2. 连续型
\begin{cases}
0&,t=1\\[2ex]
s_{t-1}ln\cfrac{P_t}{P_{t-1}}&,t=2,3,\cdots,n\\[2ex]
\end{cases}
\]
对应的Python代码为:
df['strategy_con'] = df['position'].shift()*df['market_con']
五、策略累积收益率
1. 离散型
1+r_{cum}&=(1+r_{2})(1+r_{3})\cdots(1+r_{n})\\[1.5ex]
&=\left[1+s_{1}\left(\frac{P_{2}}{P_{1}}-1\right)\right]\left[1+s_{2}\left(\frac{P_{3}}{P_{2}}-1\right)\right]\cdots\left[1+s_{n-1}\left(\frac{P_{n}}{P_{n-1}}-1\right)\right]\\[1.5ex]
\end{align}\\
\]
对应的Python代码为:
# 注意:这里的累积收益率是以净值形式体现的,在实际应用中可能需要在此结果基础上-1
df['strategy_dis_cum'] = (1+df['strategy_dis']).cumprod()
2. 连续型
\text{exp}(r_{cum})& = \text{exp}(r_{2}+r_{3}\cdots+r_{n}) \\[1.5ex]
& = \text{exp}\left({s_1ln\frac{P_{2}}{P_{1}}+s_2ln\frac{P_{3}}{P_{2}}+\cdots+s_{n-1}ln\frac{P_{n}}{P_{n-1}}}\right)\\[1.5ex]
& =\left(\frac{P_{2}}{P_{1}}\right)^{s_1}\left(\frac{P_{3}}{P_{2}}\right)^{s_2}\cdots\left(\frac{P_{n}}{P_{n-1}}\right)^{s_{n-1}}\\[1.5ex]
\end{align}
\]
对应的Python代码为:
# 注意:这里的累积收益率是以净值形式体现的,在实际应用中可能需要在此结果基础上取np.log()
df['strategy_con_cum'] = df['strategy_con'].cumsum().apply(np.exp)
大盘及策略收益率的公式推导与Python代码的更多相关文章
- 最小二乘法公式推导及Python实现
机器学习使用线性回归方法建模时,求损失函数最优解需要用到最小二乘法.相信很多朋友跟我一样,想先知道公式是什么,然后再研究它是怎么来的.所以不多说,先上公式. 对于线性回归方程\(f(x) = ax + ...
- 一个 11 行 Python 代码实现的神经网络
一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...
- XGBoost参数调优完全指南(附Python代码)
XGBoost参数调优完全指南(附Python代码):http://www.2cto.com/kf/201607/528771.html https://www.zhihu.com/question/ ...
- 学习TensorFlow,浅析MNIST的python代码
在github上,tensorflow的star是22798,caffe是10006,torch是4500,theano是3661.作为小码农的我,最近一直在学习tensorflow,主要使用pyth ...
- PEP 8 - Python代码样式指南
PEP 8 - Python代码样式指南 PEP: 8 标题: Python代码风格指南 作者: Guido van Rossum <python.org上的guido>,Barry Wa ...
- catboost原理以及Python代码
原论文: http://learningsys.org/nips17/assets/papers/paper_11.pdf catboost原理: One-hot编码可以在预处理阶段或在训练期间 ...
- 一种部署 Python 代码的新方法
在Nylas,我们喜欢使用Python进行开发.它的语法简单并富有表现力,拥有大量可用的开源模块和框架,而且这个社区既受欢迎又有多样性.我们的后台是纯用 Python 写的,团队也经常在 PyCon ...
- Python代码编码规范
目录 1. Introduction 介绍 2. A Foolish Consistency is the Hobgoblin of Little Minds 尽信书,则不如无书 3. Code la ...
- 改改Python代码,运行速度还能提升6万倍
这份最新研究指出,在后摩尔定律时代,人类所获得的的算力提升将更大程度上来源于计算堆栈的「顶层」,即软件.算法和硬件架构,这将成为一个新的历史趋势. 很多人学习python,不知道从何学起.很多人学习p ...
随机推荐
- 【Python】解决浮点数间运算存在不确定尾数的问题
#浮点数间运算存在不确定尾数,所以会输出False if 0.1+0.2==0.3: print("Ture\n") else: print("False\n" ...
- 【做题笔记】UVA11988破损的键盘
本题可以在洛谷评测,但需要绑定账号 首先解释一下:Home键的作用是把光标移动,End键的作用是返回上次按Home键的地方 考虑朴素做法:输入为[时下一次插入在数组最前端,然后元素整体向后:同时令 l ...
- UltraEdit设置打开的文件类型,怎么打开大文本文件
点击高级,配置,选择文件处理下的临时文件,设置如图即可打开超大文本文件. 补充:视图——显示行号.
- sqli-libs(29(jspstudy)-31关)
Less_29 Less-29: 需要用到jspstudy跟phpstudy 搭建jspstudy: sqli-labs-master文件夹下面还有tomcat文件,这才是真正的关卡,里面的jsp ...
- gulp 常用方法 任务 插件
执行gulp 任务 gulp taskname (default任务不输入名称亦可:gulp) var gulp = require("gulp"); gulp.task(&quo ...
- windows CMakeLists.txt
在windows下写好CMakeLists.txt,然后配合cmake-gui使用. CMakeLists.txt写的不够好,后期优化,以下仅供参考: # set(OpenCV_DIR D:/Prog ...
- [NLP]Transformer模型解析
简介[2] Attention Is All You Need是2017年google提出来的一篇论文,论文里提出了一个新的模型,叫Transformer,这个结构广泛应用于NLP各大领域,是目前比较 ...
- 计算机二级-C语言-程序填空题-190109记录-对二维字符串数组的处理
//给定程序,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长.ss所指字符串数组中共有M个字符串,且串长<N. //重难点 ...
- 如何创建Maven项目和Spring IOC例子
把如何创建Maven项目和创建Spring IOC的例子分享给大家,希望能对大家有帮助! 我的博客地址:https://www.cnblogs.com/themysteryofhackers/p/12 ...
- jsTree的checkbox默认选中和隐藏
jstree复选框自定义显示隐藏和初始化默认选中 首先需要配置 Checkbox plugin "plugins" : ['checkbox'] 设置默认选中状态(checkbox ...