该策略是一个结合了斐波那契回撤、多重指数移动平均线和成交量的趋势追踪交易系统。策略通过分析价格在不同斐波那契回撤水平(0、0.382、0.618、1)的位置,结合多周期EMA(20/50/100/200)的趋势确认,并通过成交量阈值过滤来识别潜在的交易机会。系统设计了完整的风险管理机制,包括固定百分比的止损和止盈设置。
策略的核心逻辑基于多层级的技术分析方法: 1. 使用30个周期作为回看区间计算斐波那契回撤水平,建立价格运动的支撑阻力框架 2. 通过20/50/100/200周期的指数移动平均线构建多层级趋势确认系统 3. 在价格接近斐波那契0.382水平且成交量大于阈值时,如果价格位于均线之上,触发做多信号 4. 在价格接近斐波那契0.618水平且成交量大于阈值时,如果价格位于均线之下,触发做空信号 5. 设置了基于百分比的止盈止损机制,分别为6%和3%
这是一个设计完善的多层级趋势追踪策略,通过结合经典的技术分析工具构建了一个立体的分析框架。策略的优势在于信号确认的严谨性和风险管理的完整性,但同时也需要注意在震荡市场中的表现。通过建议的优化方向,特别是在动态风险管理和趋势强度量化方面的改进,策略的稳定性和盈利能力有望得到进一步提升。
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("ALD Fib Ema SAKALAM", overlay=true)
// Inputs
lookback = input.int(30, title="Lookback Period for Fibonacci", minval=10)
volumeThreshold = input.float(500000, title="24h Volume Threshold", step=50000)
stopLossPct = input.float(3.0, title="Stop Loss %", minval=0.5)
takeProfitPct = input.float(6.0, title="Take Profit %", minval=1.0)
maLength = input.int(50, title="Trend Filter MA Length", minval=1)
// Moving Average (Trend Filter)
ma = ta.sma(close, maLength)
// High and Low for Fibonacci Levels
var float swingHigh = na
var float swingLow = na
if bar_index > lookback
swingHigh := ta.highest(high, lookback)
swingLow := ta.lowest(low, lookback)
// Fibonacci Levels Calculation
fib0 = swingLow
fib1 = swingHigh
fib382 = swingHigh - 0.382 * (swingHigh - swingLow)
fib618 = swingHigh - 0.618 * (swingHigh - swingLow)
// 24-hour Volume Calculation
volume24h = ta.sma(volume, 24)
// Plot Fibonacci Levels
plot(fib0, title="Fib 0", color=color.new(color.red, 80))
plot(fib382, title="Fib 0.382", color=color.new(color.green, 50))
plot(fib618, title="Fib 0.618", color=color.new(color.blue, 50))
plot(fib1, title="Fib 1", color=color.new(color.red, 80))
plot(ma, title="Trend Filter MA", color=color.orange)
// Entry Condition: Buy Signal
longCondition = (close <= fib382) and (volume24h > volumeThreshold) and (close > ma)
if (longCondition)
strategy.entry("Buy", strategy.long)
label.new(bar_index, low, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white)
// Exit Conditions
takeProfitPrice = strategy.position_avg_price * (1 + takeProfitPct / 100)
stopLossPrice = strategy.position_avg_price * (1 - stopLossPct / 100)
// Place Exit Orders
strategy.exit("Take Profit/Stop Loss", from_entry="Buy", limit=takeProfitPrice, stop=stopLossPrice)
// Add Labels for Exits
if (strategy.position_size > 0)
if (high >= takeProfitPrice)
label.new(bar_index, high, "EXIT (Take Profit)", style=label.style_label_down, color=color.blue, textcolor=color.white)
if (low <= stopLossPrice)
label.new(bar_index, low, "EXIT (Stop Loss)", style=label.style_label_down, color=color.red, textcolor=color.white)
// Short Selling Conditions
shortCondition = (close >= fib618) and (volume24h > volumeThreshold) and (close < ma)
if (shortCondition)
strategy.entry("Sell", strategy.short)
label.new(bar_index, high, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white)
// Short Exit Conditions
if (strategy.position_size < 0)
strategy.exit("Short Take Profit/Stop Loss", from_entry="Sell", limit=strategy.position_avg_price * (1 - takeProfitPct / 100), stop=strategy.position_avg_price * (1 + stopLossPct / 100))
// Add EMA 20/50/100/200
shortest = ta.ema(close, 20)
short = ta.ema(close, 50)
longer = ta.ema(close, 100)
longest = ta.ema(close, 200)
plot(shortest, color=color.orange, title="EMA 20")
plot(short, color=color.red, title="EMA 50")
plot(longer, color=color.black, title="EMA 100")
plot(longest, color=color.green, title="EMA 200")