
이 전략은 트렌드 추적과 간격 거래를 결합한 자기 적응 거래 시스템이다. 그것은 여러 기술적 지표의 연동 협조를 통해, 다른 시장 환경에서 유연하게 거래 모드를 전환한다. 전략은 Supertrend, 이동 평균선, ADX, RSI 및 브린 벨트와 같은 지표를 사용하여 시장 상태를 식별하고 거래 신호를 결정하며, VWAP와 함께 가격 참조를 수행하고, 위험을 제어하기 위해 손실 제도를 설정한다.
전략의 핵심 논리는 두 부분으로 나다. 트렌드 추적과 간격 거래. 트렌드 시장에서 (ADX>25에 의해 결정), 전략은 Supertrend 방향, EMA 교차 및 VWAP 위치에 따라 신호를 생성한다.
이것은 합리적으로 설계된, 논리적으로 완성된 종합적 전략이다. 다중 지표의 조화와 모드 스위치를 통해, 서로 다른 시장 환경에서 어느 정도의 적응력을 유지할 수 있다. 약간의 잠재적인 위험이 있음에도 불구하고, 합리적인 위험 제어와 지속적인 최적화를 통해, 이 전략은 실전 응용 가치 있다. 실제 사용 시 충분한 매개 변수 최적화 및 재검증을 권장한다.
/*backtest
start: 2025-01-27 00:00:00
end: 2025-02-20 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("Nifty/BankNifty Multi-Strategy v2", overlay=true, margin_long=100, margin_short=100)
// ———— Inputs ———— //
// Supertrend
atrPeriod = input.int(10, "ATR Period")
supertrendMultiplier = input.float(2.0, "Supertrend Multiplier", step=0.1)
// EMA
ema20Period = input.int(20, "20 EMA Period")
ema50Period = input.int(50, "50 EMA Period")
// ADX/DMI
adxThreshold = input.int(25, "ADX Trend Threshold")
adxLength = input.int(14, "ADX Length")
// RSI
rsiLength = input.int(14, "RSI Length")
rsiOverbought = input.int(70, "RSI Overbought")
rsiOversold = input.int(30, "RSI Oversold")
// Bollinger Bands
bbLength = input.int(20, "BB Length")
bbStdDev = input.float(2.0, "BB Std Dev", step=0.1)
// Stop-Loss
stopLossPerc = input.float(1.0, "Stop-Loss %", step=0.1)
// ———— Calculations ———— //
// Supertrend
[supertrend, direction] = ta.supertrend(supertrendMultiplier, atrPeriod)
// EMAs
ema20 = ta.ema(close, ema20Period)
ema50 = ta.ema(close, ema50Period)
// ADX via DMI (corrected)
[dip, din, adx] = ta.dmi(adxLength, adxLength) // ta.dmi(diLength, adxSmoothing)
// RSI
rsi = ta.rsi(close, rsiLength)
// Bollinger Bands
basis = ta.sma(close, bbLength)
upperBB = basis + ta.stdev(close, bbLength) * bbStdDev
lowerBB = basis - ta.stdev(close, bbLength) * bbStdDev
// VWAP
vwapValue = ta.vwap(hlc3)
// ———— Strategy Logic ———— //
trendingMarket = adx > adxThreshold
// Trend-Following Strategy
emaBullish = ema20 > ema50
priceAboveVWAP = close > vwapValue
longConditionTrend = trendingMarket and direction < 0 and emaBullish and priceAboveVWAP
shortConditionTrend = trendingMarket and direction > 0 and not emaBullish and close < vwapValue
// Range-Bound Strategy
priceNearLowerBB = close <= lowerBB
priceNearUpperBB = close >= upperBB
longConditionRange = not trendingMarket and priceNearLowerBB and rsi < rsiOversold
shortConditionRange = not trendingMarket and priceNearUpperBB and rsi > rsiOverbought
// ———— Entries/Exits ———— //
if (longConditionTrend or longConditionRange)
strategy.entry("Long", strategy.long)
stopPriceLong = strategy.position_avg_price * (1 - stopLossPerc / 100)
strategy.exit("Exit Long", "Long", stop=stopPriceLong)
if (shortConditionTrend or shortConditionRange)
strategy.entry("Short", strategy.short)
stopPriceShort = strategy.position_avg_price * (1 + stopLossPerc / 100)
strategy.exit("Exit Short", "Short", stop=stopPriceShort)
// Exit on Supertrend flip or RSI extremes
if (direction > 0 or rsi >= rsiOverbought)
strategy.close("Long")
if (direction < 0 or rsi <= rsiOversold)
strategy.close("Short")
// ———— Visualization ———— //
plot(supertrend, "Supertrend", color = direction < 0 ? color.green : color.red)
plot(ema20, "20 EMA", color.blue)
plot(ema50, "50 EMA", color.orange)
plot(vwapValue, "VWAP", color.purple)
plot(upperBB, "Upper BB", color.gray)
plot(lowerBB, "Lower BB", color.gray)