You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SQL计算单只股票的每日回撤值

如何计算单只股票的每日回撤值

嘿,我完全懂你的痛点——全数据集的最大回撤是抓全局最高点来算,但每日回撤需要动态跟踪到当天为止的历史最高价,逻辑上就是把“全局最高”换成“截至当日的滚动最高”,我给你拆解成具体的实现步骤,不管用Python还是Excel都能搞定:

核心逻辑回顾

你定义的每日回撤公式:

(截至当日及之前的最高价格 - 当前价格) / 截至当日及之前的最高价格

关键就在于“截至当日及之前的最高价格”——这是一个滚动计算的最大值,而不是整个数据集的固定最大值。


用Python Pandas实现(最常用的股票数据处理方式)

假设你已经把单只股票的价格数据整理成了Pandas DataFrame,比如包含Date(日期)和Close(收盘价)列:

  1. 计算滚动历史最高价
    用cummax()函数,它会逐行计算从数据集开头到当前行的最大值,完美匹配“截至当日及之前的最高价格”需求:

    import pandas as pd
    
    # 假设你的数据存在df中,'Close'是收盘价列
    df['Rolling_High'] = df['Close'].cummax()
    
  2. 计算每日回撤值
    直接套用你的公式即可:

    df['Daily_Drawdown'] = (df['Rolling_High'] - df['Close']) / df['Rolling_High']
    

举个直观的小例子:
如果前4天的收盘价是[100, 105, 102, 98],那么:

  • 滚动最高价依次是[100, 105, 105, 105]
  • 每日回撤就是[0, 0, ~0.0286, ~0.0667](也就是0%、0%、2.86%、6.67%)

用Excel实现(适合手动处理小数据集)

如果用Excel操作,逻辑是一样的:

  • 假设收盘价在B列(B2开始是第一天价格)
  • 在C2单元格输入=B2(第一天的滚动最高价就是自身)
  • 在C3单元格输入=MAX(C2, B3),然后下拉填充到所有行——这就得到了截至每日的历史最高价
  • 在D3单元格输入=(C3-B3)/C3,下拉填充,就是每日回撤值

额外提示

  • 当当日收盘价创新高时,滚动最高价会更新为当日价格,此时每日回撤值为0,完全符合你的定义
  • 如果需要把回撤值转成百分比格式,不管是Pandas还是Excel都可以直接设置格式,比如Pandas里用df['Daily_Drawdown'] = df['Daily_Drawdown'].mul(100).round(2)保留两位小数的百分比

内容的提问来源于stack exchange,提问作者Coding_Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:38:13