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

EMA/SMA 트렌드 추종 스윙 거래 전략 결합 된 볼륨 필터 및 비율 취득/손실 정지 시스템

저자:차오장, 날짜: 2024-12-11 15:12:35
태그:EMASMA

img

전반적인 설명

이 전략은 트렌드를 따라 스윙 트레이딩 방법, EMA와 SMA 크로스오버, 스윙 하이/로 식별, 볼륨 필터링, 그리고 비율 기반의 영업 및 트레일링 스톱 로스 메커니즘을 활용한 종합적인 거래 시스템이다. 이 전략은 다차원 신호 확인을 강조하며 기술 지표의 시너지 효과를 통해 거래 정확성을 향상시킨다.

전략 원칙

이 전략은 다층 신호 필터링 메커니즘을 사용하며, 기본 트렌드 결정에 EMA ((10) 와 SMA ((21) 크로스오버를 시작으로, 입시 시기를 위해 6바르 왼쪽/오른 피보트 포인트 브레이크오프를 사용하면서 충분한 유동성을 보장하기 위해 200주기 이동 평균 이상의 볼륨을 요구합니다. 이 시스템은 리스크 관리를 위해 2%의 수익을 취하고 1%의 트레일링 스톱 로스를 사용합니다. 가격이 볼륨 확인과 함께 스윙 최하위 이상으로 넘어갈 때 긴 포지션은 시작됩니다. 가격이 볼륨 확인과 함께 스윙 최하위 이하로 넘어갈 때 짧은 포지션은 취합니다.

전략적 장점

  1. 다중 신호 확인은 트렌드, 가격 파열 및 부피 확장을 확인함으로써 잘못된 신호를 줄입니다.
  2. 유연한 이익/손실 관리, 수익을 차지할 수 있는 비율을 기준으로
  3. 거래 및 신호를 모니터링하는 포괄적 인 시각화 시스템
  4. 조정 가능한 키 매개 변수와 함께 높은 사용자 정의성
  5. 사전 설정된 스톱 로스 및 영업률을 통한 체계적인 리스크 관리

전략 위험

  1. 다양한 시장에서 발생할 수 있는 거짓 파업
  2. 부피 필터링은 유효한 신호를 놓칠 수 있습니다.
  3. 고액 수익률은 강한 추세에서 너무 일찍 종료 될 수 있습니다.
  4. 이동 평균 시스템은 빠른 반전에서 고유 한 지연을 가지고 있습니다.
  5. 전략 수익에 대한 거래 비용의 영향을 고려해야 합니다

최적화 방향

  1. 이윤/손실 중단의 동적 조정을 위해 변동성 조정 도입
  2. 약 트렌드에서 거래를 피하기 위해 트렌드 강도 필터링을 추가합니다.
  3. 상대적 볼륨 변화를 고려하여 볼륨 필터링 알고리즘을 최적화
  4. 불리한 거래 기간을 피하기 위해 시간 기반 필터를 구현합니다.
  5. 매개 변수 적응을 위해 시장 체제 분류를 고려하십시오

요약

이 전략은 중장기 트렌드를 따르는 데 적합한 이동 평균, 가격 브레이크, 및 볼륨 검증을 통해 완전한 거래 시스템을 구축합니다. 이 전략의 강점은 여러 신호 확인과 포괄적인 위험 관리에 있습니다. 그러나 다양한 시장에서의 성능은 주의가 필요합니다. 제안된 최적화, 특히 적응력으로 인해 전략은 안정성과 성능 향상에 대한 여지가 있습니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)

관련

더 많은