Strategi ini merupakan sistem trend-following yang cerdas berdasarkan dua moving average, yang mengidentifikasi tren pasar dengan menghitung moving average high dan low bersama dengan indikator slope, dikombinasikan dengan mekanisme profit-taking dan stop-loss dinamis untuk manajemen risiko.
Strategi ini menggunakan sistem rata-rata bergerak ganda sebagai logika trading intinya, menghitung rata-rata bergerak pada seri harga tinggi dan rendah. sinyal panjang dihasilkan ketika harga pecah di atas rata-rata atas dengan kemiringan positif yang signifikan, sementara sinyal pendek terjadi ketika harga pecah di bawah rata-rata bawah dengan kemiringan negatif yang signifikan. Untuk menghindari perdagangan yang sering di pasar osilasi, strategi ini menggabungkan mekanisme ambang kemiringan, mengkonfirmasi validitas tren hanya ketika perubahan kemiringan rata-rata bergerak melebihi ambang yang ditetapkan. Untuk manajemen risiko, strategi menerapkan mekanisme pengambilan keuntungan dan stop-loss yang dinamis, awalnya menggunakan target keuntungan yang agresif sambil menetapkan trailing stop untuk melindungi keuntungan yang diperoleh.
Ini adalah strategi perdagangan kuantitatif yang secara organik menggabungkan mengikuti tren dengan manajemen risiko. Melalui kerjasama sistem rata-rata bergerak ganda dan ambang kemiringan, strategi dapat dengan akurat menangkap tren pasar, sementara mekanisme pengambilan keuntungan dan stop-loss dinamis memberikan kontrol risiko yang komprehensif. Meskipun ada ruang untuk perbaikan dalam pemilihan parameter dan kemampuan beradaptasi pasar, kerangka kerja logis yang jelas dan sistem parameter yang fleksibel memberikan dasar yang baik untuk optimasi berikutnya. Dianjurkan agar pedagang secara menyeluruh backtest dan mengoptimalkan berbagai parameter sesuai dengan karakteristik pasar tertentu dan preferensi risiko mereka sendiri ketika menerapkan strategi dalam perdagangan langsung.
/*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)