Strategies KB.ZH
Strategies

多指标融合自适应趋势交易策略-Multi-Indicator-Adaptive-Trend-Trading-Strategy

ianzeng123 · PineScript · Trend Following · 2025-02-21 11:34:21

All strategies →

No English write-up in the source (no author description).

Read the Chinese version →

Source code (68 lines)
/*backtest
start: 2024-02-22 00:00:00
end: 2025-02-19 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Optimized BTC Trading Strategy v2", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)

// Input parameters
emaShort = ta.ema(close, 9)
emaLong = ta.ema(close, 21)

// RSI settings
rsi = ta.rsi(close, 14)
rsiBuyLevel = 40
rsiSellLevel = 60

// MACD settings
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)

// Supertrend settings
factor = input.float(3, title="Supertrend Factor")
atrLength = input.int(10, title="ATR Length")
[superTrend, superTrendDirection] = ta.supertrend(factor, atrLength)

// Risk Management (Stop Loss & Take Profit)
stopLossPercent = 0.05  // 5%
takeProfitPercent = 0.10  // 10%
trailingStopPercent = 0.02  // 2% trailing stop for additional security
breakevenBuffer = 0.01  // 1% breakeven buffer

// Fetching average price once to avoid repeated calculations
var float avgPrice = na
if strategy.position_size != 0
    avgPrice := strategy.position_avg_price

// Stop Loss & Take Profit Levels
longSL = avgPrice * (1 - stopLossPercent)
longTP = avgPrice * (1 + takeProfitPercent)
shortSL = avgPrice * (1 + stopLossPercent)
shortTP = avgPrice * (1 - takeProfitPercent)
breakevenLevel = avgPrice * (1 + breakevenBuffer)

// Entry Conditions
buyCondition = ta.crossover(emaShort, emaLong) and rsi > rsiBuyLevel and rsi < 70 and (macdLine > signalLine) and superTrendDirection == 1
sellCondition = ta.crossunder(emaShort, emaLong) and rsi < rsiSellLevel and rsi > 30 and (macdLine < signalLine) and superTrendDirection == -1

// Ensure no conflicting trades
if buyCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", from_entry="Long", limit=longTP, stop=longSL, trail_points=trailingStopPercent * avgPrice)
    strategy.exit("Breakeven", from_entry="Long", stop=breakevenLevel)

if sellCondition and strategy.position_size >= 0
    strategy.close("Long")
    strategy.entry("Short", strategy.short)
    strategy.exit("Short Exit", from_entry="Short", limit=shortTP, stop=shortSL, trail_points=trailingStopPercent * avgPrice)
    strategy.exit("Breakeven", from_entry="Short", stop=breakevenLevel)

// Plot Buy & Sell signals with trend-based color indicators
plotshape(series=buyCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="BUY", size=size.small)
plotshape(series=sellCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="SELL", size=size.small)

// Trend Indicator (for better visualization)
plot(superTrend, color=superTrendDirection == 1 ? color.green : color.red, linewidth=2, title="Supertrend")