
이 전략은 종합적인 거래 시스템으로, 트렌드 추적과 대역 거래 방법을 결합하여, EMA와 SMA 평선 교차, 대역 높은 낮은 지점 식별, 대역량 필터링 및 비율 중지 및 추적 중지 메커니즘을 통해 완전한 거래 시스템을 구축합니다. 전략 설계는 다차원 신호 수치를 확인하고, 기술 지표의 조화 작용을 통해 거래의 정확성과 신뢰성을 향상시킵니다.
이 전략은 다단계 신호 필터링 메커니즘을 사용하며, 먼저 EMA (~10) 와 SMA (~21) 의 교차 형성 기본 트렌드를 판단하고, 그 다음 왼쪽과 왼쪽의 6 개의 K 선의 고저점 돌파를 통해 진입 시기를 결정하며, 거래량이 200 주기 이동 평균보다 크기를 요구하며, 유동성이 풍부한 환경에서 거래하는 것을 보장합니다. 시스템은 2%의 비율의 스톱과 1%의 추적 스톱로스를 사용하여 위험을 관리합니다. 가격이 파장의 고점을 돌파하고 거래량 조건을 충족하면, 시스템은 더 많은 주문을 열고; 가격이 파장의 저점을 돌파하고 거래량 조건을 충족하면, 시스템은 더 많은 주문을 열습니다.
이 전략은 평선 시스템, 가격 돌파 및 거래량 검증을 통해 전체 거래 시스템을 구축하여 중장기 트렌드 추적에 적합하다. 시스템의 장점은 다중 신호 확인과 개선된 위험 관리 장치에 있다. 그러나横盘 시장에서의 성과에 대해서도 주의를 기울여야 한다. 제안된 최적화 방향을 통해 전략은 개선할 여지가 있으며, 특히 적응성 측면에서 개선하면 전략의 안정성을 높이는 데 도움이 될 것이다.
/*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)