以比亚迪为例,对其收盘价计算回撤,计算逻辑的核心是求的当前日期及其之前日期的价格的最大值,然后计算回撤率,然后就可以求最大值了。
本文不仅给出回撤的计算,还画出了价格与回撤率的组合图,便于观察。
看完这篇文章,还能学会组合图的绘制,一张绘制两张图,双纵轴坐标。
什么也不说了,一切尽在代码中

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计算股价的回撤与收盘价回撤率组合图实现相关推荐

  1. 《学习记录》“Python”计算进货价格(增加客户类型)

    题目要求: 输入客户类型.标准价格和订货量.根据客户类型(<5为新客户,>=5老客户)和订货量给予不同的折扣,计算应付货款(应付货款=订货量×价格×(1-折扣)). 如果是新客户:订货量8 ...

  2. 《学习记录》“Python”计算汽车平均油耗及费用

    题目要求: 计算汽车平均油耗及费用.小梅最近的轿车里程表显示百公里的油耗比平常低很多,他怀疑数据不准,想编程序写一个程序,输入加油的钱数,以及加油后的 运行公里数,算出车辆的油耗,再输入一年运行的公里 ...

  3. 学习记录655@python双均线突破量化回测实战-以比亚迪为例

    以下代码对比亚迪2020年1月1日至2022年10月5日进行均线策略回测 策略逻辑是:如果5日均线大于10日均线,那么就持有一手仓位,否则不持有仓位,就这么简单明了,然后换算成净值,看净值图情况,查看 ...

  4. 【学习记录】Python零基础入门(五)

    第五章 Python零基础入门之条件.循环及其他语句 本人自学的主要教材为Magnus Lie Hetland的Beginning Python:From Novice to Professional ...

  5. [Python学习记录]——Hello Python

    一直以来主要使用Java语言进行编程,开始学习Python起源于2012年亚马逊双十一购书大优惠的活动中为了补齐优惠额度,正好亚马逊给推荐<Python入门基础>一书. 一年时间过去了,书 ...

  6. LBM学习记录3 Python实现D2Q9圆柱绕流

    在https://blog.csdn.net/weixin_58913471/article/details/117561995?spm=1001.2101.3001.6650.1&utm_m ...

  7. python 学习记录-用python从硬盘中读写文件 Day21

    (一)文件操作 文件操作步骤: 第一步: 打开文件 f = open(文件名, 操作模式, encoding=文件编码) 第二步: 读写文件 f.read() f.write() 第三步: 关闭文件 ...

  8. vue修改计算属性的值_「Vue学习记录五」计算属性和侦听器

    1: 计算属性: (内置缓存机制) 当更改age的时候, fullName 函数不执行: 当更改fristName的时候, fullName 函数才执行 <div id = "app& ...

  9. 学习记录646@python求解有效年利率

    原理 以下理论摘自CFA书籍 代码 注意代码中为了精确,使用了Decimal,另外求极限的代码也可以了解一下 import pandas as pd import numpy as np from d ...

最新文章

  1. Linux下的Shell编程(2)环境变量和局部变量
  2. 洛谷P3122 [USACO15FEB]圈住牛Fencing the Herd(计算几何+CDQ分治)
  3. 在x86上成功使用gentoo系统上安装的grub2启动 Mac OS X Leopard 10.5.7
  4. Visual C#创建Windows服务程序
  5. python 下载阿里云mysql的备份文件及binlog到本地
  6. Keras之MLPR:利用MLPR算法(3to1【窗口法】+【Input(3)→(12+8)(relu)→O(mse)】)实现根据历史航空旅客数量数据集(时间序列数据)预测下月乘客数量问题
  7. 二分查找法---java实现
  8. bootstrap 模态框无法使用_模态窗 Modal Window - 产品中的??注意力设计
  9. java.io.IOException: output.properties data exceeds its limit [2048] hue的调度
  10. SpringBoot结合Druid配置JNDI多数据源
  11. 计算机硬件人员专业知识技能,电子计算机(微机)装配调试员
  12. springboot+postsql 做接口api
  13. php修改音频文件_用php实现mp3音频文件下载功能
  14. HLW8032在stm32f413zh上的移植(基于HAL库)
  15. 烽火fr2600怎么web登录_烽火配置教程
  16. 网络编程1之send、recv函数详解
  17. php传值和引用哪个效率高,php方法传值和传引用性能比较
  18. web前端-写给大家看的设计书-笔记-颜色运用-色轮使用
  19. 干掉 Swagger (丝袜哥),试试这个新工具!
  20. tomcat启动时日志卡在Deploying web application directory解决

热门文章

  1. 金种子前三季净利亏损1.44亿 营收不及成本增速致毛利率下滑
  2. 1050: [HAOI2006]旅行comf
  3. ListView的增删改查(实战)
  4. 从高盛的技术“开源”看金融业软件发展未来
  5. 用python创建topo常见问题
  6. 重磅推荐:火爆全网的「合成大西瓜」源码来了
  7. HTML+CSS+JS体育网页制作 DW静态网页设计(篮球NBA 5页 带psd文件 )
  8. Vue2基础-el与data的两种写法(HTML版)
  9. 学生用计算机怎么调,学生计算器怎么调时间
  10. 计算机应用文写作C,计算机应用和公文写作