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