学习记录657@python计算股价的回撤与收盘价回撤率组合图实现
以比亚迪为例,对其收盘价计算回撤,计算逻辑的核心是求的当前日期及其之前日期的价格的最大值,然后计算回撤率,然后就可以求最大值了。
本文不仅给出回撤的计算,还画出了价格与回撤率的组合图,便于观察。
看完这篇文章,还能学会组合图的绘制,一张绘制两张图,双纵轴坐标。
什么也不说了,一切尽在代码中
import numpy as np
import tushare as ts
import pandas as pd
ts.set_token('你得code')
df = ts.pro_bar(ts_code='002594.SZ', adj='qfq', start_date='20200101', end_date='20221004')
df
ts_code | trade_date | open | high | low | close | pre_close | change | pct_chg | vol | amount | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 002594.SZ | 20220930 | 263.0000 | 263.5500 | 249.0000 | 252.0100 | 264.5700 | -12.5600 | -4.7473 | 214035.88 | 5421385.039 |
1 | 002594.SZ | 20220929 | 270.0000 | 271.8000 | 264.0000 | 264.5700 | 265.6200 | -1.0500 | -0.3953 | 88356.68 | 2355802.796 |
2 | 002594.SZ | 20220928 | 273.0000 | 273.0000 | 265.5000 | 265.6200 | 273.9600 | -8.3400 | -3.0442 | 85620.18 | 2293531.516 |
3 | 002594.SZ | 20220927 | 272.9600 | 274.8300 | 270.0600 | 273.9600 | 272.9500 | 1.0100 | 0.3700 | 83095.93 | 2262822.665 |
4 | 002594.SZ | 20220926 | 266.4000 | 276.0000 | 263.5800 | 272.9500 | 266.4000 | 6.5500 | 2.4587 | 143606.40 | 3911414.127 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
663 | 002594.SZ | 20200108 | 47.4894 | 48.2884 | 47.0899 | 47.2198 | 47.9888 | -0.7690 | -1.6025 | 110974.45 | 529249.404 |
664 | 002594.SZ | 20200107 | 48.2484 | 48.4382 | 47.7091 | 47.9888 | 48.2185 | -0.2297 | -0.4764 | 93400.58 | 449013.435 |
665 | 002594.SZ | 20200106 | 47.3296 | 49.1273 | 47.1299 | 48.2185 | 47.9788 | 0.2397 | 0.4996 | 169871.38 | 822172.472 |
666 | 002594.SZ | 20200103 | 48.1386 | 48.9276 | 47.6192 | 47.9788 | 48.1086 | -0.1298 | -0.2698 | 129936.07 | 628361.961 |
667 | 002594.SZ | 20200102 | 47.6292 | 48.4082 | 47.4495 | 48.1086 | 47.6093 | 0.4993 | 1.0487 | 159345.70 | 765516.493 |
668 rows × 11 columns
# 计算每个日期及其之前的最高收盘价:首先df最近日期的数据在第一行,也就是时间降序排列的,max(df.loc[idx:,'close']),就是计算本日期和之前日期的最高收盘价,如果最高收盘价是自己,那么说明没有回撤
for idx,row in df.iterrows():df.loc[idx,'max']=max(df.loc[idx:,'close'])
df
ts_code | trade_date | open | high | low | close | pre_close | change | pct_chg | vol | amount | max | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 002594.SZ | 20220930 | 263.0000 | 263.5500 | 249.0000 | 252.0100 | 264.5700 | -12.5600 | -4.7473 | 214035.88 | 5421385.039 | 353.3961 |
1 | 002594.SZ | 20220929 | 270.0000 | 271.8000 | 264.0000 | 264.5700 | 265.6200 | -1.0500 | -0.3953 | 88356.68 | 2355802.796 | 353.3961 |
2 | 002594.SZ | 20220928 | 273.0000 | 273.0000 | 265.5000 | 265.6200 | 273.9600 | -8.3400 | -3.0442 | 85620.18 | 2293531.516 | 353.3961 |
3 | 002594.SZ | 20220927 | 272.9600 | 274.8300 | 270.0600 | 273.9600 | 272.9500 | 1.0100 | 0.3700 | 83095.93 | 2262822.665 | 353.3961 |
4 | 002594.SZ | 20220926 | 266.4000 | 276.0000 | 263.5800 | 272.9500 | 266.4000 | 6.5500 | 2.4587 | 143606.40 | 3911414.127 | 353.3961 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
663 | 002594.SZ | 20200108 | 47.4894 | 48.2884 | 47.0899 | 47.2198 | 47.9888 | -0.7690 | -1.6025 | 110974.45 | 529249.404 | 48.2185 |
664 | 002594.SZ | 20200107 | 48.2484 | 48.4382 | 47.7091 | 47.9888 | 48.2185 | -0.2297 | -0.4764 | 93400.58 | 449013.435 | 48.2185 |
665 | 002594.SZ | 20200106 | 47.3296 | 49.1273 | 47.1299 | 48.2185 | 47.9788 | 0.2397 | 0.4996 | 169871.38 | 822172.472 | 48.2185 |
666 | 002594.SZ | 20200103 | 48.1386 | 48.9276 | 47.6192 | 47.9788 | 48.1086 | -0.1298 | -0.2698 | 129936.07 | 628361.961 | 48.1086 |
667 | 002594.SZ | 20200102 | 47.6292 | 48.4082 | 47.4495 | 48.1086 | 47.6093 | 0.4993 | 1.0487 | 159345.70 | 765516.493 | 48.1086 |
668 rows × 12 columns
# 计算回撤率
df['max_rt']= df['close']/df['max']-1# 正负转化,乘以100,转化为%
df['max_rt']=-df['max_rt']*100
df
ts_code | trade_date | open | high | low | close | pre_close | change | pct_chg | vol | amount | max | max_rt | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 002594.SZ | 20220930 | 263.0000 | 263.5500 | 249.0000 | 252.0100 | 264.5700 | -12.5600 | -4.7473 | 214035.88 | 5421385.039 | 353.3961 | 28.689083 |
1 | 002594.SZ | 20220929 | 270.0000 | 271.8000 | 264.0000 | 264.5700 | 265.6200 | -1.0500 | -0.3953 | 88356.68 | 2355802.796 | 353.3961 | 25.134997 |
2 | 002594.SZ | 20220928 | 273.0000 | 273.0000 | 265.5000 | 265.6200 | 273.9600 | -8.3400 | -3.0442 | 85620.18 | 2293531.516 | 353.3961 | 24.837880 |
3 | 002594.SZ | 20220927 | 272.9600 | 274.8300 | 270.0600 | 273.9600 | 272.9500 | 1.0100 | 0.3700 | 83095.93 | 2262822.665 | 353.3961 | 22.477922 |
4 | 002594.SZ | 20220926 | 266.4000 | 276.0000 | 263.5800 | 272.9500 | 266.4000 | 6.5500 | 2.4587 | 143606.40 | 3911414.127 | 353.3961 | 22.763720 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
663 | 002594.SZ | 20200108 | 47.4894 | 48.2884 | 47.0899 | 47.2198 | 47.9888 | -0.7690 | -1.6025 | 110974.45 | 529249.404 | 48.2185 | 2.071197 |
664 | 002594.SZ | 20200107 | 48.2484 | 48.4382 | 47.7091 | 47.9888 | 48.2185 | -0.2297 | -0.4764 | 93400.58 | 449013.435 | 48.2185 | 0.476373 |
665 | 002594.SZ | 20200106 | 47.3296 | 49.1273 | 47.1299 | 48.2185 | 47.9788 | 0.2397 | 0.4996 | 169871.38 | 822172.472 | 48.2185 | -0.000000 |
666 | 002594.SZ | 20200103 | 48.1386 | 48.9276 | 47.6192 | 47.9788 | 48.1086 | -0.1298 | -0.2698 | 129936.07 | 628361.961 | 48.1086 | 0.269806 |
667 | 002594.SZ | 20200102 | 47.6292 | 48.4082 | 47.4495 | 48.1086 | 47.6093 | 0.4993 | 1.0487 | 159345.70 | 765516.493 | 48.1086 | -0.000000 |
668 rows × 13 columns
# 计算最大回撤
max(df['max_rt'])
46.18689685526171
df.sort_values(by='trade_date',inplace=True) #排个序
df
ts_code | trade_date | open | high | low | close | pre_close | change | pct_chg | vol | amount | max | max_rt | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
667 | 002594.SZ | 20200102 | 47.6292 | 48.4082 | 47.4495 | 48.1086 | 47.6093 | 0.4993 | 1.0487 | 159345.70 | 765516.493 | 48.1086 | -0.000000 |
666 | 002594.SZ | 20200103 | 48.1386 | 48.9276 | 47.6192 | 47.9788 | 48.1086 | -0.1298 | -0.2698 | 129936.07 | 628361.961 | 48.1086 | 0.269806 |
665 | 002594.SZ | 20200106 | 47.3296 | 49.1273 | 47.1299 | 48.2185 | 47.9788 | 0.2397 | 0.4996 | 169871.38 | 822172.472 | 48.2185 | -0.000000 |
664 | 002594.SZ | 20200107 | 48.2484 | 48.4382 | 47.7091 | 47.9888 | 48.2185 | -0.2297 | -0.4764 | 93400.58 | 449013.435 | 48.2185 | 0.476373 |
663 | 002594.SZ | 20200108 | 47.4894 | 48.2884 | 47.0899 | 47.2198 | 47.9888 | -0.7690 | -1.6025 | 110974.45 | 529249.404 | 48.2185 | 2.071197 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
4 | 002594.SZ | 20220926 | 266.4000 | 276.0000 | 263.5800 | 272.9500 | 266.4000 | 6.5500 | 2.4587 | 143606.40 | 3911414.127 | 353.3961 | 22.763720 |
3 | 002594.SZ | 20220927 | 272.9600 | 274.8300 | 270.0600 | 273.9600 | 272.9500 | 1.0100 | 0.3700 | 83095.93 | 2262822.665 | 353.3961 | 22.477922 |
2 | 002594.SZ | 20220928 | 273.0000 | 273.0000 | 265.5000 | 265.6200 | 273.9600 | -8.3400 | -3.0442 | 85620.18 | 2293531.516 | 353.3961 | 24.837880 |
1 | 002594.SZ | 20220929 | 270.0000 | 271.8000 | 264.0000 | 264.5700 | 265.6200 | -1.0500 | -0.3953 | 88356.68 | 2355802.796 | 353.3961 | 25.134997 |
0 | 002594.SZ | 20220930 | 263.0000 | 263.5500 | 249.0000 | 252.0100 | 264.5700 | -12.5600 | -4.7473 | 214035.88 | 5421385.039 | 353.3961 | 28.689083 |
668 rows × 13 columns
df=df.set_index('trade_date')
import numpy as np # 导入各个模块
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为黑体
mpl.rcParams['axes.unicode_minus'] = False # 解决中文字体负号显示不正常问题plt.rcParams.update({'font.size': 20})fig = plt.figure(figsize=(30,15))
ax1 = fig.add_subplot(111)
df['close'].plot(ax=ax1,ls='-',alpha=1.0,label='收盘价',color='#000000') # alpha表示点的透明程度
plt.xlabel('日期')
ax1.set_ylabel('收盘价') # 设置左边纵坐标标签
plt.legend(loc=2) # 设置图例在左上方ax2 = ax1.twinx()
df['max_rt'].plot(ax=ax2,grid=True,label='回撤率',alpha=0.7)
ax2.set_ylabel('回撤率',) # 设置右边纵坐标标签
plt.legend(loc=1) # 设置图例在右上方
plt.title('收盘价与回撤率') # 给整张图命名
plt.show()
从图中可以清楚的看到随着时间的走势,回撤的变化,最大回撤情况。
学习记录657@python计算股价的回撤与收盘价回撤率组合图实现相关推荐
- 《学习记录》“Python”计算进货价格(增加客户类型)
题目要求: 输入客户类型.标准价格和订货量.根据客户类型(<5为新客户,>=5老客户)和订货量给予不同的折扣,计算应付货款(应付货款=订货量×价格×(1-折扣)). 如果是新客户:订货量8 ...
- 《学习记录》“Python”计算汽车平均油耗及费用
题目要求: 计算汽车平均油耗及费用.小梅最近的轿车里程表显示百公里的油耗比平常低很多,他怀疑数据不准,想编程序写一个程序,输入加油的钱数,以及加油后的 运行公里数,算出车辆的油耗,再输入一年运行的公里 ...
- 学习记录655@python双均线突破量化回测实战-以比亚迪为例
以下代码对比亚迪2020年1月1日至2022年10月5日进行均线策略回测 策略逻辑是:如果5日均线大于10日均线,那么就持有一手仓位,否则不持有仓位,就这么简单明了,然后换算成净值,看净值图情况,查看 ...
- 【学习记录】Python零基础入门(五)
第五章 Python零基础入门之条件.循环及其他语句 本人自学的主要教材为Magnus Lie Hetland的Beginning Python:From Novice to Professional ...
- [Python学习记录]——Hello Python
一直以来主要使用Java语言进行编程,开始学习Python起源于2012年亚马逊双十一购书大优惠的活动中为了补齐优惠额度,正好亚马逊给推荐<Python入门基础>一书. 一年时间过去了,书 ...
- LBM学习记录3 Python实现D2Q9圆柱绕流
在https://blog.csdn.net/weixin_58913471/article/details/117561995?spm=1001.2101.3001.6650.1&utm_m ...
- python 学习记录-用python从硬盘中读写文件 Day21
(一)文件操作 文件操作步骤: 第一步: 打开文件 f = open(文件名, 操作模式, encoding=文件编码) 第二步: 读写文件 f.read() f.write() 第三步: 关闭文件 ...
- vue修改计算属性的值_「Vue学习记录五」计算属性和侦听器
1: 计算属性: (内置缓存机制) 当更改age的时候, fullName 函数不执行: 当更改fristName的时候, fullName 函数才执行 <div id = "app& ...
- 学习记录646@python求解有效年利率
原理 以下理论摘自CFA书籍 代码 注意代码中为了精确,使用了Decimal,另外求极限的代码也可以了解一下 import pandas as pd import numpy as np from d ...
最新文章
- Linux下的Shell编程(2)环境变量和局部变量
- 洛谷P3122 [USACO15FEB]圈住牛Fencing the Herd(计算几何+CDQ分治)
- 在x86上成功使用gentoo系统上安装的grub2启动 Mac OS X Leopard 10.5.7
- Visual C#创建Windows服务程序
- python 下载阿里云mysql的备份文件及binlog到本地
- Keras之MLPR:利用MLPR算法(3to1【窗口法】+【Input(3)→(12+8)(relu)→O(mse)】)实现根据历史航空旅客数量数据集(时间序列数据)预测下月乘客数量问题
- 二分查找法---java实现
- bootstrap 模态框无法使用_模态窗 Modal Window - 产品中的??注意力设计
- java.io.IOException: output.properties data exceeds its limit [2048] hue的调度
- SpringBoot结合Druid配置JNDI多数据源
- 计算机硬件人员专业知识技能,电子计算机(微机)装配调试员
- springboot+postsql 做接口api
- php修改音频文件_用php实现mp3音频文件下载功能
- HLW8032在stm32f413zh上的移植(基于HAL库)
- 烽火fr2600怎么web登录_烽火配置教程
- 网络编程1之send、recv函数详解
- php传值和引用哪个效率高,php方法传值和传引用性能比较
- web前端-写给大家看的设计书-笔记-颜色运用-色轮使用
- 干掉 Swagger (丝袜哥),试试这个新工具!
- tomcat启动时日志卡在Deploying web application directory解决
热门文章
- 金种子前三季净利亏损1.44亿 营收不及成本增速致毛利率下滑
- 1050: [HAOI2006]旅行comf
- ListView的增删改查(实战)
- 从高盛的技术“开源”看金融业软件发展未来
- 用python创建topo常见问题
- 重磅推荐:火爆全网的「合成大西瓜」源码来了
- HTML+CSS+JS体育网页制作 DW静态网页设计(篮球NBA 5页 带psd文件 )
- Vue2基础-el与data的两种写法(HTML版)
- 学生用计算机怎么调,学生计算器怎么调时间
- 计算机应用文写作C,计算机应用和公文写作