# 生成过去一年的工作日(不含周末)日期序列
try:
# 使用上海时区作为本地时间
today = pd.Timestamp.now(tz='Asia/Shanghai').normalize()
except Exception:
# 回退到本地无时区的今天
today = pd.Timestamp.today().normalize()
start = today - pd.offsets.DateOffset(years=1)
dates = pd.bdate_range(start=start, end=today) # B 表示工作日频率
len(dates), dates.min(), dates.max()
(262,
Timestamp('2024-10-07 00:00:00+0800', tz='Asia/Shanghai'),
Timestamp('2025-10-07 00:00:00+0800', tz='Asia/Shanghai'))
# 使用几何布朗运动(GBM)模拟收盘价
S0 = 16000.0 # 初始指数水平(仅为示例)
mu = 0.10 # 年化期望收益率(示例)
sigma = 0.25 # 年化波动率(示例)
dt = 1.0 / 252 # 交易日步长
n = len(dates)
# 随机标准正态序列
z = np.random.normal(size=n)
# 连续复利收益率增量
dr = (mu - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * z
# 价格路径(排除第一个偏移,直接累乘)
prices = S0 * np.exp(np.cumsum(dr))
df = pd.DataFrame({
'Close': prices
}, index=dates)
df.head()
Close | |
---|---|
2024-10-07 00:00:00+08:00 | 16130.050974 |
2024-10-08 00:00:00+08:00 | 16099.358262 |
2024-10-09 00:00:00+08:00 | 16268.852089 |
2024-10-10 00:00:00+08:00 | 16668.332271 |
2024-10-11 00:00:00+08:00 | 16611.511128 |
# 绘制日线收盘价走势图
plt.figure(figsize=(12, 5))
df['Close'].plot(color='tab:blue', lw=1.5)
plt.title('纳斯达克指数 - 伪行情(过去一年,日线收盘)', fontname='Microsoft YaHei', fontsize=14)
plt.xlabel('日期', fontname='Microsoft YaHei')
plt.ylabel('指数水平', fontname='Microsoft YaHei')
plt.grid(True, ls='--', alpha=0.4)
plt.tight_layout()
plt.show()