
Strategi ini adalah sistem pemantauan trend pintar yang berasaskan dua garis rata-rata, mengenal pasti trend pasaran dengan mengira purata bergerak pada titik tinggi dan rendah dan penunjuk kemerosotan, dan menguruskan risiko dengan mekanisme berhenti berhenti yang dinamik. Inti strategi ini adalah untuk menyaring isyarat palsu melalui kemerosotan kemerosotan, sambil menggunakan pemantauan dinamik trailing stop untuk mengunci keuntungan, mewujudkan gabungan organik pemantauan trend dan kawalan risiko.
Strategi ini menggunakan sistem dua garis rata sebagai logik perdagangan teras, mengira purata bergerak pada urutan harga tertinggi dan terendah masing-masing. Apabila harga menembusi garis rata-rata ke atas dan garis rata-rata bersandar ke atas dengan ketara, sistem menghasilkan banyak isyarat; apabila harga jatuh di bawah garis rata-rata dan garis rata-rata bersandar ke bawah dengan ketara, sistem menghasilkan isyarat kosong. Untuk mengelakkan perdagangan yang kerap di pasaran yang bergolak, strategi ini memperkenalkan mekanisme penurunan nilai, yang hanya mengesahkan keberkesanan trend apabila perubahan dalam garis rata-rata bersandar melebihi nilai set.
Ini adalah strategi perdagangan kuantitatif yang menggabungkan trend dan pengurusan risiko secara organik. Dengan menggunakan sistem dua garis lurus dan penurunan nilai kemerosotan, strategi ini dapat menangkap trend pasaran dengan lebih tepat, sementara mekanisme stop-loss yang dinamik memberikan kawalan risiko yang baik. Walaupun strategi ini masih mempunyai ruang untuk diperbaiki dalam pilihan parameter dan kesesuaian pasaran, tetapi kerangka logik yang jelas dan sistem parameter yang fleksibel memberikan asas yang baik untuk pengoptimuman 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)