Appearance
第 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-01—2026-03-04):

请先观察图像,再回答:
- 在整段样本内,价格总体呈现上涨、下跌,还是先跌后涨(或先涨后跌)?
- 哪一段下跌或上涨最为陡峭?大约对应哪些年份?
- 若采用「每月定额买入」与「第一天一次性买入并持有」,在这种路径下,哪一种更容易占优?为什么?
- 图中所见涨跌,主要反映的是市场本身(Beta),还是某一交易规则的超额能力(Alpha)?
后续「定投」与「买入持有」的对照,将直接依赖对本图路径的判断。
4. 常见问题
| 现象 | 可能原因 |
|---|---|
| 下载失败或数据为空 | 网络、代理,或代码参数有误 |
| 列名为多层结构 | 未设置 multi_level_index=False |
| 多次运行结果不一致 | 使用了「截至今日」而非固定 END |