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

如何用变量替代硬编码索引适配多数据集?股票买卖组合求解

解决任意股票数据集的最大亏损率买卖日期组合问题

需要编写可适配任意数据集的代码,处理带DateTime索引与浮点值的pandas Series类型股票数据,找出亏损率最大的买卖日期组合(卖出日期必须晚于买入日期)。目前代码中存在硬编码日期的问题,无法适配任意数据,且要求不能使用for循环,需要改进方案。


现有代码

数据加载部分

# 加载股票数据
import pandas as pd
import numpy as np

data = pd.read_csv('NVDA.csv', index_col=0, parse_dates=True)
stock = data['Close']

# 设置Jupyter显示选项
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
pd.set_option('display.float_format', lambda x: '%.2f' % x)
pd.set_option('display.max_columns', None)

最大亏损率计算(含硬编码问题)

# 计算历史最高价与当前价的比值(比值越大,亏损越严重)
bigloss = stock.cummax() / stock
biggestloss = bigloss.nlargest(1)

# 确定卖出价格与日期
y = stock.loc[biggestloss.index]

# 硬编码日期区间获取历史最高价,无法适配任意数据
losshigh = stock.loc['1999-01-22':'2002-10-09'].max()

# 确定买入价格与日期
x = stock[stock == losshigh]

# 计算亏损百分比(公式存在错误,应为 (x[0]-y[0])/x[0]*100)
percentage = (x[0] - y[0]/x[0])*100

改进方案(无硬编码、无for循环)

核心思路:利用cummax()获取每个时间点的历史最高价,找到亏损率最大的卖出点后,反向定位对应的历史最高价出现日期,全程用pandas内置方法实现,无需循环。

# 1. 计算每个时间点的历史最高价
cum_high = stock.cummax()

# 2. 计算每个时间点相对于历史最高价的亏损比值(比值越大,亏损越严重)
loss_ratio = cum_high / stock

# 3. 找到亏损比值最大的卖出日期
sell_date = loss_ratio.idxmax()
sell_price = stock.loc[sell_date]

# 4. 找到该卖出日期之前的历史最高价对应的买入日期(取最早出现的最高价日期)
buy_price = cum_high.loc[sell_date]
buy_date = stock.loc[:sell_date][stock.loc[:sell_date] == buy_price].idxmin()

# 5. 计算正确的亏损百分比
max_loss_percent = (buy_price - sell_price) / buy_price * 100

# 输出结果
print(f"最大亏损率买卖组合:")
print(f"买入日期:{buy_date.date()},买入价格:{buy_price:.2f}")
print(f"卖出日期:{sell_date.date()},卖出价格:{sell_price:.2f}")
print(f"亏损率:{max_loss_percent:.2f}%")

关键改进点:

  • 移除硬编码日期:通过stock.loc[:sell_date]动态限定买入日期的时间范围,适配任意数据集
  • 修正亏损率计算公式:原公式逻辑错误,正确公式为(买入价-卖出价)/买入价*100
  • 无循环实现:全程使用pandas的向量化方法(cummax()、idxmax()、idxmin()),符合性能要求
  • 鲁棒性提升:自动定位历史最高价的最早出现日期,确保买卖时间逻辑合法(卖在买之后)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:33:11