一、模型前提与假设

设策略总天数为\(n\)、第\(t\)日大盘的收盘价为\(P_t\)、第\(t\)日的单日收益率为\(r_t\)、\(n\)天的累积收益率为\(r_{cum}\)

假设策略仅买卖大盘指数,第\(t\)日的头寸是根据第\((t-1)\)日收盘价计算出的\(s_{t-1}\),因此第1天的收益率\(r_{1}=0\)

特别注意:为避免未来函数,不能使用\(s_{t}\)计算第\(t\)日的头寸。

二、大盘单日收益率

1. 离散型

\[r_t=\frac{P_t}{P_{t-1}}-1

\]

对应的Python代码为:

df['market_dis'] = df['close']/df['close'].shift()-1

df['market_dis'] = df['close'].pct_change()

2. 连续型

\[r_t=ln\frac{P_t}{P_{t-1}}

\]

对应的Python代码为:

df['market_con'] = np.log(df['close'] / df['close'].shift())

三、大盘累积收益率

1. 离散型

\[\begin{align}

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. 连续型

\[\begin{align}

\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. 离散型

\[r_t=

\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. 连续型

\[r_t=

\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. 离散型

\[\begin{align}

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. 连续型

\[\begin{align}

\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代码相关推荐

  1. Python计算字符串长度的函数

    文章目录 Python三种计算字符串长度的函数 1.使用内置函数len 2.使用for循环 3.使用while循环和切片 代码 代码展示 代码运行结果 Python三种计算字符串长度的函数 1.使用内 ...

  2. python 计算累计人数_免费Python入门课程,看到就是赚到~

    前言 人生苦短,我用python.当下最火的编程语言,你是否也想试试? Python发行于1991年,广泛应用于系统管理任务的处理和WEB编程.创始人阿姆斯特丹Guido为了打发圣诞节的无趣,决心开发 ...

  3. python里面的内置函数_【python】函数之内置函数

    今天来介绍一下Python解释器包含的一系列的内置函数,下面表格按字母顺序列出了内置函数: 下面就一一介绍一下内置函数的用法: 1.abs() 返回一个数值的绝对值,可以是整数或浮点数等. print ...

  4. python partition函数_如何使用正确的姿势进行高效Python函数式编程?

    演讲者:丁来强@Splunk  PyConChina2015 北京站 9月12日与9月19日,PyConChina 2015上海站与北京站顺利落下帷幕."人生苦短,Python 当歌&quo ...

  5. python log函数_求你别再花大价钱学 Python 之爬虫实战

    引子 Python 基本概念 Python 优势和劣势 优势 Python 的劣势 Python 安装设置 Python 基本语法 程序例子 Python 基本语法 Python 爬虫实现 爬虫相关 ...

  6. python根据词向量计算相似度_如何使用gensim的word2vec模型和python计算句子相似度...

    如何使用gensim的word2vec模型和python计算句子相似度 根据Gensim Word2Vec,我可以使用gensim包中的word2vec模型来计算2个单词之间的相似度. 例如 trai ...

  7. 用python处理excel数据做函数_如何使用python通过函数式编程完成excel中的数据处理及分析工作...

    Excel是数据分析中最常用的工具,本篇文章通过python与excel的功能对比介绍如何使用python通过函数式编程完成excel中的数据处理及分析工作.在Python中pandas库用于数据处理 ...

  8. python列表平均值函数_如何计算列表的平均值-统计信息和Python的均值函数详细解释

    python列表平均值函数 Mathematics and programming go hand in hand. If you are a programmer, at some point yo ...

  9. python计算相关性显著性p值_基于python实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...

  10. 在python的解释器中使用函数_浅析Windows 嵌入python解释器的过程

    这次主要记录在windows下嵌入 python 解释器的过程,程序没有多少,主要是头文件与库文件的提取. 程序平台:windows10 64 bit. Qt 5.5.1  MSVC  2013 32 ...

最新文章

  1. javascript 和 jq 的调试 用console.log() 函数
  2. 考研预报名一直显示服务器错误,2021考研预报名 | 往年预报名出错的同学,问题出在这里!...
  3. 《剑指offer》数值的整数次方
  4. Ubuntu16.04-LTS升级到18.04
  5. 【转】产品经理如何进行BRD,MRD,PRD,DRD,FRD编写
  6. 哈工大等提出轻量级盲超分辨模型LESRCNN,代码已开源
  7. PowerShell命令测试--whatif参数
  8. php zitian虚拟主机配置_虚拟主机的发展
  9. C语言实现两个数值互换
  10. 微信支付基于图计算的反欺诈实践
  11. webpack插件之HtmlWebpackPlugin
  12. 海尔跨越福特、丰田制造标杆主导世界制造业国际标准
  13. 2017年工作回顾及2018年新展望
  14. 在Win10下 用 Powershell 或 CMD 完成文件的 MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512 等哈希校验
  15. iOS开发-代替UDID被弃用和UUID使用缺陷的解决方案
  16. 基于阿里DDNS的ipv6 for windows版软件
  17. html5微相册,微信开发 微信H5开发 微信小程序 微报名 微相册 微**
  18. (附源码)音乐播放小程序 毕业设计 031306
  19. ChatGPT/大模型+零代码,给中小企业带来哪些机会?
  20. W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x419b4c50)

热门文章

  1. 第四周作业part1
  2. python如何爬有道翻译_Python爬虫爬有道翻译
  3. ubuntu 安装音乐播放器
  4. Android studio集成HotFix
  5. 计算机色彩学,浅析色彩原理
  6. 编写一个主函数和子函数char *tran(int x, int r), 要求是:函数tran将十进制整数x转换成r进制数y(r在2~16之间), x和r的值由主调函数(即主函数)传入,y的值需要返
  7. 联想昭阳E43L笔记本无线开关停掉解决方案
  8. 还停留在图片识别?谷歌已经开始研究视频识别了
  9. chrome 您的浏览器禁用了Javascript
  10. 少儿学编程系列 --- 使用python程序暴力求解:数学游戏 24 Game的答案