从价格 K 线读懂一个交易日
日 K 线用五个数字概括整个交易时段:开盘价、最高价、最低价、收盘价和成交量。由此可以还原一天的故事:价格隔夜移动了多少(昨日收盘与今日开盘之间的跳空)、当日波动区间有多宽,以及成交量是否异常。这些计算每一个都只是对表格整列的一行运算。
import pandas as pd
bars = pd.read_csv("data/AAPL.csv", index_col="date", parse_dates=True)
prev_close = bars["close"].shift(1) # yesterday's close, lined up with today's row
gap = bars["open"] / prev_close - 1 # the overnight gap判断今天的成交量是否异常时,只能与今天之前的交易日比较。单独使用 rolling(20).mean() 会把今天也算进去,让这一天部分地与自己比较;先调用 shift(1) 就把窗口向前移了一天。使用被判断当天的信息就是前视偏差(look-ahead),是回测最常见的“骗人”方式。
把故事展示出来
qc_chart 辅助函数把 K 线数据变成交互式图表。传入若干系列的列表(K 线、折线、柱状图)和可选的标记,图表会显示在“图表”标签中;测试读取的是你传入的数据,而不是图片。
import qc_chart
qc_chart.show(
[qc_chart.candles(recent, name="Price"), qc_chart.line(average, name="20-day average")],
markers=qc_chart.markers({"2026-05-12": "+4.1%"}),
)这份数据隐藏了什么价格已按拆股和分红复权,所以没有未复权的原始收盘价,拆股也不会表现为跳空。文件里只有仍然存在的公司,已退市的公司缺失;日 K 线还隐藏了交易时段内部发生的事,包括开盘和收盘竞价。大幅跳空是需要追查的线索(财报、新闻),而不是结论。
实验:评分内容
- 每日特征25 分
- 最大的跳空25 分
- 不含前视偏差的成交量激增25 分
- 绘制图表25 分