윌리엄스 인사이드 데이 브레이크아웃 전략

INSIDE DAY BREAKOUT STOP LOSS FPO
생성 날짜: 2025-10-11 16:55:28 마지막으로 수정됨: 2025-10-11 16:55:28
복사: 0 클릭수: 212
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

윌리엄스 인사이드 데이 브레이크아웃 전략 윌리엄스 인사이드 데이 브레이크아웃 전략

, 이 전략이 무슨 짓을 하고 있는 걸까요?

이 전략은 주식시장에서 ‘고양이와 고양이를 숨기다’ 하는 것과 같습니다. 시장이 ‘내장일’을 맞이했을 때 (오늘의 변동이 어제의 변동으로 완전히 덮여있다는 뜻) 마치 시장이 대박을 치고 큰 폭파를 준비하는 것과 같습니다.

이 전략은 특히 월요일, 목요일, 금요일의 금 거래 날에 “잡을 수 없는” 돌파구를 포착하기 위해 고안되었습니다.

🔍 정책의 핵심 논리는 매우 간단합니다.

시장은 압축된 스프링처럼 상상해 보세요.

  • 어제는 내포된 날이었다.
  • 전날은 정말 좋은 날이었습니다. (너무 흥분했어요.)
  • 오늘 개시 가격은 핵심 저항점보다 낮습니다.

가격 상승이 지난 3주기의 최고점을 넘어서면, 레퍼런스가 풀리는 것처럼, 전략은 즉시 더 많은 것을 얻습니다!

리스크 관리: 두 가지 안전장치

첫 번째 로크: 고정 손실 “지상 상쇄”를 선택할 수 있고, “지상 상쇄”를 선택할 수 있고, “지상 상쇄”를 선택할 수 있습니다.

두 번째 잠금: FPO 탈퇴 이 곳은 가장 똑똑한 곳이다! 어느날 상장하면 수익이 있고, 곧바로 수익을 얻는다. 이것은 마치 “잘 봐서 받아라”라는 지혜와 같으며, 시장이 후회할 때까지 기다리지 않는다!✨

왜 특정 거래일을 선택했나요?

월요일, 목요일, 금요일만 거래하는 전략입니다.

  • 월요일: 새로운 주간의 방향을 정함
  • 목요일: 중요한 자료 발표
  • 금요일: 재무 전환일

화요일과 수요일은 평평한 날들이고, 이야기만 있는 날들을 선택하세요!

이 전략은 누구에게 적합할까요?

만약 당신이 하루종일 손해를 보는 것을 싫어하는 ‘빠른 진출’을 좋아하는 거래자라면, 이 전략은 당신을 위해 만들어졌습니다! 명확한 입문 신호와 명확한 스톱로즈 규칙, 그리고 똑똑한 이윤의 퇴출 메커니즘이 있습니다.

기억하세요: 시장은 스프링과 같습니다. 눌러주면 눌러주면 눌러주죠.

전략 소스 코드
/*backtest
start: 2025-01-01 00:00:00
end: 2025-10-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT","balance":500000}]
*/

//@version=5
strategy("Larry Williams Bonus Track Pattern", overlay=true)

//──────────────────────────────────
// Inputs
//──────────────────────────────────
useDayFilter = input.bool(true, "Trade only Mon/Thu/Fri")
sl_type      = input.string("Points", "Stop Loss Type", options=["Points","Percent"])
sl_value     = input.float(1.0, "Stop Loss Value (points or %)", step=0.1, minval=0.0)
debugPlot    = input.bool(false, "Show Levels")

//──────────────────────────────────
// DAILY SERIES for SIGNAL
//──────────────────────────────────
hD = request.security(syminfo.tickerid, "D", high,  lookahead=barmerge.lookahead_off)
lD = request.security(syminfo.tickerid, "D", low,   lookahead=barmerge.lookahead_off)
oD = request.security(syminfo.tickerid, "D", open,  lookahead=barmerge.lookahead_off)
cD = request.security(syminfo.tickerid, "D", close, lookahead=barmerge.lookahead_off)

// Inside bar (yesterday) and prior bar (two days ago) is bullish
inside_prev         = hD[1] < hD[2] and lD[1] > lD[2]
prev_of_inside_bull = cD[2] > oD[2]

// Relevant highs: inside (t-1) + two prior bars (t-2, t-3)
inside_high        = hD[1]
max_pre_inside_two = math.max(hD[2], hD[3])
entry_stop_price   = math.max(inside_high, max_pre_inside_two)   // highest of the last 3 bars

//──────────────────────────────────
// DAILY LOGIC (first bar of the day)
//──────────────────────────────────
isNewDay = ta.change(time("D"))     // true on the FIRST bar of each day
dayOpen  = open                      // real daily open
dow      = dayofweek                 // day of week (works intraday)

passDay  = not useDayFilter or (dow == dayofweek.monday or dow == dayofweek.thursday or dow == dayofweek.friday)
open_ok  = dayOpen < inside_high and dayOpen < max_pre_inside_two

// Valid setup ONLY for the day immediately after the inside bar
longSetupToday = isNewDay and passDay and inside_prev and prev_of_inside_bull and open_ok

//──────────────────────────────────
// Helper function to create a “day identifier” as a numeric value
//──────────────────────────────────
getDayId() =>
    year(time) * 10000 + month(time) * 100 + dayofmonth(time)

//──────────────────────────────────
// Pending order management / exact entry the day after inside bar
//──────────────────────────────────
var float entryPrice = na
var int entryDayId = na

if isNewDay
    // Cancel any pending stop from the previous day (TIF: 1 day)
    strategy.cancel("LE")

    // If today is the next day after inside and open is valid:
    if longSetupToday and strategy.position_size == 0
        if dayOpen >= entry_stop_price
            // Gap above stop → enter at MARKET on today’s open
            strategy.entry("LE", strategy.long)
        else
            // No gap → place a STOP valid only for today
            strategy.entry("LE", strategy.long, stop=entry_stop_price)

// Record the entry day when position opens
enteredNow = strategy.position_size > 0 and strategy.position_size[1] == 0
if enteredNow
    entryPrice := strategy.position_avg_price
    entryDayId := getDayId()

//──────────────────────────────────
// Fixed Stop Loss
//──────────────────────────────────
if strategy.position_size > 0
    avg = strategy.position_avg_price
    sl_price = sl_type == "Points" ? (avg - sl_value) : (avg * (1.0 - sl_value/100.0))
    strategy.exit(id="SL", from_entry="LE", stop=sl_price)
else
    strategy.cancel("SL")

//──────────────────────────────────
// FPO: Close on the FIRST profitable open AFTER entry day
// (never on the same day)
//──────────────────────────────────
if isNewDay and strategy.position_size > 0 and not na(entryDayId)
    if getDayId() > entryDayId and dayOpen > strategy.position_avg_price
        strategy.close("LE", comment="FPO")

//──────────────────────────────────
// Optional Plots
//──────────────────────────────────
plot(debugPlot ? inside_high        : na, "Inside High (D-1)")
plot(debugPlot ? max_pre_inside_two : na, "High (D-2/D-3)")
plot(debugPlot ? entry_stop_price   : na, "Entry (max of last 3 highs)", linewidth=2)