이 전략은 여러 지표가 결합된 트렌드 추적 시스템으로, 주로 가격 돌파구, 거래량 확인 및 평행 시스템 조합을 식별하여 시장의 트렌드 기회를 포착한다. 이 전략은 가격에 대한 최근의 고 / 낮은 돌파구, 거래량의 눈에 띄는 확대 및 다중 지수 이동 평균 (EMA) 의 배열을 모니터링하여 거래 신호를 결정한다. 이 전략은 또한 잠재적인 공백 기회를 포착하기 위해 혁신적인 좁은 범위를 정리하는 식별 메커니즘을 포함합니다.
이 전략의 핵심 논리는 다음과 같은 핵심 요소에 기반합니다.
다중 트렌드 돌파량 거래 전략은 다중 기술 지표의 결합 사용으로 유연한 거래 기회를 제공하면서 신호의 신뢰성을 보장하는 통합적인 트렌드 추적 시스템입니다. 전략의 혁신은 전통적인 돌파 거래 방법과 새로운 유형의 좁은 정리 식별 장치를 결합하여 다양한 시장 환경에 적응 할 수 있습니다.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Breakout Strategy (Long & Short) + Slope of 200 EMA", overlay=true)
// -------------------
// 1. Settings
// -------------------
breakout_candles = input.int(20, title="Number of Candles for Breakout")
range_candles = input.int(10, title="Number of Candles for Previous Range")
ema_long_period = input.int(200, title="Long EMA Period")
ema_medium_period = input.int(50, title="Medium EMA Period")
ema_short_period = input.int(30, title="Short EMA Period")
// Checkbox to allow/disallow short positions
allowShort = input.bool(true, title="Allow Short Positions")
// Inputs for the new Narrow Consolidation Short setup
consolidationBars = input.int(10, "Consolidation Bars", minval=1)
narrowThreshInAtr = input.float(0.5,"Narrowness (ATR Mult.)",minval=0.0)
atrLength = input.int(14, "ATR Length for Range")
// -------------------
// 2. Calculations
// -------------------
breakout_up = close > ta.highest(high, breakout_candles)[1]
breakout_down = close < ta.lowest(low, breakout_candles)[1]
prev_range_high = ta.highest(high, range_candles)[1]
prev_range_low = ta.lowest(low, range_candles)[1]
ema_long = ta.ema(close, ema_long_period)
ema_medium = ta.ema(close, ema_medium_period)
ema_short = ta.ema(close, ema_short_period)
average_vol = ta.sma(volume, breakout_candles)
volume_condition = volume > 2 * average_vol
// 200 EMA sloping down?
ema_long_slope_down = ema_long < ema_long[1]
// For the Narrow Consolidation Short
rangeHigh = ta.highest(high, consolidationBars)
rangeLow = ta.lowest(low, consolidationBars)
rangeSize = rangeHigh - rangeLow
atrValue = ta.atr(atrLength)
// Condition: Price range is "narrow" if it's less than (ATR * threshold)
narrowConsolidation = rangeSize < (atrValue * narrowThreshInAtr)
// Condition: All bars under Medium EMA if the highest difference (high - ema_medium) in last N bars is < 0
allBelowMedium = ta.highest(high - ema_medium, consolidationBars) < 0
// -------------------
// 3. Long Entry
// -------------------
breakout_candle_confirmed_long = ta.barssince(breakout_up) <= 3
long_condition = breakout_candle_confirmed_long
and volume_condition
and close > prev_range_high
and close > ema_long
and ema_short > ema_medium
and ema_medium > ema_long
and strategy.opentrades == 0
if long_condition
strategy.entry("Long", strategy.long)
// -------------------
// 4. Short Entries
// -------------------
// (A) Original breakout-based short logic
breakout_candle_confirmed_short = ta.barssince(breakout_down) <= 3
short_condition_breakout = breakout_candle_confirmed_short
and volume_condition
and close < prev_range_low
and close < ema_long
and ema_short < ema_medium
and ema_medium < ema_long
and ema_long_slope_down
and strategy.opentrades == 0
// (B) NEW: Narrow Consolidation Short
short_condition_consolidation = narrowConsolidation
and allBelowMedium
and strategy.opentrades == 0
// Combine them: if either short scenario is valid, go short
short_condition = (short_condition_breakout or short_condition_consolidation) and allowShort
if short_condition
// Use a different order ID if you want to distinguish them
// but "Short" is fine for a single position
strategy.entry("Short", strategy.short)
// -------------------
// 5. Exits
// -------------------
if strategy.position_size > 0 and close < ema_long
strategy.close("Long", qty_percent=100)
if strategy.position_size < 0 and close > ema_long
strategy.close("Short", qty_percent=100)
// ======================================================================
// 5. ADDITIONAL PARTIAL EXITS / STOPS
// ======================================================================
// You can add partial exits for shorts or longs similarly.
// For example:
// if strategy.position_size < 0 and close > stop_level_for_short
// strategy.close("Short", qty_percent=50)