一句话回答: 肯特纳通道以 EMA 为中轨、上下轨为中轨 ± N 倍 ATR,是基于波动率的价格通道。用 AlphaFeed 取复权日线算出通道,回测「收盘突破上轨买入、跌破中轨卖出」策略(含手续费),几十行就能跑出结果并和买入持有对比——真实数据会告诉你:它和其他突破策略一样,在震荡市会被反复止损、常跑输买入持有。
肯特纳通道和布林带长得像,但内核不同,常被混淆:
肯特纳用 ATR 度量波动,对跳空更稳健。要回测突破策略需解决 EMA/ATR 计算、手续费和对照基准——数据这关用 AlphaFeed 复权日线解决。
from alphafeed import AlphaFeed
import pandas as pd
af = AlphaFeed(api_key="your-api-key") # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()
def keltner_backtest(symbol, count=500, n=20, mult=2.0, fee=0.0013):
df = af.klines.get(symbol, period="1d", count=count,
adjust="forward", to_dataframe=True).sort_values("trade_date").reset_index(drop=True)
mid = df["close"].ewm(span=n, adjust=False).mean() # EMA 中轨
tr = pd.concat([(df["high"] - df["low"]),
(df["high"] - df["close"].shift()).abs(),
(df["low"] - df["close"].shift()).abs()], axis=1).max(axis=1)
atr = tr.ewm(alpha=1 / n, adjust=False).mean() # Wilder ATR
upper = mid + mult * atr # 上轨
pos, cash, shares, trades = 0, 1.0, 0.0, 0
for i in range(n + 1, len(df)):
px = df["close"].iloc[i]
if pos == 0 and px > upper.iloc[i]: # 突破上轨买入
shares = cash * (1 - fee) / px; cash = 0.0; pos = 1; trades += 1
elif pos == 1 and px < mid.iloc[i]: # 跌破中轨卖出
cash = shares * px * (1 - fee); shares = 0.0; pos = 0
equity = cash + shares * df["close"].iloc[-1]
bh = df["close"].iloc[-1] / df["close"].iloc[n + 1]
return {"strategy_ret_%": round((equity - 1) * 100, 1),
"buyhold_ret_%": round((bh - 1) * 100, 1), "trades": trades}策略参数:
参数 | 含义 | 本文取值 |
|---|---|---|
| EMA/ATR 周期 | 20 |
| ATR 倍数(通道宽度) | 2.0 |
入场 | 收盘突破上轨 | 追势买入 |
出场 | 收盘跌破中轨 | 趋势转弱离场 |
| 单边手续费+滑点 | 0.0013(约万 13) |
for s in ["600519.SH", "000001.SZ", "600036.SH"]:
print(s, keltner_backtest(s))实测(约 500 个交易日、含手续费):
标的 | 策略收益 | 买入持有 | 交易次数 | 结论 |
|---|---|---|---|---|
贵州茅台 600519.SH | −30.9% | −22.5% | 9 | 大幅跑输 |
平安银行 000001.SZ | −6.8% | +6.5% | 6 | 跑输 |
招商银行 600036.SH | −7.4% | +18.7% | 8 | 大幅跑输 |
结论很清楚:在这几只标的、这段区间里,肯特纳通道突破因频繁进出被假突破反复止损,明显跑输买入持有。这和唐奇安、布林带突破一样——突破策略的收益高度依赖"是否踩中大趋势"。
Q:肯特纳通道比布林带好吗?
A:没有绝对优劣。肯特纳用 ATR 对跳空更稳健、通道更平滑;布林带对波动放大更敏感。选哪个取决于标的和策略,应各自回测。
Q:为什么突破策略又跑输了?
A:突破策略天然是"多次小亏 + 少数大赚",需要趋势行情兑现少数大赚。样本区间若以震荡为主,就会被假突破持续消耗。
Q:能改成突破上轨买、跌破下轨卖吗?
A:可以,出场用下轨会更"扛"(持仓更久),但回撤也更大。改规则务必重新回测,别凭感觉。
Q:需要付费吗?
A:单只标的 500 根日线在免费额度内即可试;多标的/长历史批量需 Starter 及以上,详见 AlphaFeed 定价页。
回测肯特纳通道突破的价值,在于用真实数据看清基于波动率的突破策略同样不是圣杯:含手续费后它在震荡市被假突破反复止损、常跑输买入持有。AlphaFeed 提供长历史复权日线让你几十行完成回测——但请分清它与布林带的区别、含手续费、避免过拟合,并在多品种带仓位管理下验证。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。