
이 전략은 이동 평균의 교차와 상대적으로 강한 지수 ((RSI) 를 결합한 양적 거래 시스템이며, 또한 손실 추적 기능을 통합합니다. 이 전략은 9주기 및 21주기 이동 평균을 주요 트렌드 판단 지표로 사용하고, RSI 지표와 함께 거래 신호를 확인하고, 동적으로 손실을 추적하여 수익을 보호하고 위험을 제어합니다. 전략 설계는 시장 추세, 동력 및 위험 관리의 세 가지 차원을 충분히 고려하여 완전한 거래 시스템을 형성합니다.
전략의 핵심 논리는 다음과 같은 핵심 요소에 기초합니다.
이 전략은 기술 분석의 고전적 지표를 결합하여 트렌드 추적과 동력 특성을 겸비한 거래 시스템을 구축한다. 그것의 핵심 장점은 다차원적인 신호 확인 메커니즘과 완벽한 위험 관리 시스템이다. 지속적인 최적화 및 개선으로, 이 전략은 다양한 시장 환경에서 안정적인 성능을 유지할 것으로 보인다.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("ojha's Intraday MA Crossover + RSI Strategy with Trailing Stop", overlay=true)
// Define Moving Averages
fastLength = 9
slowLength = 21
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)
// Define RSI
rsiPeriod = 14
rsiValue = ta.rsi(close, rsiPeriod)
// Define Conditions for Long and Short
longCondition = ta.crossover(fastMA, slowMA) and rsiValue > 55
shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue < 45
// Define the trailing stop distance (e.g., 1% trailing stop)
trailingStopPercent = 1.0
// Variables to store the entry candle high and low
var float longEntryLow = na
var float shortEntryHigh = na
// Variables for trailing stop levels
var float longTrailingStop = na
var float shortTrailingStop = na
// Exit conditions
exitLongCondition = rsiValue > 80
exitShortCondition = rsiValue < 22
// Stop-loss conditions (price drops below long entry candle low * 1% or exceeds short entry candle high * 1%)
longStopLoss = longEntryLow > 0 and close < longEntryLow * 0.99
shortStopLoss = shortEntryHigh > 0 and close > shortEntryHigh * 1.01
// Execute Buy Order and store the entry candle low for long stop-loss
if (longCondition)
strategy.entry("Long", strategy.long)
longEntryLow := low // Store the low of the candle where long entry happened
longTrailingStop := close * (1 - trailingStopPercent / 100) // Initialize trailing stop at entry
// Execute Sell Order and store the entry candle high for short stop-loss
if (shortCondition)
strategy.entry("Short", strategy.short)
shortEntryHigh := high // Store the high of the candle where short entry happened
shortTrailingStop := close * (1 + trailingStopPercent / 100) // Initialize trailing stop at entry
// Update trailing stop for long position
if (strategy.opentrades > 0 and strategy.position_size > 0)
longTrailingStop := math.max(longTrailingStop, close * (1 - trailingStopPercent / 100)) // Update trailing stop as price moves up
// Update trailing stop for short position
if (strategy.opentrades > 0 and strategy.position_size < 0)
shortTrailingStop := math.min(shortTrailingStop, close * (1 + trailingStopPercent / 100)) // Update trailing stop as price moves down
// Exit Buy Position when RSI is above 80, Stop-Loss triggers, or trailing stop is hit
if (exitLongCondition or longStopLoss or close < longTrailingStop)
strategy.close("Long")
longEntryLow := na // Reset the entry low after the long position is closed
longTrailingStop := na // Reset the trailing stop
// Exit Sell Position when RSI is below 22, Stop-Loss triggers, or trailing stop is hit
if (exitShortCondition or shortStopLoss or close > shortTrailingStop)
strategy.close("Short")
shortEntryHigh := na // Reset the entry high after the short position is closed
shortTrailingStop := na // Reset the trailing stop
// Plot Moving Averages on the Chart
plot(fastMA, color=color.green, title="9-period MA")
plot(slowMA, color=color.red, title="21-period MA")
// Plot RSI on a separate panel
rsiPlot = plot(rsiValue, color=color.blue, title="RSI")
hline(50, "RSI 50", color=color.gray)
hline(80, "RSI 80", color=color.red)
hline(22, "RSI 22", color=color.green)
// Plot Trailing Stop for Visualization
plot(longTrailingStop, title="Long Trailing Stop", color=color.red, linewidth=1, style=plot.style_line)
plot(shortTrailingStop, title="Short Trailing Stop", color=color.green, linewidth=1, style=plot.style_line)