该策略是一个基于考夫曼自适应移动平均线(KAMA)和MACD的趋势跟踪系统。它通过将KAMA作为主要趋势判断指标,结合MACD作为动量确认指标,实现了对市场趋势的智能跟踪和交易时机的精准把握。该策略在4小时时间框架上运行,采用动态止损和获利目标来管理风险。
策略的核心逻辑基于以下几个关键组件: 1. KAMA计算:使用50周期的KAMA作为主要趋势指标,通过效率比率动态调整平滑系数,使移动平均线能够更好地适应市场条件。 2. MACD确认:采用较慢设置(26,52,18)的MACD作为趋势确认工具,确保交易方向与整体动量一致。 3. ATR止损:使用14周期ATR的3倍作为动态止损和获利目标的计算基础。 4. 交易规则: - 做多条件:价格上穿KAMA且MACD处于看涨状态 - 平仓条件:价格下穿KAMA且MACD处于看跌状态 - 风险管理:基于ATR设置动态止损和获利目标
这是一个将经典技术指标KAMA与MACD创新性结合的趋势跟踪策略。通过自适应性移动平均线和动量确认的配合,以及完善的风险管理系统,该策略具有较强的实用性和稳定性。虽然存在一定的滞后性和参数敏感性风险,但通过建议的优化方向可以进一步提升策略的稳健性和盈利能力。
/*backtest
start: 2024-02-20 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mckat
//@version=5
strategy("4-Hour KAMA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === Inputs ===
ama_length = input.int(50, title="KAMA Length for 4H")
fast_length = input.int(3, title="KAMA Fast Length")
slow_length = input.int(30, title="KAMA Slow Length")
atr_length = input.int(14, title="ATR Length")
atr_mult = input.float(3.0, title="ATR Multiplier for Stop-Loss & Take-Profit")
// === KAMA Calculation ===
var float kama = na
price_change = math.abs(close - close[ama_length])
volatility_sum = 0.0
for i = 0 to ama_length - 1
volatility_sum := volatility_sum + math.abs(close[i] - close[i + 1])
efficiency_ratio = price_change / volatility_sum
smoothing_constant = math.pow(efficiency_ratio * (2 / (fast_length + 1) - 2 / (slow_length + 1)) + 2 / (slow_length + 1), 2)
kama := na(kama[1]) ? close : kama[1] + smoothing_constant * (close - kama[1])
// Plot KAMA
plot(kama, color=color.blue, title="KAMA (50)")
// === ATR for Stop-Loss and Take-Profit ===
atr = ta.atr(atr_length)
stop_loss = close - atr * atr_mult
take_profit = close + atr * atr_mult
// === MACD for Momentum Confirmation (Slow Settings for 4H) ===
[macd_line, signal_line, _] = ta.macd(close, 26, 52, 18)
macd_bullish = macd_line > signal_line
macd_bearish = macd_line < signal_line
// === Entry and Exit Conditions ===
buy_condition = ta.crossover(close, kama) and macd_bullish
sell_condition = ta.crossunder(close, kama) and macd_bearish
// === Execute Trades ===
if (buy_condition)
strategy.entry("Buy", strategy.long)
if (sell_condition)
strategy.close("Buy")
// === Dynamic Stop-Loss and Take-Profit ===
strategy.exit("Exit", "Buy", stop=stop_loss, limit=take_profit)
// === Plot Signals ===
plotshape(series=buy_condition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sell_condition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")