리소스 로딩... 로딩...

거래 전략에 따른 다중SMA 및 스토카스틱 결합 트렌드

저자:차오장, 날짜: 2024-12-27 14:43:30
태그:SMAKDJATRRSIMACD

img

전반적인 설명

이 전략은 트렌드를 따르는 거래 시스템으로 여러 가지 간단한 이동 평균 (SMA) 을 스토카스틱 오시일레이터와 결합합니다. 가격 구역과 트렌드 식별 조건을 설정하여 시장 추세가 명확하게 정의 될 때 거래를 실행합니다. 이 전략은 시장 움직임에 따라 포지션 관리를 조정하는 동적 스톱-로스 메커니즘을 사용하여 수익을 보호하고 조기 출출을 피합니다.

전략 원칙

이 전략은 몇 가지 핵심 요소에 기반합니다.

  1. 듀얼 SMA 시스템: 트렌드 결정에 19주기 및 74주기 SMA를 사용합니다.
  2. 가격 구역: 시장 강도를 평가하기 위해 가격 범위를 5 단계로 나누고 있습니다.
  3. 스토카스틱 오시레이터: 초고가/초판 조건에 대해 60주기 스토카스틱을 사용합니다.
  4. 트렌드 확인: 트렌드 지속을 확인하기 위해 세 개의 연속 촛불을 사용합니다.
  5. 진입 조건: 가격이 74주기 SMA를 넘어서서 지정된 가격 구역 내에 있을 때 진입합니다.
  6. 스톱 로스 메커니즘: 트렌드 기반 출구와 함께 후속 스톱을 구현합니다.

전략적 장점

  1. 시스템 완전성: 종합적인 시장 분석을 위해 트렌드 추적 및 동력 지표를 결합합니다.
  2. 리스크 관리: 하드 스톱 및 트레일링 스톱을 포함한 여러 스톱 손실 메커니즘
  3. 적응성: 매개 변수 최적화를 통해 다른 시장 조건에 조정할 수 있습니다.
  4. 트렌드 포착: 거짓 신호를 피하면서 중장기 트렌드를 효과적으로 포착합니다.
  5. 포지션 관리: 효율적인 자본 활용을 위해 시장 조건에 따라 포지션을 동적으로 조정합니다.

전략 위험

  1. 부진 시장 위험: 부진 시장에서 빈번한 거래를 유발할 수 있습니다.
  2. 스리프 리스크: 급변하는 시장에서 잠재적으로 중요한 스리프 리스크
  3. 매개 변수 민감도: 다른 매개 변수 조합으로 인해 성능이 달라질 수 있습니다.
  4. 시장 환경 의존성: 트렌딩 시장에서 전략이 더 잘 수행됩니다.
  5. 자본 관리 위험: 전체 포지션 크기는 상당한 마감으로 이어질 수 있습니다.

최적화 방향

  1. 변동성 지표를 포함합니다. 동적 스톱 로스 조정에 ATR을 추가하는 것을 고려하십시오.
  2. 입력 시기를 최적화: 입력 정확성을 향상시키기 위해 볼륨 확인을 추가
  3. 자본 관리 강화: 위험 평가에 기초한 포지션 크기 모듈을 구현
  4. 시장 환경 분석을 추가: 신호 필터로 트렌드 강도 지표를 포함
  5. 스톱 로스 메커니즘 개선: 더 나은 유연성을 위해 퍼센트 기반의 트레일링 스톱을 고려하십시오.

요약

이 전략은 여러 가지 기술 지표를 결합하여 강력한 트렌드 추적 기능과 위험 관리 메커니즘을 갖춘 포괄적인 거래 시스템을 구축합니다. 특정 시장 조건에서 과제에 직면 할 수 있지만 지속적인 최적화와 정밀화는 다양한 시장 환경에서 안정적인 성능을 유지하는 데 도움이 될 수 있습니다. 트레이더는 라이브 트레이딩에서 전략을 구현할 때 포지션 크기를 제어하고 적절한 스톱 로스를 설정하고 시장 조건에 따라 매개 변수를 조정하는 것이 좋습니다.


/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-25 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Purple SMA Strategy", overlay=true)

// === INPUTS ===
zoneLength = input.int(20, "Price Zone Length", minval=5)
tickSize = input.float(1.0, "Tick Size for Hard Stop")
hardStopTicks = input.int(50, "Hard Stop Loss in Ticks")

// === CALCULATE ZONES ===
h = ta.highest(high, zoneLength)
l = ta.lowest(low, zoneLength)
priceRange = h - l
lvl5 = h
lvl4 = l + (priceRange * 0.75)  // Orange line
lvl3 = l + (priceRange * 0.50)  // Yellow line
lvl2 = l + (priceRange * 0.25)  // Green line
lvl1 = l

// === INDICATORS ===
sma19 = ta.sma(close, 19)
sma74 = ta.sma(close, 74)

// === CANDLE COLOR CONDITIONS ===
isGreenCandle = close > open
isRedCandle = close < open

// === CONTINUOUS TREND DETECTION ===
isThreeGreenCandles = close > open and close[1] > open[1] and close[2] > open[2]
isThreeRedCandles = close < open and close[1] < open[1] and close[2] < open[2]

var bool inGreenTrend = false
var bool inRedTrend = false

// Update trends
if isThreeGreenCandles
    inGreenTrend := true
    inRedTrend := false
if isThreeRedCandles
    inRedTrend := true
    inGreenTrend := false
if (inGreenTrend and isRedCandle) or (inRedTrend and isGreenCandle)
    inGreenTrend := false
    inRedTrend := false

// === STOCHASTIC CONDITIONS ===
k = ta.stoch(close, high, low, 60)
d = ta.sma(k, 10)
isOverbought = d >= 80
isOversold = d <= 20
stochUp = d > d[1]
stochDown = d < d[1]

// === SMA COLOR LOGIC ===
sma19Color = if isOverbought and stochUp
    color.green
else if isOverbought and stochDown
    color.red
else if isOversold and stochUp
    color.green
else if isOversold and stochDown
    color.red
else if stochUp
    color.blue
else if stochDown
    color.purple
else
    color.gray

sma74Color = sma74 < sma19 ? color.green : color.red

// === CROSSING CONDITIONS ===
crossUpSMA = ta.crossover(close, sma74)
crossDownSMA = ta.crossunder(close, sma74)

// === ENTRY CONDITIONS ===
buyCondition = crossUpSMA and close > lvl4
sellCondition = crossDownSMA and close < lvl2

// === POSITION MANAGEMENT ===
var float stopLevel = na
var bool xMode = false

// Entry and Stop Loss
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)
    stopLevel := close - (hardStopTicks * tickSize)
    xMode := false

if sellCondition
    strategy.entry(id="Short", direction=strategy.short)
    stopLevel := close + (hardStopTicks * tickSize)
    xMode := false

// Update stops based on X's
if strategy.position_size != 0 and (inGreenTrend or inRedTrend)
    xMode := true
    if strategy.position_size > 0  // Long position
        stopLevel := low
    else  // Short position
        stopLevel := high

// Exit logic
if strategy.position_size > 0  // Long position
    if low <= stopLevel
        strategy.close(id="Long")
    else if xMode and not (inGreenTrend or inRedTrend)
        strategy.close(id="Long")

if strategy.position_size < 0  // Short position
    if high >= stopLevel
        strategy.close(id="Short")
    else if xMode and not (inGreenTrend or inRedTrend)
        strategy.close(id="Short")

// === PLOTTING ===
plot(sma19, "SMA 19", color=sma19Color, linewidth=2)
plot(sma74, "SMA 74", color=sma74Color, linewidth=2)
plot(lvl5, "Upper Zone Top", color=color.red, linewidth=2)
plot(lvl4, "Upper Zone Bottom", color=color.orange, linewidth=2)
plot(lvl3, "Middle Line", color=color.yellow, linewidth=2)
plot(lvl2, "Lower Zone Top", color=color.green, linewidth=2)
plot(lvl1, "Lower Zone Bottom", color=color.blue, linewidth=2)

// Plot X signals
plotshape(inGreenTrend, title="Bullish Line", style=shape.xcross, location=location.belowbar, color=color.white, size=size.tiny)
plotshape(inRedTrend, title="Bearish Line", style=shape.xcross, location=location.abovebar, color=color.white, size=size.tiny)

// Zone fills
var p1 = plot(lvl5, display=display.none)
var p2 = plot(lvl4, display=display.none)
var p3 = plot(lvl2, display=display.none)
var p4 = plot(lvl1, display=display.none)
fill(p1, p2, color=color.new(color.red, 90))
fill(p3, p4, color=color.new(color.green, 90))

// Plot entry signals
plotshape(buyCondition, title="Buy", style=shape.square, location=location.belowbar, color=color.new(color.blue, 20), size=size.tiny, text="BUY", textcolor=color.blue)
plotshape(sellCondition, title="Sell", style=shape.square, location=location.abovebar, color=color.new(color.red, 20), size=size.tiny, text="SELL", textcolor=color.red)

관련

더 많은