Skip to content

第 2 讲:先拿到价格数据

本讲要点

没有可靠的历史价格,后面所有结论都无法复核。


1. 实验标的与样本窗口

本讲使用 沪深 300ETF,在数据接口中的代码为 510300.SS。可将其理解为跟踪 A 股大型公司整体表现的交易型基金,适合作为入门回测对象。

为便于对照与复现,样本窗口固定为:

  • 起始:2021-01-01
  • 截止:2026-03-04(含当日)

不采用「截至今日」的写法,以免结果随运行日期漂移。


2. 代码

运行仓库脚本 easy-quant/code/02_get_data.py,或直接使用下列程序:

python
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

START = "2021-01-01"
END = "2026-03-04"
SYMBOL = "510300.SS"

download_end = (pd.Timestamp(END) + pd.Timedelta(days=1)).strftime("%Y-%m-%d")
df = yf.download(
    SYMBOL,
    start=START,
    end=download_end,
    auto_adjust=True,
    multi_level_index=False,
    progress=False,
)
df = df.loc[:END]

print(df.head())
print(f"范围: {df.index[0].date()}{df.index[-1].date()}")
print(f"行数: {len(df)}")

plt.figure(figsize=(10, 4))
plt.plot(df.index, df["Close"])
plt.title("沪深300ETF (510300.SS) 收盘价")
plt.xlabel("日期")
plt.ylabel("价格")
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

运行后应得到:含 Close 列的日频价格表,以及一条覆盖上述窗口的收盘价曲线。


3. 看图并提出问题

下图由上述代码生成(固定窗口 2021-01-012026-03-04):

沪深300ETF收盘价

请先观察图像,再回答:

  1. 在整段样本内,价格总体呈现上涨、下跌,还是先跌后涨(或先涨后跌)?
  2. 哪一段下跌或上涨最为陡峭?大约对应哪些年份?
  3. 若采用「每月定额买入」与「第一天一次性买入并持有」,在这种路径下,哪一种更容易占优?为什么?
  4. 图中所见涨跌,主要反映的是市场本身(Beta),还是某一交易规则的超额能力(Alpha)?

后续「定投」与「买入持有」的对照,将直接依赖对本图路径的判断。


4. 常见问题

现象可能原因
下载失败或数据为空网络、代理,或代码参数有误
列名为多层结构未设置 multi_level_index=False
多次运行结果不一致使用了「截至今日」而非固定 END

上一讲 · 下一讲:每月定投