이 전략은 평균 방향 지수 (ADX) 와 가격 브레이크아웃을 기반으로 한 양적 거래 전략이다. 이 전략은 주로 ADX 지표 값을 모니터링하여 시장 트렌드 강도를 평가하고 시장 동력을 파악하기 위해 가격 브레이크아웃 신호를 결합합니다. 이 전략은 특정 거래 세션 내에서 작동하며 스톱 로스 및 일일 거래 제한을 통해 리스크 관리를 구현합니다.
핵심 논리는 다음의 핵심 요소들을 포함합니다.
이 전략은 명확한 논리를 가진 잘 구성된 트렌드-추천 전략이다. 효과적인 리스크 관리 프레임 워크 아래 ADX 지표와 가격 브레이크오웃을 결합하여 시장 트렌드를 포착한다. 최적화 할 여지가 있지만 전략의 기초는 견고하고 양적 거래 시스템의 기본 구성 요소로 적합하다. 거래자는 라이브 거래 전에 철저한 백테스팅과 매개 변수 최적화를 수행하고 시장 조건에 따라 특정 개선 사항을 수행하는 것이 좋습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-27 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © HuntGatherTrade // ======================== // NQ 30 minute, ES 30 minute //@version=5 strategy("ADX Breakout", overlay=false, initial_capital=25000, default_qty_value=1) // =============================== // Input parameters // =============================== stopLoss = input(1000.0, title="Stop Loss ($)", group="Exits") session = input("0730-1430:1234567", group="Trade Session") highestLB = input(34, title="Highest lookback window", group="Indicator values") // =============================== // Trade Session Handling // =============================== t = time(timeframe.period, session) // Reset numTrades at the start of each session var int numTrades = 0 is_new_session = ta.change(time("D")) != 0 if is_new_session numTrades := 0 // =============================== // Entry Conditions // =============================== [plusDI, minusDI, adxValue] = ta.dmi(50, 14) entryCondition = (close >= ta.highest(close, highestLB)[1]) and (adxValue < 17.5) and (strategy.position_size == 0) and (numTrades < 3) and not na(t) // =============================== // 7. Execute Entry // =============================== var float stopPricePlot = na if entryCondition entryPrice = close + syminfo.mintick strategy.entry("Long Entry", strategy.long, stop=entryPrice) //stopPrice = strategy.position_avg_price - (stopLoss / syminfo.pointvalue) //strategy.exit("Stop Loss", "Long Entry", stop=stopPrice) numTrades += 1 if (strategy.position_size > 0) and (strategy.position_size[1] == 0) stopPoints = stopLoss / syminfo.pointvalue stopPrice = strategy.position_avg_price - stopPoints stopPrice := math.round(stopPrice / syminfo.mintick) * syminfo.mintick strategy.exit("Stop Loss", from_entry="Long Entry", stop=stopPrice) if ta.change(strategy.opentrades) == 1 float entryPrice = strategy.opentrades.entry_price(0) stopPricePlot := entryPrice - (stopLoss / syminfo.pointvalue) if ta.change(strategy.closedtrades) == 1 stopPricePlot := na plot(stopPricePlot, "Stop-loss level", color.red, 1, plot.style_linebr) // =============================== // Exit at End of Session // =============================== if na(t) and strategy.position_size != 0 strategy.close_all(comment="End of Day Exit")