
Chiến lược này là một hệ thống theo dõi xu hướng thông minh dựa trên đường hai chiều, xác định xu hướng thị trường bằng cách tính toán đường trung bình di chuyển của điểm cao và điểm thấp cùng với chỉ số độ dốc và quản lý rủi ro kết hợp với cơ chế dừng dừng lỗ động. Cốt lõi của chiến lược là lọc các tín hiệu giả thông qua độ dốc giảm giá, đồng thời sử dụng theo dõi động theo dõi trailing stop để khóa lợi nhuận, thực hiện sự kết hợp hữu cơ của theo dõi xu hướng và kiểm soát rủi ro.
Chiến lược sử dụng hệ thống hai đường trung bình làm logic giao dịch cốt lõi, tính toán trung bình di chuyển trên các chuỗi giá cao nhất và giá thấp nhất. Khi giá vượt qua đường trung bình trên và đường trung bình dốc lên đáng kể, hệ thống tạo ra nhiều tín hiệu; Khi giá giảm xuống đường trung bình dưới và đường trung bình dốc xuống đáng kể, hệ thống tạo ra tín hiệu trống. Để tránh giao dịch thường xuyên trong thị trường bất ổn, chiến lược giới thiệu cơ chế giảm giá dốc, chỉ xác nhận hiệu quả của xu hướng khi sự thay đổi của đường trung bình dốc vượt quá ngưỡng đặt.
Đây là một chiến lược giao dịch định lượng kết hợp một cách hữu cơ theo dõi xu hướng và quản lý rủi ro. Bằng cách kết hợp hệ thống hai đường thẳng và giá trị giảm giá, chiến lược có thể nắm bắt xu hướng thị trường một cách chính xác hơn, trong khi cơ chế dừng lỗ động cung cấp kiểm soát rủi ro hoàn hảo. Mặc dù có thể cải thiện chiến lược về lựa chọn tham số và khả năng thích ứng với thị trường, nhưng khung logic rõ ràng và hệ thống tham số linh hoạt của nó cung cấp cơ sở tốt cho các tham số tối ưu hóa sau đó.
/*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)