다중 시간대 스토캐스틱 오실레이터 전략 및 추세 확인 거래 시스템

STOCH MTF HH/LL SL/TP KDJ
생성 날짜: 2025-02-19 10:53:25 마지막으로 수정됨: 2025-02-19 10:53:25
복사: 5 클릭수: 415
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 시간대 스토캐스틱 오실레이터 전략 및 추세 확인 거래 시스템

개요

이 전략은 트렌드 확인과 가격 형태 분석을 결합한 다시간 프레임 무작위 변동 지표 (Stochastic) 에 기반한 거래 시스템이다. 이 전략은 15분, 30분, 60분 세 시간 주기를 사용하여, 무작위 지표의 교차 신호와 더 높은 고점 (Higher High) 과 더 낮은 낮은 점 (Lower Low) 의 형태 확인을 통해 거래 기회를 식별한다. 동시에, 이 전략은 위험을 제어하고 수익을 잠금하기 위해 고정 비율의 중지 손실과 수익을 취하는 방법을 사용합니다.

전략 원칙

전략의 핵심 논리는 다음과 같은 핵심 부분으로 구성됩니다.

  1. 3개의 다른 시간 주기 (15분, 30분, 60분) 의 무작위 지표를 사용하여 시장 움직임을 분석합니다.
  2. 주요 시간 주기 (~15분) 에서, K 라인이 D 라인을 뚫고 오버셀 영역에 있을 때, 더 높은 낮은 점 형태와 결합하여 구매 신호를 확인한다.
  3. 마찬가지로, K 선이 D 선을 넘어 오버 바이 영역에 있을 때, 더 낮은 고점 형태와 결합하여 판매 신호를 확인합니다.
  4. 3.7%의 중지 손실과 1.8%의 수익률을 목표로 한 거래의 위험과 수익을 관리합니다.

전략적 이점

  1. 다중 시간 주기의 분석은 더 포괄적인 시장 관점을 제공하여 가짜 신호를 더 잘 필터링 할 수 있습니다.
  2. 가격 형태 분석과 결합하여 거래 신호의 신뢰성을 높인다.
  3. 고정된 리스크 관리 매개 변수는 거래 결과를 더욱 안정적이고 통제할 수 있게 해줍니다.
  4. 전략은 변동성이 높은 시장 환경에 적합합니다.
  5. 자동화된 출전 신호는 주관적인 판단에 대한 감정적 영향을 줄입니다.

전략적 위험

  1. 변동성이 큰 시장에서는 잘못된 신호가 자주 발생할 수 있습니다.
  2. 고정된 스톱로스/이익 설정은 모든 시장 환경에 적합하지 않을 수 있습니다.
  3. 다중 시간 주기의 신호는 지연될 수 있다.
  4. 급속한 시장에서 정지 설정은 수익을 조기 고정시킬 수 있습니다.
  5. 3.7%의 단지를 감당하기 위해서는 더 많은 자금 관리가 필요합니다.

전략 최적화 방향

  1. 시장의 변동에 따라 역동적으로 조정할 수 있는 스톱로스 및 수익 목표
  2. 추가적인 확인 신호로서 거래량 지표를 증가시키는 것
  3. 동향 강도 지표가 도입되어 흔들리는 시장에서의 성과를 개선합니다.
  4. 다중 시간 주기 사이의 중점을 최적화
  5. 시장 정서 지표를 추가하여 신호의 정확성을 높이는 것을 고려하십시오.

요약하다

이것은 다중 시간 주기의 분석과 트렌드 확인을 결합한 완전한 거래 시스템입니다. 무작위 지표와 가격 형태를 함께 사용하여 시장의 전환점을 더 잘 포착 할 수 있습니다. 고정 된 위험 관리 매개 변수는 간단하지만 거래 일관성을 보장합니다. 이 전략은 변동성이 높은 시장에 적합하지만 특정 시장 환경에 따라 매매자가 매개 변수를 최적화해야합니다.

전략 소스 코드
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Swing Fairas Oil", overlay=true)

// Pilih Timeframe Utama & 2 Timeframe Konfirmasi
tf_main = "15"
tf_mid = "30"
tf_high = "60"

// Parameter Stochastic
length = input(15, title="Stochastic Length")
k_smooth = input(4, title="K Smoothing")
d_smooth = input(5, title="D Smoothing")

// Overbought & Oversold Levels
overbought = input(85, title="Overbought Level")
oversold = input(15, title="Oversold Level")

// Stochastic pada Timeframe Utama
k1 = ta.sma(ta.stoch(close, high, low, length), k_smooth)
d1 = ta.sma(k1, d_smooth)

// Stochastic pada Timeframe Menengah
k2 = request.security(syminfo.tickerid, tf_mid, ta.sma(ta.stoch(close, high, low, length), k_smooth))
d2 = request.security(syminfo.tickerid, tf_mid, ta.sma(k2, d_smooth))

// Stochastic pada Timeframe Tinggi
k3 = request.security(syminfo.tickerid, tf_high, ta.sma(ta.stoch(close, high, low, length), k_smooth))
d3 = request.security(syminfo.tickerid, tf_high, ta.sma(k3, d_smooth))

// **Konfirmasi Higher High & Lower Low**
hh = ta.highest(high, 5)   // Highest High dalam 5 candle terakhir
ll = ta.lowest(low, 5)     // Lowest Low dalam 5 candle terakhir

// **Kondisi Buy**
confirm_buy = ta.crossover(k1, d1) and k1 < oversold  // Stochastic Bullish
higher_low = low > ta.lowest(low[1], 5)  // Higher Low terbentuk

longCondition = confirm_buy and higher_low

// **Kondisi Sell**
confirm_sell = ta.crossunder(k1, d1) and k1 > overbought  // Stochastic Bearish
lower_high = high < ta.highest(high[1], 5)  // Lower High terbentuk

shortCondition = confirm_sell and lower_high

// Stop Loss & Take Profit
sl = input(3.7, title="Stop Loss (%)") / 100
tp = input(1.8, title="Take Profit (%)") / 100

longStopLoss = close * (1 - sl)
longTakeProfit = close * (1 + tp)

shortStopLoss = close * (1 + sl)
shortTakeProfit = close * (1 - tp)

// Eksekusi Order
if longCondition
    strategy.entry("Buy", strategy.long)
    strategy.exit("Sell TP/SL", from_entry="Buy", stop=longStopLoss, limit=longTakeProfit)

if shortCondition
    strategy.entry("Sell", strategy.short)
    strategy.exit("Cover TP/SL", from_entry="Sell", stop=shortStopLoss, limit=shortTakeProfit)

// Label Buy & Sell
if longCondition
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, size=size.small, style=label.style_label_down)

if shortCondition
    label.new(bar_index, high, "SELL", color=color.red, textcolor=color.white, size=size.small, style=label.style_label_up)

// Label Stop Loss & Take Profit
if longCondition
    label.new(bar_index, longStopLoss, "SL: " + str.tostring(longStopLoss, "#.##"), color=color.red, textcolor=color.white, size=size.small, style=label.style_label_left)
    label.new(bar_index, longTakeProfit, "TP: " + str.tostring(longTakeProfit, "#.##"), color=color.green, textcolor=color.white, size=size.small, style=label.style_label_left)

if shortCondition
    label.new(bar_index, shortStopLoss, "SL: " + str.tostring(shortStopLoss, "#.##"), color=color.red, textcolor=color.white, size=size.small, style=label.style_label_left)
    label.new(bar_index, shortTakeProfit, "TP: " + str.tostring(shortTakeProfit, "#.##"), color=color.green, textcolor=color.white, size=size.small, style=label.style_label_left)