
Chiến lược này là một hệ thống theo dõi xu hướng dựa trên tín hiệu giao nhau của đường trung bình động kép, kết hợp với cơ chế dừng lỗ và dừng lãi động. Chiến lược này sử dụng đường trung bình động đơn giản (SMA) 5 kỳ và 12 kỳ để tạo tín hiệu giao dịch và tối ưu hóa tỷ lệ rủi ro-lợi nhuận bằng cách điều chỉnh động mức chốt lời và mức dừng lỗ. Mức chốt lời ban đầu được đặt ở mức 10% và mức dừng lỗ được đặt ở mức 5%. Khi giá di chuyển theo hướng thuận lợi, mức chốt lời được điều chỉnh thành 20% và mức dừng lỗ được thắt chặt thành 2,5%. để bảo vệ lợi nhuận.
Logic cốt lõi của chiến lược này dựa trên mối quan hệ giao thoa giữa đường trung bình động nhanh (5 kỳ) và đường trung bình động chậm (12 kỳ). Khi đường nhanh cắt đường chậm từ dưới lên trên, hệ thống sẽ tạo ra tín hiệu dài và mở một vị thế; khi đường nhanh cắt đường chậm từ trên xuống dưới, hệ thống sẽ đóng vị thế. Điểm độc đáo của chiến lược này nằm ở cơ chế quản lý rủi ro động: khi một vị thế được thiết lập, hệ thống sẽ theo dõi xu hướng giá theo thời gian thực và điều chỉnh mức chốt lời và dừng lỗ một cách linh hoạt theo những thay đổi về giá để tối đa hóa lợi nhuận trong khi vẫn kiểm soát được rủi ro. .
Chiến lược này đạt được khả năng nắm bắt xu hướng hiệu quả và kiểm soát rủi ro linh hoạt bằng cách kết hợp các tín hiệu giao thoa trung bình động cổ điển với các cơ chế quản lý rủi ro linh hoạt sáng tạo. Khái niệm thiết kế chiến lược rõ ràng, phương pháp thực hiện ngắn gọn và hiệu quả, có tính thực tiễn và khả năng mở rộng tốt. Thông qua việc tối ưu hóa và cải tiến liên tục, chiến lược này dự kiến sẽ đạt được hiệu suất lợi nhuận ổn định trong các giao dịch thực tế.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("My Moving Average Crossover Strategy with Take Profit and Stop Loss", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//risk_free_rate = float(request.security("IRUS", "D", close)/request.security("IRUS", "D", close[1]) - 1 ))
// MA periods
fastLength = input.int(5, title="Fast MA Length")
slowLength = input.int(12, title="Slow MA Length")
// Take Profit and Stop Loss
takeProfitLevel = input(10, title="Take Profit (пункты)") // Take profit % from the last price
stopLossLevel = input(5, title="Stop Loss (пункты)") // Stop loss % from the last price
takeProfitLevel_dyn = input(20, title="Dynamic Take Profit (пункты)") // Move TP if current_price higher buy_px
stopLossLevel_dyn = input(2.5, title="Dynamic Stop Loss (пункты)") // S Move SL if current_price higher buy_px
// Вычисление скользящих средних
fastMA = ta.sma(close, fastLength)
slowMA= ta.sma(close, slowLength)
// Conditions for Sell and Buy
longCondition = ta.crossover (fastMA, slowMA) // покупаем, если короткая MA персекает длинную снизу-вверх
shortCondition = ta.crossunder(fastMA, slowMA) // продаем, если короткая MA персекает длинную сверху-вниз
// Buy position condition
if (longCondition)
strategy.entry("Buy", strategy.long)
// Dynamic TP SL leveles
takeProfitPrice = strategy.position_avg_price * (1+ takeProfitLevel / 100)
stopLossPrice = strategy.position_avg_price * (1-stopLossLevel / 100)
entryPrice = strategy.position_avg_price
if (strategy.position_size > 0) // если есть открытая позиция
// takeProfitPrice := entryPrice * (1+ takeProfitLevel / 100)
// stopLossPrice := entryPrice * (1-stopLossLevel / 100)
// // Перемещение Stop Loss и Take Profit
if (close > entryPrice)
takeProfitPrice := close * (1+ takeProfitLevel_dyn / 100)
stopLossPrice := close * (1- stopLossLevel_dyn/ 100)
if (shortCondition)
strategy.close("Buy")
strategy.exit("Take Profit/Stop loss", "Buy", limit=takeProfitPrice, stop=stopLossPrice)
// Drawing MA lines
plot(fastMA, color=color.blue, title="Fast Moving Average")
plot(slowMA, color=color.orange, title="Slow Moving Average")
// Визуализация
plot(longCondition ? na : takeProfitPrice, title="Take Profit Level", color=color.green, linewidth=1, style=plot.style_line)
plot(longCondition ? na: stopLossPrice, title="Stop Loss Level", color=color.red, linewidth=1, style=plot.style_line)