
Strategi ini adalah sistem pelacakan tren cerdas berbasis dua rata-rata, mengidentifikasi tren pasar dengan menghitung rata-rata bergerak dari titik tinggi dan rendah dan indikator kemiringan, dan mengelola risiko dengan mekanisme stop-loss dinamis. Inti dari strategi ini adalah memfilter sinyal palsu melalui penurunan nilai kemiringan, sementara menggunakan pelacakan dinamis trailing stop untuk mengunci keuntungan, mewujudkan kombinasi organik dari pelacakan tren dan pengendalian risiko.
Strategi ini menggunakan sistem dua rata-rata sebagai logika perdagangan inti, menghitung rata-rata bergerak pada urutan harga tertinggi dan terendah masing-masing. Ketika harga menembus garis rata-rata ke atas dan garis rata-rata bergeser ke atas secara signifikan, sistem menghasilkan beberapa sinyal; Ketika harga jatuh di bawah garis rata-rata dan garis rata-rata bergeser ke bawah secara signifikan, sistem menghasilkan sinyal kosong.
Ini adalah strategi perdagangan kuantitatif yang menggabungkan pelacakan tren dan manajemen risiko secara organik. Dengan kombinasi sistem dua garis lurus dan penurunan nilai, strategi dapat menangkap tren pasar dengan lebih akurat, sementara mekanisme stop-loss yang dinamis memberikan kontrol risiko yang baik. Meskipun ada ruang untuk perbaikan dalam pemilihan parameter dan adaptasi pasar, kerangka logika yang jelas dan sistem parameter yang fleksibel memberikan dasar yang baik untuk optimasi selanjutnya.
/*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("SMA Buy/Sell Strategy with Significant Slope", overlay=true)
// Parametri configurabili
smaPeriod = input.int(20, title="SMA Period", minval=1)
initialTPPercent = input.float(5.0, title="Initial Take Profit (%)", minval=0.1) // Take Profit iniziale (ambizioso)
trailingSLPercent = input.float(1.0, title="Trailing Stop Loss (%)", minval=0.1) // Percentuale di trailing SL
slopeThreshold = input.float(0.05, title="Slope Threshold (%)", minval=0.01) // Soglia minima di pendenza significativa
// SMA calcolate su HIGH e LOW
smaHigh = ta.sma(high, smaPeriod)
smaLow = ta.sma(low, smaPeriod)
// Funzioni per pendenza significativa
isSignificantSlope(sma, threshold) =>
math.abs(sma - sma[5]) / sma[5] > threshold / 100
slopePositive(sma) =>
sma > sma[1] and isSignificantSlope(sma, slopeThreshold)
slopeNegative(sma) =>
sma < sma[1] and isSignificantSlope(sma, slopeThreshold)
// Condizioni di BUY e SELL
buyCondition = close > smaHigh and low < smaHigh and close[1] < smaHigh and slopePositive(smaHigh)
sellCondition = close < smaLow and high > smaLow and close[1] > smaLow and slopeNegative(smaLow)
// Plot delle SMA
plot(smaHigh, color=color.green, linewidth=2, title="SMA 20 High")
plot(smaLow, color=color.red, linewidth=2, title="SMA 20 Low")
// Gestione TP/SL dinamici
longInitialTP = strategy.position_avg_price * (1 + initialTPPercent / 100)
shortInitialTP = strategy.position_avg_price * (1 - initialTPPercent / 100)
// Trailing SL dinamico
longTrailingSL = close * (1 - trailingSLPercent / 100)
shortTrailingSL = close * (1 + trailingSLPercent / 100)
// Chiusura di posizioni attive su segnali opposti
if strategy.position_size > 0 and sellCondition
strategy.close("Buy", comment="Close Long on Sell Signal")
if strategy.position_size < 0 and buyCondition
strategy.close("Sell", comment="Close Short on Buy Signal")
// Apertura di nuove posizioni con TP iniziale e Trailing SL
if buyCondition
strategy.entry("Buy", strategy.long, comment="Open Long")
strategy.exit("Long TP/Trailing SL", from_entry="Buy", limit=longInitialTP, stop=longTrailingSL)
if sellCondition
strategy.entry("Sell", strategy.short, comment="Open Short")
strategy.exit("Short TP/Trailing SL", from_entry="Sell", limit=shortInitialTP, stop=shortTrailingSL)