
Chiến lược này là một hệ thống giao dịch tự động dựa trên các tín hiệu giao nhau của đường trung bình động, giúp tối ưu hóa hiệu suất giao dịch bằng cách thiết lập tỷ lệ rủi ro-lợi nhuận cố định. Chiến lược này sử dụng sự giao nhau của đường trung bình động nhanh (Fast MA) và đường trung bình động chậm (Slow MA) để xác định hướng xu hướng thị trường và kết hợp điểm dừng lỗ và mục tiêu lợi nhuận được đặt trước để quản lý rủi ro vị thế.
Logic cốt lõi của chiến lược này dựa trên các tín hiệu giao nhau được tạo ra bởi hai đường trung bình động của các giai đoạn khác nhau (10 giai đoạn và 30 giai đoạn). Khi đường nhanh cắt đường chậm, hệ thống sẽ tạo ra tín hiệu dài; khi đường nhanh cắt đường chậm, hệ thống sẽ tạo ra tín hiệu ngắn. Sau khi mở mỗi vị thế, hệ thống sẽ tự động tính toán vị thế dừng lỗ dựa trên tỷ lệ dừng lỗ 2% được cài đặt sẵn và đặt mục tiêu lợi nhuận theo tỷ lệ rủi ro-lợi nhuận gấp 2,5 lần. Cách tiếp cận này đảm bảo rằng mỗi giao dịch đều có hồ sơ rủi ro-lợi nhuận cố định.
Chiến lược này xây dựng một hệ thống giao dịch hoàn chỉnh bằng cách kết hợp các phương pháp phân tích kỹ thuật cổ điển với các khái niệm quản lý rủi ro hiện đại. Mặc dù có một số hạn chế nhất định, 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 được kỳ vọng sẽ duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau. Điều quan trọng là phải liên tục điều chỉnh các cài đặt thông số dựa trên kết quả giao dịch thực tế và tìm ra cấu hình phù hợp nhất với môi trường thị trường hiện tại.
/*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=5
strategy("SOL 15m 2.5 R:R Strategy", overlay=true, margin_long=100, margin_short=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)
//---------------------------------------------------
// User Inputs
//---------------------------------------------------
// sym = input.symbol("swap", "Symbol")
timeframe = input.timeframe("15", "Timeframe")
fastLength = input.int(10, "Fast MA Length")
slowLength = input.int(30, "Slow MA Length")
stopLossPerc = input.float(2.0, "Stop Loss %", step=0.1) // This is an example; adjust to achieve ~45% win rate
RR = input.float(2.5, "Risk to Reward Ratio", step=0.1)
//---------------------------------------------------
// Data Sources
//---------------------------------------------------
price = request.security("swap", timeframe, close)
// Compute moving averages
fastMA = ta.sma(price, fastLength)
slowMA = ta.sma(price, slowLength)
// Entry Conditions
longCondition = ta.crossover(fastMA, slowMA)
shortCondition = ta.crossunder(fastMA, slowMA)
//---------------------------------------------------
// Stop Loss and Take Profit Calculation
//---------------------------------------------------
var entryPrice = 0.0
if (strategy.position_size == 0) // not in a position
if longCondition
// Long entry
entryPrice := price
strategy.entry("Long", strategy.long)
if shortCondition
// Short entry
entryPrice := price
strategy.entry("Short", strategy.short)
if strategy.position_size > 0
// We are in a long position
if strategy.position_avg_price > 0 and strategy.position_size > 0
longStop = strategy.position_avg_price * (1 - stopLossPerc/100)
longTarget = strategy.position_avg_price * (1 + (stopLossPerc/100)*RR)
strategy.exit("Long Exit", "Long", stop=longStop, limit=longTarget)
if strategy.position_size < 0
// We are in a short position
if strategy.position_avg_price > 0 and strategy.position_size < 0
shortStop = strategy.position_avg_price * (1 + stopLossPerc/100)
shortTarget = strategy.position_avg_price * (1 - (stopLossPerc/100)*RR)
strategy.exit("Short Exit", "Short", stop=shortStop, limit=shortTarget)
//---------------------------------------------------
// Plotting
//---------------------------------------------------
plot(fastMA, color=color.new(color.teal, 0), title="Fast MA")
plot(slowMA, color=color.new(color.orange, 0), title="Slow MA")