다중 오실레이터 모멘텀 필터링 평균 회귀 비트코인 거래 전략

RSI WT STOCH RSI MEAN REVERSION OSCILLATOR SCALPING FIBONACCI momentum
생성 날짜: 2025-08-15 12:00:17 마지막으로 수정됨: 2025-08-15 12:00:17
복사: 0 클릭수: 286
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다중 오실레이터 모멘텀 필터링 평균 회귀 비트코인 거래 전략 다중 오실레이터 모멘텀 필터링 평균 회귀 비트코인 거래 전략

개요

이 “다중 진동 진동기 가형 평균 회귀 비트 코인 거래 전략”은 비트 코인 단선 거래를 위해 특별히 설계된 정량화 전략으로, RSI 채널, WaveTrend 지표 및 무작위 RSI 지표를 교묘하게 결합하여 다층적인 필터링 시스템을 형성한다. 이 전략의 핵심은 가격의 RSI 채널에 대한 돌파 회귀 특성을 이용하는 동시에 WaveTrend과 무작위 RSI를 확인 필터로 사용하여 과매 과매 지역의 높은 승률 거래를 보장하는 것이다. 이 전략은 1분 시간 프레임으로 고주파 단선 거래를 하고 있으며, 유연한 중지 손실 메커니즘과 역거래 기능을 갖추고 있다.

전략 원칙

이 전략은 세 가지 핵심 기술 지표의 상호 작용에 기초하고 있습니다.

  1. RSI 채널 (RSI Band)이 전략은 RSI 통로 지표의 개정판을 사용하여 RSI의 오버 (70), 오버 (30) 수준을 기반으로 가격의 상승, 하락 및 중간 궤도를 계산합니다. 가격이 하향 궤도를 돌파 할 때 다중 신호가 발생하고 상승 궤도를 돌파 할 때 마이너스 신호가 발생합니다. 이 메커니즘은 시장의 평균 회귀 특성을 활용합니다.

  2. 웨이브 트렌드 (WT) 지표: LazyBear의 WT1 지표를 사용하여, 기본 설정 채널 길이는 11이며, 평균 길이는 12이며, 오버 바이 레벨은 +60, 오버 셀 레벨은 -60입니다. 이 지표는 시장이 과매매 또는 과매매 상태에 있는지 확인하는 데 사용되는 동력 진동기입니다.

  3. RSI (Random RSI) 는: K선만 사용해서, K 길이는 5, RSI 길이는 14, 무작위 길이는 10으로 설정한다. 이 지표는 시장의 과매매 과매매 상태를 추가로 확인하고 신호 신뢰성을 증가시킨다.

전략의 신호 생성 논리는 다음과 같다:

  • 더 많은 신호: 가격이 RSI 아래로 떨어지고 WT 지표가 초과 수준보다 낮습니다 ((-60) AND 무작위 RSI의 K 값이 초과 수준보다 낮습니다 ((0 + tolerance)
  • 공백 신호: 가격이 RSI를 돌파하고 AND WT 지표가 초과 구매 수준보다 높습니다 ((+60) AND 무작위 RSI의 K 값이 초과 구매 수준보다 높습니다 ((100-용차)

트레이드 트리거 모드에는 두 가지 옵션이 있습니다: “Cross ((close) “는 RSI 채널을 가로질러 닫기 가격을 사용하며, “Touch ((wick) “는 RSI 채널을 촉발하는 신호를 스카이 라인으로 허용합니다. 또한, 전략에는 반대의 신호가 발생하면 상쇄되고 역으로 포지션을 열 수 있는 역전출장 메커니즘이 포함되어 있습니다.

전략적 이점

이 전략의 코드에 대한 깊은 분석은 다음과 같은 중요한 장점을 요약할 수 있습니다.

  1. 다중 필터링 시스템세 가지 다른 기술 지표 (RSI 채널, WaveTrend 및 Random RSI) 를 결합하여 강력한 다층 필터링 시스템을 형성하여 가짜 돌파의 위험을 크게 줄이고 거래 신호의 품질과 신뢰성을 향상시킵니다.

  2. 유연한 거래 메커니즘전략은 여러 가지 사용자 정의 가능한 옵션을 제공 합니다. 반전 퇴출을 사용할지, 스톱/스트롭을 사용할지, 트리거 모드 옵션을 사용할지 등이 포함됩니다. 이는 거래자가 시장 상황과 개인 위험 선호도에 따라 조정할 수 있도록 합니다.

  3. 효율적인 위험 관리: 백분율 스티드/스트로드 메커니즘이 내장되어 있으며, 각 거래의 리스크/수익률을 정확하게 제어하여 자금의 안전을 보호합니다.

  4. 자동화 경고 시스템: 텔레그램 알림 기능이 통합되어 거래 신호에 대한 실시간 알림을 구현하여 거래자가 거래를 신속하게 추적하고 실행할 수 있습니다.

  5. 쓰레기 방지 정보 메커니즘: 전략은 반복되는 경보를 방지하는 메커니즘을 구현하고, 동일한 K선 내에서 한 번만 신호를 보내는 것을 보장하며, 정보 중복을 방지한다.

  6. 고주파 거래 적응성이 전략은 1분 시간 프레임에 기반하여 고주파 거래 환경에 적합하며, 단기 가격 변동을 포착하여 시장에 빠르게 진입 및 출입할 수 있습니다.

전략적 위험

이 전략은 정교하게 설계되었지만, 몇 가지 잠재적인 위험이 있습니다.

  1. 고주파 거래의 위험1분 시간 프레임에 기반한 고주파 거래는 더 많은 거래 신호를 생성하여 과도한 거래와 거래 비용을 증가시킬 수 있습니다. 해결 방법: 추가 시간 필터를 추가하거나 특정 시장 시간대에만 거래하는 것을 고려할 수 있습니다.

  2. 가짜 침입 위험: 여러 필터가 있음에도 불구하고, 높은 변동성 시장에서 거래 손실을 초래하는 가짜 돌파구가 발생할 수 있습니다. 해결 방법: 지표 매개 변수를 조정하거나, 확인 조건을 추가하거나, 더 긴 시간 주기를 결합하여 추세를 판단하십시오.

  3. 매개변수 민감도전략 성능은 파라미터 설정에 크게 의존하며, 다른 시장 환경에는 다른 파라미터가 필요할 수 있습니다. 해결 방법: 충분한 역사 회신을 수행하고, 최적의 파라미터 조합을 찾고, 정기적으로 파라미터를 다시 최적화하십시오.

  4. 시장 추세에 적응: 이 평균 회귀 전략은 흔들리는 시장에서 잘 작동하지만 강한 추세 시장에서는 좋지 않을 수 있습니다. 해결 방법: 트렌드 필터를 추가하여 강한 추세 동안 반-트렌드 거래를 제한하십시오.

  5. 시스템 위험: 텔레그램 알림 시스템에 의존하여 알림 시스템이 고장 났을 경우 거래 기회를 놓칠 수 있습니다.

전략 최적화 방향

코드 분석을 바탕으로, 이 전략은 다음과 같은 방향으로 최적화될 수 있습니다:

  1. 시장 상태 판단을 추가: 적응 메커니즘을 도입하여 시장의 변동성과 트렌드 강도에 따라 전략 매개 변수를 동적으로 조정한다. 이것은 전략이 다양한 시장 환경에서 좋은 성능을 유지할 수 있도록 한다. 구체적인 구현은 ATR (평균 실제 파도) 또는 변동률 지표를 계산하여 시장 상태를 판단 할 수 있다.

  2. 다중 시간 프레임 분석: 더 높은 시간 프레임의 시장 트렌드 정보를 통합하여 주 트렌드 방향으로만 거래하거나 다른 트렌드 조건에 따라 다른 파라미터 설정을 사용할 수 있습니다. 예를 들어, 일선 또는 4 시간 트렌드 판단을 추가하여 상승 추세에서 더 많이하고 하향 추세에서 더 많이하지 않습니다.

  3. 입학 시점을 최적화: 거래량 확인이나 가격 행동 패턴을 인식함으로써 입시의 정확도를 향상시킵니다. 즉시 입시하지 않고 신호가 생성된 후 더 유리한 입시 지점을 기다리는 것을 고려할 수 있습니다.

  4. 더 나은 스탠드 패스 메커니즘: 동적 스톱 스톱을 구현합니다. 예를 들어, ATR을 기반으로 스톱 스톱 거리를 설정하거나 모바일 스톱 보호 수익률을 사용할 수 있습니다.

  5. 기계 학습 요소를 추가합니다.: 기계 학습 알고리즘을 사용하여 최적의 변수 조합을 자동으로 식별하거나 신호의 유효성을 예측한다. 역사 데이터 훈련 모델을 통해 각 거래 신호에 확률 무게를 부여한다.

  6. 위험점 관리: 계정 순액에 기반한 동적 포지션 규모 조정, 연속적인 손실 후 거래 규모를 줄이고, 연속적인 이익 후 거래 규모를 증가시키고, 더 과학적인 자금 관리를 실현한다.

요약하다

“다중 진동기동 필터형 평균값 회귀 비트코인 거래 전략”은 RSI 채널, WaveTrend 및 무작위 RSI의 연동 작용을 통해 시장 과매매 상태를 효과적으로 식별하고 평균값 회귀 거래 기회를 포착하는 정교하게 설계된 단선 거래 시스템이다. 이 전략은 여러 필터링, 유연한 거래 메커니즘, 효율적인 위험 관리 및 자동화 경보 등의 장점을 가지고 있으며, 비트코인 시장의 단선 거래자에게 적합하다.

그러나, 이 전략은 또한 높은 주파수 거래 위험, 가짜 돌파 위험 및 시장 적응성 등의 도전에 직면한다. 시장 상태 판단, 다중 시간 프레임 분석, 입문 시기를 최적화, 중지 중지 손실 메커니즘을 개선하고 동적 포지션 관리를 구현하는 등의 방향의 최적화를 추가함으로써 전략의 안정성과 수익성을 더욱 향상시킬 수 있다.

이 전략은 비트코인 시장에서 단선 거래를 원하는 양적 거래자에게 안정적인 수익을 달성하기 위해 개인 거래 스타일과 시장 인식에 따라 개인 맞춤형 조정 및 최적화를 할 수있는 견고한 기본 프레임 워크를 제공합니다.

전략 소스 코드
/*backtest
start: 2024-08-15 00:00:00
end: 2025-08-13 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=5
strategy("RS BTC 1", overlay=true, max_labels_count=500, initial_capital=100, commission_type=strategy.commission.percent, commission_value=0.003, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_every_tick=true, process_orders_on_close=false, pyramiding=0)

// ==== Inputs
// RSI Bands
rsiLen   = input.int(14, "RSI Length")
obLevel  = input.int(70, "RSI Overbought")
osLevel  = input.int(30, "RSI Oversold")

// WT (LazyBear)
wtLen1   = input.int(11, "WT Channel Length")
wtLen2   = input.int(12, "WT Avg Length")
wtOB     = input.float( 60.0, "WT Overbought (+)")
wtOS     = input.float(-60.0, "WT Oversold (-)")

// Stoch RSI (sadece K filtresi)
kLen     = input.int(5,  "StochRSI K")
rsiLenSR = input.int(14, "StochRSI RSI Length")
stLen    = input.int(10, "Stoch Length")
rsiSrc   = input.source(close, "RSI Source")
stochOB  = input.float(100.0, "StochRSI OB (K ≥)", step=0.1)
stochOS  = input.float(0.0,   "StochRSI OS (K ≤)", step=0.1)
eps      = input.float(0.5,   "Tolerance around 0/100", step=0.1)

// Tetik modu
triggerMode = input.string("Cross(close)", "Trigger mode", options=["Cross(close)","Touch(wick)"])
showMid     = input.bool(true,  "Show RSI mid band")

// Çıkış seçenekleri
useReverseExit = input.bool(true,  "Exit & reverse on opposite band cross (swing)")
useTP          = input.bool(true,  "Enable Take Profit %")
useSL          = input.bool(true,  "Enable Stop Loss %")
tpPerc         = input.float(1.00, "TP %", step=0.01, minval=0.01)
slPerc         = input.float(1.00, "SL %", step=0.01, minval=0.01)

// ==== RSI Bands (LazyBear) – Mantık aynı, sadece ince çizgi
src = close
ep  = 2 * rsiLen - 1
auc = ta.ema(math.max(src - src[1], 0), ep)
adc = ta.ema(math.max(src[1] - src, 0), ep)
x1  = (rsiLen - 1) * (adc * obLevel / (100 - obLevel) - auc)
x2  = (rsiLen - 1) * (adc * osLevel / (100 - osLevel) - auc)
ub  = x1 >= 0 ? src + x1 : src + x1 * (100 - obLevel) / obLevel
lb  = x2 >= 0 ? src + x2 : src + x2 * (100 - osLevel) / osLevel
mid = (ub + lb) / 2.0

plot(ub,  "RSI Upper", color=color.yellow, linewidth=1)
plot(lb,  "RSI Lower", color=color.aqua,   linewidth=1)
plot(showMid ? mid : na, "RSI Mid", color=color.gray, linewidth=1)

// ==== WaveTrend (LazyBear WT1)
ap  = hlc3
esa = ta.ema(ap, wtLen1)
d   = ta.ema(math.abs(ap - esa), wtLen1)
ci  = (ap - esa) / (0.015 * d)
wt1 = ta.ema(ci, wtLen2)

// ==== Stoch RSI K (0..100)
rsiVal   = ta.rsi(rsiSrc, rsiLenSR)
stochRaw = ta.stoch(rsiVal, rsiVal, rsiVal, stLen)
stochK   = ta.sma(stochRaw, kLen)

// ==== Sinyaller
longCrossRaw  = triggerMode == "Cross(close)" ? ta.crossunder(close, lb) : ta.crossunder(low,  lb)
shortCrossRaw = triggerMode == "Cross(close)" ? ta.crossover( close, ub) : ta.crossover( high, ub)

stochLongOK  = stochK <= (stochOS + eps)
stochShortOK = stochK >= (stochOB - eps)
wtLongOK     = wt1 < wtOS
wtShortOK    = wt1 > wtOB

longSig_raw  = longCrossRaw  and wtLongOK  and stochLongOK
shortSig_raw = shortCrossRaw and wtShortOK and stochShortOK

longSig  = useReverseExit ? longSig_raw  : (longSig_raw  and strategy.position_size == 0)
shortSig = useReverseExit ? shortSig_raw : (shortSig_raw and strategy.position_size == 0)

// ==== İşlemler
if longSig
    if useReverseExit and strategy.position_size < 0
        strategy.close("S")
    if strategy.position_size <= 0
        strategy.entry("L", strategy.long)

if shortSig
    if useReverseExit and strategy.position_size > 0
        strategy.close("L")
    if strategy.position_size >= 0
        strategy.entry("S", strategy.short)

// ==== TP / SL
if strategy.position_size > 0 and (useTP or useSL)
    longEntryPrice = strategy.position_avg_price
    longTP  = useTP ? longEntryPrice * (1 + tpPerc/100.0) : na
    longSL  = useSL ? longEntryPrice * (1 - slPerc/100.0) : na
    strategy.exit(id="L-EXIT", from_entry="L", limit=longTP, stop=longSL)

if strategy.position_size < 0 and (useTP or useSL)
    shortEntryPrice = strategy.position_avg_price
    shortTP = useTP ? shortEntryPrice * (1 - tpPerc/100.0) : na
    shortSL = useSL ? shortEntryPrice * (1 + slPerc/100.0) : na
    strategy.exit(id="S-EXIT", from_entry="S", limit=shortTP, stop=shortSL)


// ==== ENTRY alert (tek bar / tek kez) ====
// TV Alert -> Condition: Any alert() function call
// Webhook  -> https://api.telegram.org/bot<YOUR_TOKEN>/sendMessage
// Message  -> BOŞ (alert() JSON yolluyor)

chatId   = input.string("-1002849453919", "Telegram chat_id (channel)")
lotTxt   = input.string("0.20", "Lot (text)")
tpPips   = input.int(10000,  "TP (pip)")   // SL yok

makeJson(_txt) => '{"chat_id":"' + chatId + '","text":"' + _txt + '"}'

// MT5 sembolü sabit
longTxt  = 'BUY BTCUSD# '  + lotTxt + ' TP=' + str.tostring(tpPips) + 'pip'
shortTxt = 'SELL BTCUSD# ' + lotTxt + ' TP=' + str.tostring(tpPips) + 'pip'

// Giriş oldu mu? (bar içinde)
enteredLong  = strategy.position_size >  0 and strategy.position_size[1] <= 0
enteredShort = strategy.position_size <  0 and strategy.position_size[1] >= 0

// --- anti-spam: aynı barda yalnızca 1 kere gönder ---
var int  lastEntryBar = na
var int  lastDir      = 0   // +1: long, -1: short

if enteredLong and (lastEntryBar != bar_index or lastDir != 1)
    alert(makeJson(longTxt), alert.freq_once_per_bar)   // tek gönderim
    lastEntryBar := bar_index
    lastDir      := 1

if enteredShort and (lastEntryBar != bar_index or lastDir != -1)
    alert(makeJson(shortTxt), alert.freq_once_per_bar)
    lastEntryBar := bar_index
    lastDir      := -1