一句话回答: 你不需要单独找"周线数据源"——用 AlphaFeed 取一份复权日线,用 pandas 的 resample("W-FRI") 按"开=首日开、高=区间最高、低=区间最低、收=末日收、量=求和"聚合,就能得到与行情软件一致的周线;再在日线和周线上分别算均线,判断两个周期是否**同向共振**,几行代码搞定多周期分析。
为什么会有这个问题 / 传统做法的痛点
很多人做"周线级别选股/多周期共振"时会去找专门的周线接口,其实:
- 周线/月线本质是日线的重采样,没必要单独取;关键是聚合规则要对(OHLCV 各有各的聚法,不能一律取平均);
- 免费数据源的周线经常周期锚点混乱(有的按自然周、有的按交易周),导致和券商软件对不上;
- 复权必须在合成之前处理:先拿前复权日线再 resample,否则周线里混入除权跳空。
用 AlphaFeed 拿前复权日线 + 标准 resample,一次性把口径统一。
分步骤解决(每步配可运行代码)
第 1 步:取复权日线
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key") # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()
d = af.klines.get("600519.SH", period="1d", count=500,
adjust="forward", to_dataframe=True)
d = d.sort_values("trade_date").reset_index(drop=True)
日线 DataFrame 列:symbol, name, timestamp, trade_date, trade_time, open, high, low, close, volume, amount。
第 2 步:按正确的聚合规则合成周线
import pandas as pd
def resample_weekly(df):
df = df.sort_values("trade_date").copy()
df["dt"] = pd.to_datetime(df["trade_date"])
df = df.set_index("dt")
agg = {"open": "first", "high": "max", "low": "min",
"close": "last", "volume": "sum", "amount": "sum"}
wk = df.resample("W-FRI").agg(agg).dropna(subset=["close"])
return wk
wk = resample_weekly(d)
print(len(wk), "根周线") # 例如 500 根日线 → 107 根周线
OHLCV 的聚合规则(记住这张表就不会错):
| 字段 | 聚合方式 | 原因 |
|---|---|---|
open |
first |
一周的开盘=周一开盘 |
high |
max |
一周最高=区间最高 |
low |
min |
一周最低=区间最低 |
close |
last |
一周收盘=周五收盘 |
volume |
sum |
成交量累加 |
amount |
sum |
成交额累加 |
W-FRI表示以周五为一周锚点(A 股一周最后交易日通常是周五),与主流行情软件的周线对齐。合成月线改成resample("ME")(月末)即可,规则同上。
第 3 步:多周期共振判断(日线 + 周线同向才做多)
def multi_tf_resonance(symbol, count=500, win=20):
d = af.klines.get(symbol, period="1d", count=count,
adjust="forward", to_dataframe=True)
wk = resample_weekly(d)
d = d.sort_values("trade_date").reset_index(drop=True)
d["ma"] = d["close"].rolling(win).mean()
wk["ma"] = wk["close"].rolling(win).mean()
daily_up = bool(d["close"].iloc[-1] > d["ma"].iloc[-1]) # 日线在均线上方
weekly_up = bool(wk["close"].iloc[-1] > wk["ma"].iloc[-1]) # 周线在均线上方
return {
"daily_above_ma": daily_up,
"weekly_above_ma": weekly_up,
"resonance_long": daily_up and weekly_up, # 两周期共振向上
}
print(multi_tf_resonance("600519.SH"))
# {'daily_above_ma': False, 'weekly_above_ma': True, 'resonance_long': False}
"共振"的思路:大周期(周线)定方向,小周期(日线)找时机。只有当周线在均线上方(中期趋势向上)、日线也站上均线时才视为多头共振,能过滤掉大量逆势的日线假突破。
关键坑与注意事项
- 先复权再合成:一定在日线阶段用
adjust="forward",再 resample。顺序反了周线会混入除权跳空。 - 聚合规则别用平均:OHLC 各有聚法,
volume/amount求和;用mean会得到毫无意义的"平均价周线"。 - 周期锚点:
W-FRI对齐 A 股周五收盘。跨市场(美股/港股)交易日不同,锚点一致但节假日会让某些"周"只有 3~4 个交易日,属正常。 - 最新一根未收官:本周还没走完时,最后一根周线是"进行中"的,会随日线更新而变,做信号时注意是否要剔除未收官周。
- 样本长度:算 20 周均线至少要 20 根周线(≈100 个交易日),
count给足(本文 500)。
常见问题(FAQ)
Q:AlphaFeed 有直接的周线/月线接口吗?
A:最稳妥、口径最可控的做法就是取日线自己 resample——聚合规则透明、可复现,还能顺带做月线、季线。
Q:为什么我合成的周线和同花顺/东财对不上?
A:先查复权口径(是否都用前复权),再查锚点(是否都按周五)。这两点统一后基本就一致了。
Q:多周期共振能直接当买卖信号吗?
A:它是过滤器而非完整策略,用来剔除逆势交易。要落地仍需加入场规则、止损与手续费假设,并做防未来函数的回测。
Q:需要付费吗?
A:单只标的的日线在免费额度内即可试跑;批量/全市场取数需 Starter 及以上,详见 AlphaFeed 定价页。
小结
多周期分析的本质是"用同一份复权日线,重采样出不同周期,再看它们是否同向"。你不需要额外的周线数据源,只需要记住正确的 OHLCV 聚合规则和周期锚点。AlphaFeed 提供口径一致的复权日线,剩下的用 pandas 几行就能把周线、月线和共振信号都算出来。
参考
- AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart

