趋势河流回调策略

EMA RSI ATR CHANDELIER
创建日期: 2025-09-05 09:02:58 最后修改: 2025-09-05 09:02:58
复制: 0 点击次数: 274
avatar of ianzeng123 ianzeng123
2
关注
319
关注者

趋势河流回调策略 趋势河流回调策略

🌊 什么是”趋势河流”?这个比喻太绝了!

你知道吗?这个策略把5条EMA均线想象成一条”河流”!就像真正的河流有河床、河面一样,当5条均线排列整齐时,它们之间形成的区域就是我们的”趋势河流”。划重点!当河流方向明确时(多头:快线在上,空头:快线在下),就是我们的赚钱机会来了!

这就像看水流方向一样简单 - 河水往哪流,我们就往哪赚💰

🎯 核心策略:等鱼儿游回河里再下网

这个策略最聪明的地方在哪?它不会在价格疯涨时追高,而是耐心等待”回调”!

具体怎么操作? - 多头信号:趋势向上 + RSI≥60 + 价格回调到河流40%深度 + 重新突破快速EMA - 空头信号:趋势向下 + RSI≤40 + 价格反弹到河流40%高度 + 重新跌破快速EMA

就像钓鱼一样,不是鱼跳得最高时下钩,而是等它游回熟悉的水域!🎣

💡 风险管理:每次只拿1%本金冒险

避坑指南来了!这个策略最贴心的地方是自动计算仓位大小: - 每笔交易风险控制在本金的1% - 用ATR指标设置止损(2倍ATR) - 盈亏比设置为2:1(赚2块才冒险亏1块) - 还有钱德勒追踪止损保护利润

这就像开车系安全带 - 不是因为要出事故,而是为了安心享受驾驶乐趣!🚗

🚀 为什么这个策略值得关注?

解决了交易者的三大痛点: 1. 追涨杀跌:等回调再进场,避免高位接盘 2. 不知道买多少:自动计算仓位,风险可控 3. 不知道何时跑:有止损有止盈,还有追踪止损

这个策略特别适合那些想要”稳中求胜”的交易者。它不追求一夜暴富,但能帮你在趋势中稳稳赚钱!记住:在交易的河流中,最重要的不是游得最快,而是游得最稳 🏊‍♀️

||

🌊 What is “Trend River”? This Analogy is Brilliant!

You know what? This strategy imagines 5 EMA lines as a “river”! Just like a real river has riverbed and surface, when 5 EMAs align properly, the area between them forms our “trend river”. Key point! When the river direction is clear (bullish: fast line above, bearish: fast line below), that’s when our money-making opportunities arrive!

It’s as simple as watching water flow direction - wherever the river flows, that’s where we profit! 💰

🎯 Core Strategy: Wait for Fish to Return Before Casting the Net

What’s the smartest part of this strategy? It doesn’t chase prices during rallies, but patiently waits for “pullbacks”!

How does it work exactly? - Long signal: Uptrend + RSI≥60 + Price pulls back to 40% river depth + Re-breaks above fast EMA - Short signal: Downtrend + RSI≤40 + Price bounces to 40% river height + Re-breaks below fast EMA

It’s like fishing - you don’t cast when fish jump highest, but wait for them to return to familiar waters! 🎣

💡 Risk Management: Only Risk 1% Capital Each Time

Here’s the pitfall guide! The most thoughtful part of this strategy is automatic position sizing: - Each trade risks only 1% of capital - Uses ATR indicator for stop loss (2x ATR) - Risk-reward ratio set at 2:1 (earn 2 to risk 1) - Plus Chandelier trailing stop to protect profits

It’s like wearing a seatbelt while driving - not because you expect an accident, but to enjoy the ride with peace of mind! 🚗

🚀 Why is This Strategy Worth Attention?

Solves three major trader pain points: 1. FOMO trading: Wait for pullbacks instead of buying tops 2. Position sizing confusion: Auto-calculates position size with controlled risk 3. Exit uncertainty: Has stop loss, take profit, and trailing stop

This strategy is perfect for traders who want “steady wins”. It doesn’t promise overnight riches, but helps you profit steadily in trends! Remember: In the river of trading, the most important thing isn’t swimming fastest, but swimming most steadily 🏊‍♀️

[/trans]

策略源码
/*backtest
start: 2025-01-20 08:00:00
end: 2025-09-03 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy("Trend River Pullback Strategy v1", 
     overlay=true, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.02, 
     pyramiding=0, calc_on_order_fills=true, calc_on_every_tick=true, margin_long=1, margin_short=1)
// ===== Inputs
// EMA river
emaFastLen   = input.int(8,   "EMA1 (fast)")
ema2Len      = input.int(13,  "EMA2")
emaMidLen    = input.int(21,  "EMA3 (middle)")
ema4Len      = input.int(34,  "EMA4")
emaSlowLen   = input.int(55,  "EMA5 (slow)")
// Pullback and momentum
rsiLen       = input.int(14, "RSI length")
rsiOB        = input.int(60, "RSI trend threshold (long)")
rsiOS        = input.int(40, "RSI trend threshold (short)")
pullbackPct  = input.float(40.0, "Pullback depth % of river width", minval=0, maxval=100)
// Risk management
riskPct      = input.float(1.0, "Risk per trade % of capital", step=0.1, minval=0.1)
atrLen       = input.int(14, "ATR length (stop/trailing)")
atrMultSL    = input.float(2.0, "ATR multiplier for stop", step=0.1)
tpRR         = input.float(2.0, "Take profit R-multiple", step=0.1)
// Trailing stop
useTrail     = input.bool(true, "Enable trailing stop (Chandelier)")
trailMult    = input.float(3.0, "ATR multiplier for trailing", step=0.1)
// ===== Calculations
ema1  = ta.ema(close, emaFastLen)
ema2  = ta.ema(close, ema2Len)
ema3  = ta.ema(close, emaMidLen)
ema4  = ta.ema(close, ema4Len)
ema5  = ta.ema(close, emaSlowLen)
// River: top/bottom as envelope of averages
riverTop = math.max(math.max(ema1, ema2), math.max(ema3, math.max(ema4, ema5)))
riverBot = math.min(math.min(ema1, ema2), math.min(ema3, math.min(ema4, ema5)))
riverMid = (riverTop + riverBot) / 2.0
riverWidth = riverTop - riverBot
// Trend conditions: EMA alignment
bullAligned = ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5
bearAligned = ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5
// Momentum
rsi = ta.rsi(close, rsiLen)
// Pullback into river
pullbackLevelBull = riverTop - riverWidth * (pullbackPct/100.0)
pullbackLevelBear = riverBot + riverWidth * (pullbackPct/100.0)
pullbackOkBull = bullAligned and rsi >= rsiOB and low <= pullbackLevelBull
pullbackOkBear = bearAligned and rsi <= rsiOS and high >= pullbackLevelBear
// Entry trigger: return to momentum (fast EMA crossover)
longTrig  = pullbackOkBull and ta.crossover(close, ema1)
shortTrig = pullbackOkBear and ta.crossunder(close, ema1)
// ATR for stops
atr = ta.atr(atrLen)
// ===== Position sizing by risk
capital   = strategy.equity
riskMoney = capital * (riskPct/100.0)
// Preliminary stop levels
longSL  = close - atrMultSL * atr
shortSL = close + atrMultSL * atr
// Tick value and size
tickValue = syminfo.pointvalue
// Avoid division by zero
slDistLong  = math.max(close - longSL, syminfo.mintick)
slDistShort = math.max(shortSL - close, syminfo.mintick)
// Number of contracts/lots
qtyLong  = riskMoney / (slDistLong * tickValue)
qtyShort = riskMoney / (slDistShort * tickValue)
// Limit: not less than 0
qtyLong  := math.max(qtyLong, 0)
qtyShort := math.max(qtyShort, 0)
// ===== Entries
if longTrig and strategy.position_size <= 0
    strategy.entry("Long", strategy.long, qty=qtyLong)
if shortTrig and strategy.position_size >= 0
    strategy.entry("Short", strategy.short, qty=qtyShort)
// ===== Exits: fixed TP by R and stop
// Store entry price
var float entryPrice = na
if strategy.position_size != 0 and na(entryPrice)
    entryPrice := strategy.position_avg_price
if strategy.position_size == 0
    entryPrice := na
// Targets
longTP  = na(entryPrice) ? na : entryPrice + tpRR * (entryPrice - longSL)
shortTP = na(entryPrice) ? na : entryPrice - tpRR * (shortSL - entryPrice)
// Trailing: Chandelier
trailLong  = close - trailMult * atr
trailShort = close + trailMult * atr
// Final exit levels
useTrailLong  = useTrail and strategy.position_size > 0
useTrailShort = useTrail and strategy.position_size < 0
// For long
if strategy.position_size > 0
    stopL = math.max(longSL, na)
    tStop = useTrailLong ? trailLong : longSL
    strategy.exit("L-Exit", from_entry="Long", stop=tStop, limit=longTP)
// For short
if strategy.position_size < 0
    stopS = math.min(shortSL, na)
    tStopS = useTrailShort ? trailShort : shortSL
    strategy.exit("S-Exit", from_entry="Short", stop=tStopS, limit=shortTP)
// ===== Visuals
plot(ema1,  "EMA1",  display=display.all, linewidth=1)
plot(ema2,  "EMA2",  display=display.all, linewidth=1)
plot(ema3,  "EMA3",  display=display.all, linewidth=2)
plot(ema4,  "EMA4",  display=display.all, linewidth=1)
plot(ema5,  "EMA5",  display=display.all, linewidth=1)
plot(riverTop, "River Top",  style=plot.style_linebr, linewidth=1)
plot(riverBot, "River Bot",  style=plot.style_linebr, linewidth=1)
fill(plot1=plot(riverTop,  display=display.none), plot2=plot(riverBot, display=display.none), title="River Fill", transp=80)
plot(longTP,  "Long TP",  style=plot.style_linebr)
plot(shortTP, "Short TP", style=plot.style_linebr)
plot(useTrailLong  ? trailLong  : na, "Trail Long",  style=plot.style_linebr)
plot(useTrailShort ? trailShort : na, "Trail Short", style=plot.style_linebr)
// Signal markers
plotshape(longTrig,  title="Long Trigger",  style=shape.triangleup,   location=location.belowbar, size=size.tiny, text="L")
plotshape(shortTrig, title="Short Trigger", style=shape.triangledown, location=location.abovebar, size=size.tiny, text="S")
// ===== Alerts
alertcondition(longTrig,  title="Long Signal",  message="Long signal: trend aligned + pullback + momentum")
alertcondition(shortTrig, title="Short Signal", message="Short signal: trend aligned + pullback + momentum")
相关推荐