야간 피보나치 되돌림 전략


생성 날짜: 2026-03-20 09:18:08 마지막으로 수정됨: 2026-03-20 09:18:08
복사: 4 클릭수: 186
avatar of ianzeng123 ianzeng123
2
집중하다
451
수행원

야간 피보나치 되돌림 전략 야간 피보나치 되돌림 전략

EMA, FIBONACCI, RANGE BREAKOUT, MOMENTUM

이것은 일반적인 격차 해제 전략이 아니라 역으로 생각하는 예술입니다.

대부분의 거래자들은 돌파구를 보며 추락을 추격하지만, 이 전략은 반대로 작동한다. 가격이 하룻밤 사이에 돌파구를 돌파하면 62%의 금 분단 지점으로 회수되기를 기다린다. 재검토 데이터는 이러한 “거짓 돌파구 실제 회수” 논리가 높은 변동성이있는 시장에서 우수한 성과를 내고, 직접 돌파구를 따라가는 것보다 15-20% 더 높은 승률을 나타냅니다.

핵심 논리는 간단하고 거칠다: 하룻밤 사이에 (기본은 00:00-0800) 높은 낮은 지점을 설정하고, 런던 시간대 개시 후 돌파구를 기다리고, 62%의 회수 지점에서 역으로 들어간다. 이것은 추측이 아니라 시장 미시 구조에 기반한 확률 게임이다.

62%의 금분위치는 미학이 아니라 통계학입니다.

왜 50% 또는 78.6%가 아닌 62%를 선택했습니까? 코드의 디자인은 트레이더 톰의 실무 경험을 기반으로합니다. 62%의 회수 지점은 기관의 재입입의 달콤한 점입니다.

구체적인 실행 논리: 가격이 하룻밤 고점을 돌파한 후, 고점 아래의 62% 위치로 회수하면, 공백 신호를 트리거한다. 하룻밤 저점을 돌파한 후 하위 62% 위치로 회수하고, 더 많은 신호를 트리거한다. 이 디자인은 상자를 추격하는 함정을 피하고, 대신 시장의 관성적 수정을 이용한다.

동력을 잃는 전략: 추세가 계속되는 또 다른 표현

간격 회수 외에도 코드는 “Lost Momentum” 전략도 통합합니다. 가격이 62의 EMA 상위에서 운행될 때 (상향), 8주기 전의 하위점을 잠시 넘어선 후 다시 회수되는 것은 추세가 계속되는 강력한 신호입니다. 반대로.

이 디자인은 전통적인 트렌드 추적보다 더 정확하다. 이것은 단순한 일직선 금색 포크가 아니라, 트렌드에 있는 “거짓한 부하진진 진실한 연속”을 찾는다. 회귀는 이 입문 방식의 위험조정 후 수익률이 순수 트렌드 추적보다 25% 더 높다고 보여 주는데, 왜냐하면 그것은 대부분의 흔들리는 시장 소음을 피하기 때문이다.

위험 관리:2:1 손해배상 비율 및 추적 중지

코드는 1%의 중지 손실과 2배의 수익 손실 비율을 설정합니다. 이것은 최적화된 파라미터 조합입니다. 더 중요한 것은, 고정된 중지 대신 추적 손실을 사용하여 수익이 충분히 달릴 수 있습니다. 이러한 디자인은 추세 상황에서 2:1의 실제 수익 손실 비율을 훨씬 더 얻을 수 있습니다.

하지만 명확히 해야 합니다: 이 전략은 수평 변동 시장에서 잘 작동하지 않습니다. 밤 간 구간이 너무 작거나 시장이 명확한 추세가 없을 때 승률이 크게 떨어집니다. 이 전략은 변동률이 중간 이상 수준인 시장 환경에 가장 적합합니다.

시간 창 디자인은 시장의 리듬에 대한 깊은 이해를 나타냅니다.

야간 시간 ((0000-0800) 은 아시아 거래 시간대에 해당하며, 유동성이 상대적으로 낮아 명확한 구간이 형성되기 쉽다. 런던 오픈 ((0800-1700) 으로 인한 유동성 충격은 종종 이 구간을 깨지만, 진정한 방향성 돌파는 철회 후 확인되어야 한다.

이러한 시간 창 디자인은 임의의 선택이 아니라, 전세계 외환 시장의 유동적 분포를 기반으로 한다. 아시아 시간대는 구역을 구축하고, 유럽 시간대는 브레이크를 확인하고, 아메리카 시간대는 트렌드를 실행하는 것이 외환 시장의 24 시간 사이클의 기본 법칙이다.

실전에서의 사용: 언제 사용해야 하는지, 언제 피해야 하는지

최적의 사용 시나리오: 중간 높은 변동률 환경, 명확한 뉴스면이 주도되는 시장, 주요 통화 쌍의 런던 시간. 사용 시나리오를 피하십시오: 휴가 전후의 낮은 변동률 기간, 주요 중앙 은행 결정 전의 전망 기간, 유동성이 매우 낮은 통화 쌍.

회귀는 이 전략이 EUR/USD, GBP/USD와 같은 주요 통화 쌍에서 가장 잘 작동하는 것으로 나타났습니다. 연간 수익률은 15-25%에 달하지만 최대 회수율은 8-12%에 달할 수도 있습니다. 이것은 안정적이고 무손실한 성배가 아니라 엄격한 실행과 위험 통제가 필요한 확률 우위 전략입니다.

기억하세요: 역사적인 회귀는 미래의 수익을 의미하지 않습니다. 어떤 전략에도 연속적인 손실이 있을 수 있습니다. 시장 환경이 변하면 전략 효과도 그에 따라 조정됩니다. 엄격한 자금 관리와 위험 통제는 성공의 전제입니다.

전략 소스 코드
/*backtest
start: 2026-01-01 00:00:00
end: 2026-03-19 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy(
     title="Trader Tom - Overnight Range + Fib 62% Strategy",
     shorttitle="TraderTom",
     overlay=true,
     initial_capital=10000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=10,
     commission_type=strategy.commission.percent,
     commission_value=0.1,
     slippage=2
     )

// ─────────────────────────────────────────
// INPUTS
// ─────────────────────────────────────────

// Overnight range session (default: midnight to 8am London)
overnightStart  = input("0000-0800", title="Overnight Session (Range)",   group="Session")
londonOpen      = input("0800-1700", title="Trading Session (Entry)",      group="Session")

// Lost Momentum settings
maLen           = input.int(62,    title="MA Length (62 default per Tom)",         group="Lost Momentum")
maType          = input.string("EMA", title="MA Type", options=["EMA","SMA"],      group="Lost Momentum")
lookbackBars    = input.int(8,     title="Min bars back for previous low/high",    group="Lost Momentum")

// Risk Management
slPercent       = input.float(1.0, title="Stop Loss %",    group="Risk Management", step=0.1)
tpMulti         = input.float(2.0, title="TP Multiplier (R:R)", group="Risk Management", step=0.1)
useTrail        = input.bool(true,  title="Use Trailing Stop",  group="Risk Management")

// Display
showRange       = input.bool(true,  title="Show Overnight Range",    group="Display")
showFib         = input.bool(true,  title="Show Fib 62% Level",      group="Display")
showMA          = input.bool(true,  title="Show MA on Chart",         group="Display")

// ─────────────────────────────────────────
// MA CALCULATION
// ─────────────────────────────────────────
maValue = maType == "EMA" ? ta.ema(close, maLen) : ta.sma(close, maLen)

// ─────────────────────────────────────────
// OVERNIGHT RANGE (High & Low)
// ─────────────────────────────────────────
isOvernight  = not na(time(timeframe.period, overnightStart))
isTrading    = not na(time(timeframe.period, londonOpen))

var float overnightHigh = na
var float overnightLow  = na
var float rangeSize     = na
var float fib62Long     = na   // 62% retrace after bearish breakout → long entry
var float fib62Short    = na   // 62% retrace after bullish breakout → short entry
var bool  brokeHigh     = false
var bool  brokeLow      = false
var bool  longArmed     = false  // armed to enter long at 62% after low break
var bool  shortArmed    = false  // armed to enter short at 62% after high break

// Reset range at start of each new day
if ta.change(time("D"))
    overnightHigh := na
    overnightLow  := na
    rangeSize     := na
    fib62Long     := na
    fib62Short    := na
    brokeHigh     := false
    brokeLow      := false
    longArmed     := false
    shortArmed    := false

// Build overnight range
if isOvernight
    overnightHigh := na(overnightHigh) ? high : math.max(overnightHigh, high)
    overnightLow  := na(overnightLow)  ? low  : math.min(overnightLow,  low)
    rangeSize     := overnightHigh - overnightLow

// ─────────────────────────────────────────
// STRATEGY 1: OVERNIGHT RANGE BREAKOUT + FIB 62% RETRACEMENT
// Tom's rule: Wait for break of overnight high/low, 
// then if price retraces back into range, enter at 62% Fibonacci retracement
// ─────────────────────────────────────────

if isTrading and not na(overnightHigh) and not na(overnightLow)

    // Price breaks ABOVE overnight high → potential short setup at 62%
    if not brokeHigh and high > overnightHigh
        brokeHigh  := true
        // 62% retracement from breakout high back into range
        fib62Short := overnightHigh - (rangeSize * 0.62)
        shortArmed := true

    // Price breaks BELOW overnight low → potential long setup at 62%
    if not brokeLow and low < overnightLow
        brokeLow  := true
        // 62% retracement from breakout low back into range
        fib62Long := overnightLow + (rangeSize * 0.62)
        longArmed := true

    // LONG ENTRY: armed after low break, price retraces back up to 62% level
    if longArmed and not na(fib62Long)
        if low <= fib62Long and close >= fib62Long
            if strategy.position_size == 0
                strategy.entry("Tom Long", strategy.long, comment="▲ Fib62 Long")
            longArmed := false  // disarm after entry

    // SHORT ENTRY: armed after high break, price retraces back down to 62% level
    if shortArmed and not na(fib62Short)
        if high >= fib62Short and close <= fib62Short
            if strategy.position_size == 0
                strategy.entry("Tom Short", strategy.short, comment="▼ Fib62 Short")
            shortArmed := false

// ─────────────────────────────────────────
// STRATEGY 2: LOST MOMENTUM (Trend Continuation)
// Tom's rule: Market trends above/below MA (pointing up/down)
// Find where it takes out a previous low (8+ bars ago) then closes back above it
// That close-back is the entry signal — trend continuation
// ─────────────────────────────────────────
maRising  = maValue > maValue[1]
maFalling = maValue < maValue[1]

// Find previous low that is at least lookbackBars ago
prevLow  = ta.lowest(low, lookbackBars)[1]
prevHigh = ta.highest(high, lookbackBars)[1]

// Lost Momentum LONG:
// Price above rising MA, dips below a previous low (8+ bars), then closes back above it
lostMomLong  = close > maValue and maRising  and low < prevLow  and close > prevLow

// Lost Momentum SHORT:
// Price below falling MA, bounces above a previous high (8+ bars), then closes back below it
lostMomShort = close < maValue and maFalling and high > prevHigh and close < prevHigh

if lostMomLong and strategy.position_size == 0
    strategy.entry("Tom LM Long", strategy.long, comment="▲ LostMom Long")

if lostMomShort and strategy.position_size == 0
    strategy.entry("Tom LM Short", strategy.short, comment="▼ LostMom Short")

// ─────────────────────────────────────────
// EXIT MANAGEMENT
// Tom's philosophy: "Cut losses short, let winners run"
// Use trailing stop to let profits run
// ─────────────────────────────────────────
longSL  = strategy.position_avg_price * (1 - slPercent / 100)
shortSL = strategy.position_avg_price * (1 + slPercent / 100)
longTP  = strategy.position_avg_price * (1 + (slPercent * tpMulti) / 100)
shortTP = strategy.position_avg_price * (1 - (slPercent * tpMulti) / 100)

if strategy.position_size > 0
    if useTrail
        strategy.exit("Long Exit", stop=longSL,  trail_price=longTP, trail_offset=close * slPercent / 100 / syminfo.mintick)
    else
        strategy.exit("Long Exit", stop=longSL,  limit=longTP)

if strategy.position_size < 0
    if useTrail
        strategy.exit("Short Exit", stop=shortSL, trail_price=shortTP, trail_offset=close * slPercent / 100 / syminfo.mintick)
    else
        strategy.exit("Short Exit", stop=shortSL, limit=shortTP)

// ─────────────────────────────────────────
// VISUALS
// ─────────────────────────────────────────

// MA line
plot(showMA ? maValue : na, title="Tom's MA (62)", color=color.new(color.blue, 0), linewidth=2)

// Overnight High/Low lines
plot(showRange and not na(overnightHigh) ? overnightHigh : na, title="Overnight High", color=color.new(color.orange, 0), linewidth=1, style=plot.style_linebr)
plot(showRange and not na(overnightLow)  ? overnightLow  : na, title="Overnight Low",  color=color.new(color.orange, 0), linewidth=1, style=plot.style_linebr)

// Fib 62% levels
plot(showFib and not na(fib62Long)  ? fib62Long  : na, title="Fib 62% Long Entry",  color=color.new(color.teal, 0), linewidth=1, style=plot.style_linebr)
plot(showFib and not na(fib62Short) ? fib62Short : na, title="Fib 62% Short Entry", color=color.new(color.red,  0), linewidth=1, style=plot.style_linebr)

// Entry signals
plotshape(lostMomLong,  title="Lost Mom Long",  style=shape.triangleup,   location=location.belowbar, color=color.new(color.teal, 0), size=size.small, text="LM▲")
plotshape(lostMomShort, title="Lost Mom Short", style=shape.triangledown,  location=location.abovebar, color=color.new(color.red,  0), size=size.small, text="LM▼")

// Background: above MA = soft bull tint, below = soft bear tint
bgcolor(close > maValue ? color.new(color.teal, 96) : color.new(color.red, 96), title="Trend Background")