
다차원 기술 지표 돌파 트렌드 캡처 전략은 다차원 기술 지표와 그래프 형태를 결합한 종합적인 양자 거래 시스템이다. 이 전략은 지수 이동 평균 (EMA), 상대적으로 강한 지수 (RSI), 이동 평균 동향 (MACD), 평균 실제 범위 (ATR), 방향 운동 지수 (ADX) 및 더 높은 시간 프레임 분석을 통합하여 높은 확률의 진입 시장을 식별한다. 이 전략은 특히 여러 기술 지표가 동시에 확인되는 조건에서 거래하는 것을 강조하고 있으며, 엄격한 모드 및 느슨한 모드 두 가지 거래 매개 변수 구성을 제공하며, 1 시간 및 4 시간 시간 프레임에서 작동하기에 적합하다.
다차원 기술 지표 돌파 트렌드 캡처 전략의 핵심 아이디어는 여러 층의 기술 면을 필터링하여 거래 신호의 유효성을 확인하는 것입니다. 이 전략은 여섯 가지 핵심 조건을 조합하여 충분한 조건이 충족되면 거래 신호를 유발합니다.
EMA 교차 신호: 빠른 EMA ((9주기) 와 느린 EMA ((21주기) 의 상대적인 위치가 단기 트렌드 방향을 확인하는 데 사용됩니다. 다중 헤드 신호는 빠른 EMA가 느린 EMA 위에 있고, 빈 헤드 신호는 반대로 있습니다.
높은 시간 프레임 확인전략: 현재 가격과 더 높은 시간 프레임 (선택적으로 15분에서 일선) 의 EMA 위치를 비교하여 거래 방향이 더 큰 추세와 일치하는지 확인합니다. 다중 헤더는 높은 시간 프레임 EMA보다 높은 가격을 요구하며, 공백은 높은 시간 프레임 EMA보다 낮은 가격을 요구합니다.
RSI 이중 확인: 현재 시간 프레임의 RSI와 높은 시간 프레임의 RSI가 함께 동력을 확인한다. 다중 헤드 신호는 현재 RSI>55과 높은 시간 프레임 RSI>50을 요구하며, 공중 신호는 현재 RSI<45과 높은 시간 프레임 RSI<50을 요구한다.
MACD 트렌드 확인: MACD와 신호선의 상대적인 위치를 사용하여 트렌드 방향을 검증한다. 다중 헤드 신호는 MACD가 신호선 위에 있고, 공백 신호는 MACD가 신호선 아래에 있다고 요구한다.
거래량 돌파구 확정: 현재 거래량이 20주기 평균 거래량의 1.3배 이상으로 요구된다 (조정 가능), 충분한 시장 참여가 가격 움직임을 지원하도록 보장한다.
그래프 형식 확인: 특정 그램 형식을 식별합니다. 다중 헤드 흡수, 줄, 역 줄, 십자성, K 라인 () 다중 헤드), 그리고 공허 헤드 흡수, 유성선, 십자성, K 라인 () 공허 헤드) [2].
이 전략에는 ADX 트렌드 필터가 추가되어 ADX>20일 때만 시장이 명백한 트렌드에 있다는 것을 확인한다. 거래 실행 시 ATR 기반의 동적 중지 및 중지 수준을 사용하여 ATR의 1.5배로 중지하고 ATR의 3배로 중지하여 2:1의 리스크 수익률을 제공합니다.
다중 인증 메커니즘: 여러 가지 기술 지표를 동시에 확인하도록 요구함으로써 가짜 신호의 위험을 크게 줄입니다. 엄격한 모드는 모든 여섯 가지 조건을 충족하도록 요구하고, 느슨한 모드는 네 가지 조건을 충족시켜야하며, 거래자에게 유연성을 제공합니다.
자율적 위험 관리: ATR 기반의 동적 중지 및 중지 설정은 시장의 변동성에 따라 자동으로 조정할 수 있으며, 이는 고정 지점의 중지보다 다양한 시장 환경에 적합합니다.
시간 프레임 협동: 현재 시간 프레임과 더 높은 시간 프레임의 분석을 결합하여 거래 방향이 더 큰 추세와 일치하는지 확인하여 거래 성공 가능성을 높입니다.
양수 확인: 거래량 돌파구를 요구하여 낮은 유동성 환경의 신호를 필터링하여 시장의 관심이 부족할 때 잘못된 거래를 줄입니다.
트렌드 강도 필터링: ADX 필터를 통해 명확한 추세에서만 거래하는 것을 보장하고, 간격이 흔들리는 시장에서 유효하지 않은 거래를 피한다.
시각적 피드백전략: 전략은 입문 신호, 중지 및 중지 레벨과 실시간 전략 성능 데이터를 포함한 자세한 차트 표시를 제공하여 거래자가 전략의 효과를 직관적으로 평가하는 데 도움이됩니다.
그래프 형식 검증: 클래식 그래프 형태를 추가 확인으로 인식하여 가격 행동 분석의 차원을 추가하여 시장 정서의 변화의 중요한 지점을 캡처합니다.
과대 최적화 위험전략은 EMA 주기, RSI 미지수, ATR 곱 등과 같은 여러 파라미터와 조건을 포함하고 있으며, 역사적 데이터와 과도하게 일치하는 위험이 있으며, 이로 인해 미래 성능이 떨어집니다. 여러 시장, 여러 시간 동안의 재검토를 통해 파라미터의 안정성을 검증해야합니다.
거래 기회를 놓친 것엄격한 모드에서는 모든 여섯 가지 조건을 동시에 충족하도록 요구합니다. 이는 잠재적으로 많은 수익성있는 거래 기회를 놓치게 할 수 있습니다. 변동성이 적은 시장에서 모든 조건이 충족되는 경우가 드물다.
침투 위험을 막기: 높은 변동성 또는 낮은 유동성 시장에서 ATR 기반의 스톱 로즈는 가격의 폭등이나 슬라이드 포인트로 인해 침투되어 실제 손실이 예상보다 더 많이 발생할 수 있습니다.
신호 지연성전략이 여러 가지 이동 평균 기반의 지표를 사용하기 때문에, 약간의 지연이 존재하며, 트렌드 반전의 초기에는 최적의 입점이나 출퇴근을 놓칠 수 있습니다.
거래 빈도 제한: 전략은 거래 시간 제한을 설정했다 ((2:00-20:00) 그리고 단일 포지션 제한, 이것은 특정 시장 조건에서 좋은 기회를 놓치게 될 수 있다.
기술 지표 의존이 전략은 기술 분석에 전적으로 의존하고 있으며, 기본 사항이나 시장의 감정과 같은 다른 요소를 고려하지 않고, 주요 뉴스 사건이나 블랙 스 사건에 직면했을 때 좋지 않을 수 있습니다.
기계 학습 파라미터 최적화: 기계 학습 알고리즘을 도입하여 각 지표의 무게와 마이너스를 동적으로 조정할 수 있으며, 다양한 시장 환경에 따라 매개 변수를 조정하여 전략의 적응성을 향상시킬 수 있습니다.
시장의 변동성 조절 장치에 가입: VIX 또는 ATR 변화율과 같은 변동성 지표에 따라 거래 규모와 중지 거리를 동적으로 조정합니다. 높은 변동성 시장에서 포지션을 줄이고 낮은 변동성 시장에서 포지션을 증가시킵니다.
시장 감정 지표 통합시장 공포 지수, 투기 감정 지수 또는 소셜 미디어 감정 분석과 같은 차원을 도입하여 전략에 시장 심리학 관점을 추가하십시오.
시간 필터링거래 시간 제한을 더욱 정밀화하여 유동성이 낮은 시간 및 중요한 경제 데이터 발표 시기를 피하고 불필요한 노이즈 거래를 줄입니다.
그래프 형상 인식 최적화: 현재의 그램 형태 인식은 비교적 간단하며, 보다 복잡하고 정확한 형태 인식 알고리즘, 예를 들어 변동률 조정의 형태 정의 또는 기계 학습 형태 인식에 추가할 수 있다.
일부 포지션 관리 도입현재 전략은 고정 비율 자금 관리 ((10% 포지션) 을 채택하고 있으며, 승률과 리스크 수익률에 기반한 케일리 공식의 동적 포지션 관리로 최적화하거나, 피라미드 포지션 기능을 구현하여 유리한 추세를 극대화한다.
다중 시간 프레임 동력을 통합: 기존의 높은 시간 프레임 분석을 확장하여 더 많은 시간 프레임의 일관성을 확인하고, 여러 시간 프레임의 추세가 일치할 때만 거래한다.
다차원 기술 지표의 돌파 트렌드 캡처 전략은 다차원 기술 지표와 형태 인식의 조합을 통해 낮은 품질의 거래 신호를 효과적으로 필터링하는 포괄적이고 엄격한 정량 거래 시스템입니다. 전략은 중·장기 시간 프레임에 특히 적합합니다.
핵심 장점은 다차원 확인 메커니즘과 자율적 인 위험 관리 시스템이며, 주요 위험은 매개 변수 최적화 및 시장 환경 적응성의 문제에서 발생합니다. 미래 최적화 방향은 전략의 지연성을 줄이고 매개 변수 자율성을 높이고 더 많은 시장 지표를 통합하는 데 중점을 두어야합니다.
체계적인 거래 방법을 추구하는 거래자에게는 이 전략은 구조화된 프레임워크를 제공하지만, 전조를 사용하여 충분한 피드백과 변수 최적화를 통해 특정 거래 시장과 개인 위험 선호도에 적합하도록 보장합니다. 앞서 언급한 최적화 방향을 통해 다양한 시장 환경에서 전략의 안정성과 적응성을 더욱 향상시킬 수 있습니다.
/*backtest
start: 2024-05-13 00:00:00
end: 2025-05-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("🚀 Sniper Entry Finder Enhanced [Backtest Enabled]", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === USER INPUTS ===
emaFastLen = input.int(9, title="Fast EMA Length")
emaSlowLen = input.int(21, title="Slow EMA Length")
rsiLength = input.int(14, title="RSI Length")
atrMultiplierSL = input.float(1.5, title="ATR Multiplier (Stop Loss)")
atrMultiplierTP = input.float(3.0, title="ATR Multiplier (Take Profit)")
volMult = input.float(1.3, title="Volume Multiplier")
htfPeriod = input.string('60', title='Higher TF EMA Period', options=['15','30','60','120','240','D'])
strictMode = input.bool(true, title="Strict Mode (All 6 Conditions)")
useTrendFilter = input.bool(true, title="Use ADX Trend Filter")
// === CANDLE PATTERN TOGGLES ===
useBullEngulf = input.bool(true, title="Use Bullish Engulfing")
useHammer = input.bool(true, title="Use Hammer")
useInvHammer = input.bool(true, title="Use Inverted Hammer")
useDoji = input.bool(true, title="Use Doji")
useInsideBar = input.bool(true, title="Use Inside Bar")
useBearEngulf = input.bool(true, title="Use Bearish Engulfing")
useShootingStar = input.bool(true, title="Use Shooting Star")
// === CALCULATIONS ===
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
rsi = ta.rsi(close, rsiLength)
[macd, signal, _] = ta.macd(close, 12, 26, 9)
atr = ta.atr(14)
volAvg = ta.sma(volume, 20)
htfEma = request.security(syminfo.tickerid, htfPeriod, ta.ema(close, emaSlowLen))
htfRsi = request.security(syminfo.tickerid, htfPeriod, ta.rsi(close, rsiLength))
[plusDI, minusDI, adx] = ta.dmi(14, 14)
trendOK = adx > 20 or not useTrendFilter
// === CONDITIONS ===
emaBull = emaFast > emaSlow
emaBear = emaFast < emaSlow
htfBull = close > htfEma
htfBear = close < htfEma
rsiBull = rsi > 55 and htfRsi > 50
rsiBear = rsi < 45 and htfRsi < 50
macdBull = macd > signal
macdBear = macd < signal
volCond = volume > volAvg * volMult
// === PATTERNS ===
bullEngulf = useBullEngulf and (close > open and close[1] < open[1] and close > high[1])
hammer = useHammer and (close > open and (high - low) > 3 * math.abs(open - close) and (close - low) / (0.001 + high - low) > 0.6)
invertedHammer = useInvHammer and (close > open and (high - low) > 3 * math.abs(close - open) and (high - close) / (0.001 + high - low) > 0.6)
doji = useDoji and (math.abs(close - open) <= (high - low) * 0.1)
insideBar = useInsideBar and (high < high[1] and low > low[1])
bearEngulf = useBearEngulf and (close < open and close[1] > open[1] and close < low[1])
shootingStar = useShootingStar and (close < open and (high - low) > 3 * math.abs(open - close) and (high - close) / (0.001 + high - low) > 0.6)
bullPattern = bullEngulf or hammer or invertedHammer or doji or insideBar
bearPattern = bearEngulf or shootingStar or doji or insideBar
// === SCORING ===
bullCondCount = (emaBull ? 1 : 0) + (htfBull ? 1 : 0) + (rsiBull ? 1 : 0) + (macdBull ? 1 : 0) + (volCond ? 1 : 0) + (bullPattern ? 1 : 0)
bearCondCount = (emaBear ? 1 : 0) + (htfBear ? 1 : 0) + (rsiBear ? 1 : 0) + (macdBear ? 1 : 0) + (volCond ? 1 : 0) + (bearPattern ? 1 : 0)
// === ENTRY LOGIC ===
allowedSession = (hour >= 2 and hour < 20)
canTrade = strategy.opentrades == 0
longEntry = allowedSession and trendOK and canTrade and (strictMode ? (bullCondCount == 6) : (bullCondCount >= 4))
shortEntry = allowedSession and trendOK and canTrade and (strictMode ? (bearCondCount == 6) : (bearCondCount >= 4))
// === SL / TP ===
longSL = low - atr * atrMultiplierSL
longTP = close + atr * atrMultiplierTP
shortSL = high + atr * atrMultiplierSL
shortTP = close - atr * atrMultiplierTP
// === ALERTS ===
alertcondition(longEntry, title="Long Entry Alert", message="🚀 Long Entry Signal on {{ticker}} @ {{close}} | SL: {{low - atr * atrMultiplierSL}} | TP: {{close + atr * atrMultiplierTP}}")
alertcondition(shortEntry, title="Short Entry Alert", message="🔻 Short Entry Signal on {{ticker}} @ {{close}} | SL: {{high + atr * atrMultiplierSL}} | TP: {{close - atr * atrMultiplierTP}}")
// === STRATEGY ENTRIES + LABELS ===
if longEntry
strategy.entry("Long", strategy.long)
strategy.exit("TP/SL", from_entry="Long", limit=longTP, stop=longSL)
label.new(bar_index, close, "🚀 Long Entry @ " + str.tostring(close, '#.##'), style=label.style_label_up, yloc=yloc.belowbar, color=color.green, textcolor=color.white)
label.new(bar_index, longTP, "🎯 TP: " + str.tostring(longTP, '#.##'), style=label.style_label_up, yloc=yloc.belowbar, color=color.lime, textcolor=color.white)
label.new(bar_index, longSL, "🛑 SL: " + str.tostring(longSL, '#.##'), style=label.style_label_down, yloc=yloc.belowbar, color=color.red, textcolor=color.white)
if shortEntry
strategy.entry("Short", strategy.short)
strategy.exit("TP/SL", from_entry="Short", limit=shortTP, stop=shortSL)
label.new(bar_index, close, "🔻 Short Entry @ " + str.tostring(close, '#.##'), style=label.style_label_down, yloc=yloc.abovebar, color=color.red, textcolor=color.white)
label.new(bar_index, shortTP, "🎯 TP: " + str.tostring(shortTP, '#.##'), style=label.style_label_down, yloc=yloc.abovebar, color=color.lime, textcolor=color.white)
label.new(bar_index, shortSL, "🛑 SL: " + str.tostring(shortSL, '#.##'), style=label.style_label_up, yloc=yloc.abovebar, color=color.red, textcolor=color.white)
// === PLOTS ===
plot(emaFast, "EMA Fast", color=color.purple, linewidth=2)
plot(emaSlow, "EMA Slow", color=color.yellow, linewidth=2)
plotshape(longEntry, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortEntry, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plot(longEntry ? longSL : na, title="Long SL", color=color.red, style=plot.style_cross, linewidth=2)
plot(longEntry ? longTP : na, title="Long TP", color=color.green, style=plot.style_cross, linewidth=2)
plot(shortEntry ? shortSL : na, title="Short SL", color=color.red, style=plot.style_cross, linewidth=2)
plot(shortEntry ? shortTP : na, title="Short TP", color=color.green, style=plot.style_cross, linewidth=2)
// === MODE LABEL ===
var label modeLabel = na
if (bar_index % 5 == 0)
label.delete(modeLabel)
modeLabel := label.new(bar_index, high, strictMode ? "STRICT MODE" : "LOOSE MODE", style=label.style_label_down, yloc=yloc.abovebar, color=strictMode ? color.red : color.green, textcolor=color.white, size=size.normal)