
你知道吗?市场上90%的交易者都在追涨杀跌,但真正的高手却在寻找”价格真空地带”!这个Advanced FVG Strategy Pro+就是专门捕捉这些神秘缺口的超级武器 🚀
FVG(Fair Value Gap)简单说就是价格跳跃时留下的”空白区域”,就像你走路时跨过水坑一样,总有一天要回来”补坑”。这个策略就是在最佳时机埋伏在”坑边”等鱼上钩!
1. 多时间框架分析 📊 不再局限于单一周期!策略可以在5分钟图上执行,但用1小时的FVG信号,这就像用望远镜看远山,用放大镜看细节,视野更全面!
2. IIR趋势过滤器 🌊
这可不是普通的移动平均线!采用工程级的IIR低通滤波器,能精准识别趋势方向。想象一下,这就像给你的交易装上了”趋势雷达”,只在顺风时出击!
3. 智能风险管理 🛡️ 支持百分比和固定金额两种风险模式,还有防爆仓保护机制。就像开车有安全带和气囊双重保护,让你的账户更安全!
最适合这些情况:
- 震荡行情中寻找突破机会 ⚡
- 趋势行情中的回调入场点 📈
- 重要支撑阻力位附近的精准狙击 🎯
避坑指南: - 重大消息面前暂停使用 - 流动性极差的小币种要谨慎 - 记得根据市场波动调整风险参数
传统策略要么信号太少错过机会,要么信号太多被假突破坑惨。这个策略通过多重过滤机制,做到了”宁缺毋滥”的精准出击!
而且最贴心的是,所有参数都可以自定义调节,就像调音师调音一样,你可以根据不同市场环境”调出”最适合的交易节奏 🎵
记住:好的策略不是让你每天都交易,而是让你在最有把握的时候出手!这就是FVG策略的魅力所在 ✨
/*backtest
start: 2024-09-01 00:00:00
end: 2025-08-31 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Advanced FVG Strategy Pro+ (v6)", overlay=true,
initial_capital=10000,
default_qty_type=strategy.fixed,
default_qty_value=1,
commission_type=strategy.commission.percent,
commission_value=0.05,
calc_on_every_tick=true,
process_orders_on_close=true)
// ---------------- Inputs ----------------
fvg_tf = input.timeframe("", "FVG Timeframe (MTF)")
bodySens = input.float(1.0, "FVG Body Sensitivity", step=0.1, minval=0.0)
mitigate_mid = input.bool(true, "Mitigation on Midpoint")
rr_ratio = input.float(2.0, "Risk/Reward Ratio", step=0.1)
risk_mode = input.string("Percent", "Risk Mode", options=["Percent","Fixed $"])
risk_perc = input.float(1.0, "Risk % (of Equity)", minval=0.1, maxval=10.0)
risk_fixed = input.float(100.0, "Fixed $ Risk", minval=1.0)
useTrend = input.bool(true, "Filter with FVG Trend")
rp = input.float(10.0, "Trend Filter Ripple (dB)", minval=0.1, step=0.1)
fc = input.float(0.1, "Trend Filter Cutoff (0..0.5)", minval=0.01, maxval=0.5, step=0.01)
extendLength = input.int(10, "Extend Boxes (bars)", minval=0)
// ---------------- MTF candles ----------------
c1 = fvg_tf == "" ? close : request.security(syminfo.tickerid, fvg_tf, close, lookahead = barmerge.lookahead_on)
o1 = fvg_tf == "" ? open : request.security(syminfo.tickerid, fvg_tf, open, lookahead = barmerge.lookahead_on)
h1 = fvg_tf == "" ? high : request.security(syminfo.tickerid, fvg_tf, high, lookahead = barmerge.lookahead_on)
l1 = fvg_tf == "" ? low : request.security(syminfo.tickerid, fvg_tf, low, lookahead = barmerge.lookahead_on)
h2 = fvg_tf == "" ? high[2] : request.security(syminfo.tickerid, fvg_tf, high[2], lookahead = barmerge.lookahead_on)
l2 = fvg_tf == "" ? low[2] : request.security(syminfo.tickerid, fvg_tf, low[2], lookahead = barmerge.lookahead_on)
// ---------------- FVG detection ----------------
float wick = math.abs(c1 - o1)
float avg_body = ta.sma(wick, 50)
bool bullFVG = (l1 > h2) and (c1 > h2) and (wick >= avg_body * bodySens)
bool bearFVG = (h1 < l2) and (c1 < l2) and (wick >= avg_body * bodySens)
// ---------------- Trend Filter (IIR low-pass) ----------------
float src = (h1 + l1) / 2.0
float epsilon = math.sqrt(math.pow(10.0, rp/10.0) - 1.0)
float d = math.sqrt(1.0 + epsilon * epsilon)
float c = 1.0 / math.tan(math.pi * fc)
float norm = 1.0 / (1.0 + d * c + c * c)
float b0 = norm
float b1 = 2.0 * norm
float b2 = norm
float a1 = 2.0 * norm * (1.0 - c * c)
float a2 = norm * (1.0 - d * c + c * c)
var float trend = na
var float trend1 = na
var float trend2 = na
trend := bar_index < 2 ? src : (b0 * src + b1 * src[1] + b2 * src[2] - a1 * nz(trend1) - a2 * nz(trend2))
trend2 := trend1
trend1 := trend
bool trendUp = trend > nz(trend[1])
bool trendDown = trend < nz(trend[1])
// ---------------- Strategy Conditions ----------------
bool longCond = bullFVG and (not useTrend or trendUp)
bool shortCond = bearFVG and (not useTrend or trendDown)
// stop loss / take profit (based on MTF gap edges)
float longSL = l1
float shortSL = h1
float longRisk = close - longSL
float shortRisk = shortSL - close
float longTP = close + (close - longSL) * rr_ratio
float shortTP = close - (shortSL - close) * rr_ratio
// ---------------- Position sizing ----------------
float equity = strategy.equity
float riskCash = risk_mode == "Percent" ? (equity * risk_perc / 100.0) : risk_fixed
float longQty = (longRisk > 0.0) ? (riskCash / longRisk) : na
float shortQty = (shortRisk > 0.0) ? (riskCash / shortRisk) : na
// safety cap: avoid ridiculously large position sizes (simple protective cap)
float maxQty = math.max(1.0, (equity / math.max(1e-8, close)) * 0.25) // cap ~25% equity worth of base asset
if not na(longQty)
longQty := math.min(longQty, maxQty)
if not na(shortQty)
shortQty := math.min(shortQty, maxQty)
// small extra guard (do not trade if qty becomes extremely small or NaN)
bool canLong = longCond and not na(longQty) and (longQty > 0.0)
bool canShort = shortCond and not na(shortQty) and (shortQty > 0.0)
// ---------------- Orders ----------------
if canLong
strategy.entry("Long", strategy.long, qty = longQty)
strategy.exit("Long TP/SL", "Long", stop = longSL, limit = longTP)
if canShort
strategy.entry("Short", strategy.short, qty = shortQty)
strategy.exit("Short TP/SL", "Short", stop = shortSL, limit = shortTP)
// ---------------- Visuals ----------------
plotshape(longCond, title="Bull FVG", color=color.new(color.green, 0), style=shape.triangleup, location=location.belowbar, size=size.small)
plotshape(shortCond, title="Bear FVG", color=color.new(color.red, 0), style=shape.triangledown, location=location.abovebar, size=size.small)
plot(useTrend ? trend : na, title="FVG Trend", color=trendUp ? color.lime : trendDown ? color.red : color.gray, linewidth=2)