
이 전략은 여러 기술 지표가 결합된 트렌드 추적 시스템이다. RSI, MACD, SMA의 교차 신호를 기반으로 거래 방향을 결정하는 동시에 ATR 지표를 사용하여 스톱로스 및 수익 수준을 동적으로 조정한다. 이 전략은 충분한 시장 유동성에서 거래되는 것을 보장하기 위해 거래량 필터를 통합하고, 자금 관리를 최적화하기 위해 일부 스톱 메커니즘을 사용합니다.
이 전략은 트레이드 신호를 확인하기 위해 3차 확인을 사용합니다.
다중 검증의 목적은 가짜 신호를 줄이고 거래의 정확성을 높이는 것이다. 전략은 다중 조건이 충족될 때 ((상향 + RSI에 40 + MACD를 상향으로 + 거래량 확인) 포지션을 개설하고 ATR의 2배를 스톱로스로, 4배를 스톱로 사용한다.
이것은 다중 기술 지표의 조합 사용으로 안정적인 거래 시스템을 구축하는 포괄적 인 트렌드 추적 전략입니다. 전략의 주요 특징은 보안을 보장하면서 동적인 중지 및 수익 메커니즘을 통해 시장 변화에 적응하는 것입니다.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy( title="AI Trade Strategy v2 (Extended) - Fixed", shorttitle="AI_Trade_v2", overlay=true, format=format.price, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)
//============================================================================
//=== 1) Basic Indicators (SMA, RSI, MACD) ==================================
//============================================================================
// Time Filter (optional, you can update)
inDateRange = (time >= timestamp("2018-01-01T00:00:00")) and (time <= timestamp("2069-01-01T00:00:00"))
// RSI Parameters
rsiLength = input.int(14, "RSI Period")
rsiOB = input.int(60, "RSI Overbought Level")
rsiOS = input.int(40, "RSI Oversold Level")
rsiSignal = ta.rsi(close, rsiLength)
// SMA Parameters
smaFastLen = input.int(50, "SMA Fast Period")
smaSlowLen = input.int(200, "SMA Slow Period")
smaFast = ta.sma(close, smaFastLen)
smaSlow = ta.sma(close, smaSlowLen)
// MACD Parameters
fastLength = input.int(12, "MACD Fast Period")
slowLength = input.int(26, "MACD Slow Period")
signalLength = input.int(9, "MACD Signal Period")
[macdLine, signalLine, histLine] = ta.macd(close, fastLength, slowLength, signalLength)
//============================================================================
//=== 2) Additional Filter (Volume) ========================================
//============================================================================
useVolumeFilter = input.bool(true, "Use Volume Filter?")
volumeMaPeriod = input.int(20, "Volume MA Period")
volumeMa = ta.sma(volume, volumeMaPeriod)
// If volume filter is enabled, current bar volume should be greater than x times the average volume
volMultiplier = input.float(1.0, "Volume Multiplier (Volume > x * MA)")
volumeFilter = not useVolumeFilter or (volume > volumeMa * volMultiplier)
//============================================================================
//=== 3) Trend Conditions (SMA) ============================================
//============================================================================
isBullTrend = smaFast > smaSlow
isBearTrend = smaFast < smaSlow
//============================================================================
//=== 4) Entry Conditions (RSI + MACD + Trend + Volume) ====================
//============================================================================
// RSI crossing above 30 + Bullish Trend + Positive MACD + Volume Filter
longCondition = isBullTrend and ta.crossover(rsiSignal, rsiOS) and (macdLine > signalLine) and volumeFilter
shortCondition = isBearTrend and ta.crossunder(rsiSignal, rsiOB) and (macdLine < signalLine) and volumeFilter
//============================================================================
//=== 5) ATR-based Stop + Trailing Stop ===================================
//============================================================================
atrPeriod = input.int(14, "ATR Period")
atrMultiplierSL = input.float(2.0, "Stop Loss ATR Multiplier")
atrMultiplierTP = input.float(4.0, "Take Profit ATR Multiplier")
atrValue = ta.atr(atrPeriod)
//============================================================================
//=== 6) Trade (Position) Management ======================================
//============================================================================
if inDateRange
//--- Long Entry ---
if longCondition
strategy.entry(id="Long", direction=strategy.long, comment="Long Entry")
//--- Short Entry ---
if shortCondition
strategy.entry(id="Short", direction=strategy.short, comment="Short Entry")
//--- Stop & TP for Long Position ---
if strategy.position_size > 0
// ATR-based fixed Stop & TP calculation
longStopPrice = strategy.position_avg_price - atrValue * atrMultiplierSL
longTakeProfit = strategy.position_avg_price + atrValue * atrMultiplierTP
// PARTIAL EXIT: (Example) take 50% of the position at early TP
partialTP = strategy.position_avg_price + (atrValue * 2.5)
strategy.exit( id = "Partial TP Long", stop = na, limit = partialTP, qty_percent= 50, from_entry = "Long" )
// Trailing Stop + Final ATR Stop
// WARNING: trail_offset=... is the offset in price units.
// For example, in BTCUSDT, a value like 300 means a 300 USDT trailing distance.
float trailingDist = atrValue * 1.5
strategy.exit( id = "Long Exit (Trail)", stop = longStopPrice, limit = longTakeProfit, from_entry = "Long", trail_offset= trailingDist )
//--- Stop & TP for Short Position ---
if strategy.position_size < 0
// ATR-based fixed Stop & TP calculation for Short
shortStopPrice = strategy.position_avg_price + atrValue * atrMultiplierSL
shortTakeProfit = strategy.position_avg_price - atrValue * atrMultiplierTP
// PARTIAL EXIT: (Example) take 50% of the position at early TP
partialTPShort = strategy.position_avg_price - (atrValue * 2.5)
strategy.exit( id = "Partial TP Short", stop = na, limit = partialTPShort, qty_percent= 50, from_entry = "Short" )
// Trailing Stop + Final ATR Stop for Short
float trailingDistShort = atrValue * 1.5
strategy.exit( id = "Short Exit (Trail)", stop = shortStopPrice, limit = shortTakeProfit, from_entry = "Short", trail_offset= trailingDistShort )
//============================================================================
//=== 7) Plot on Chart (SMA, etc.) =========================================
//============================================================================
plot(smaFast, color=color.blue, linewidth=2, title="SMA (Fast)")
plot(smaSlow, color=color.orange, linewidth=2, title="SMA (Slow)")
// (Optional) Plot Stop & TP levels dynamically:
longStopForPlot = strategy.position_size > 0 ? strategy.position_avg_price - atrValue * atrMultiplierSL : na
longTPForPlot = strategy.position_size > 0 ? strategy.position_avg_price + atrValue * atrMultiplierTP : na
shortStopForPlot = strategy.position_size < 0 ? strategy.position_avg_price + atrValue * atrMultiplierSL : na
shortTPForPlot = strategy.position_size < 0 ? strategy.position_avg_price - atrValue * atrMultiplierTP : na
plot(longStopForPlot, color=color.red, style=plot.style_linebr, title="Long Stop")
plot(longTPForPlot, color=color.green, style=plot.style_linebr, title="Long TP")
plot(shortStopForPlot, color=color.red, style=plot.style_linebr, title="Short Stop")
plot(shortTPForPlot, color=color.green, style=plot.style_linebr, title="Short TP")