Chiến lược này là một chiến lược giao dịch định lượng dựa trên đường chéo trung bình động và ATR động dừng lỗ và lấy lợi nhuận. Chiến lược này sử dụng hai trung bình di chuyển đơn giản (SMA) với các khoảng thời gian khác nhau để tạo ra tín hiệu giao dịch trong khi sử dụng phạm vi trung bình thực sự (ATR) để thiết lập stop loss và lấy lợi nhuận để kiểm soát rủi ro tốt hơn. Ngoài ra, chiến lược lọc tín hiệu giao dịch dựa trên các phiên giao dịch khác nhau để cải thiện độ bền của nó.
Nguyên tắc cốt lõi của chiến lược này là nắm bắt những thay đổi trong xu hướng giá bằng cách sử dụng đường chéo trung bình động. Khi đường trung bình động nhanh vượt qua đường trung bình di chuyển chậm, một tín hiệu mua được tạo ra; ngược lại, khi đường trung bình động nhanh vượt qua đường trung bình di chuyển chậm, một tín hiệu bán được tạo ra. Đồng thời, chiến lược sử dụng ATR để thiết lập động mức dừng lỗ và lấy lợi nhuận. Mức độ lấy lợi nhuận được thiết lập ở giá nhập cộng 3 lần ATR, trong khi mức độ dừng lỗ được thiết lập ở giá nhập trừ 1,5 lần ATR. Hơn nữa, chiến lược chỉ tạo ra các tín hiệu giao dịch trong phiên giao dịch châu Âu để tránh giao dịch trong thời gian thanh khoản thấp.
Chiến lược này là một chiến lược theo xu hướng đơn giản và dễ hiểu nắm bắt xu hướng giá bằng cách sử dụng đường chéo trung bình động trong khi kiểm soát rủi ro với ATR. Mặc dù chiến lược có một số rủi ro nhất định, nó có thể được cải thiện hơn nữa thông qua tối ưu hóa tham số, lọc tín hiệu và cải thiện quản lý rủi ro. Đối với người mới bắt đầu, chiến lược này là một ví dụ học tập và thực hành tuyệt vời.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Enhanced Moving Average Crossover Strategy", overlay=true) // Input parameters fastLength = input(10, title="Fast MA Length") slowLength = input(50, title="Slow MA Length") atrLength = input(14, title="ATR Length") riskPerTrade = input(1, title="Risk Per Trade (%)") / 100 // Time-based conditions isLondonSession = hour >= 8 and hour <= 15 isAsianSession = hour >= 0 and hour <= 7 isEuropeanSession = hour >= 7 and hour <= 14 // Moving Averages fastMA = ta.sma(close, fastLength) slowMA = ta.sma(close, slowLength) // Average True Range (ATR) for dynamic stop loss and take profit atr = ta.atr(atrLength) // Buy and Sell Conditions buySignal = ta.crossover(fastMA, slowMA) sellSignal = ta.crossunder(fastMA, slowMA) // Dynamic stop loss and take profit stopLoss = close - atr * 1.5 takeProfit = close + atr * 3 // Strategy Logic if (buySignal and isEuropeanSession) strategy.entry("Buy", strategy.long) strategy.exit("Take Profit/Stop Loss", "Buy", limit=takeProfit, stop=stopLoss) if (sellSignal and isEuropeanSession) strategy.entry("Sell", strategy.short) strategy.exit("Take Profit/Stop Loss", "Sell", limit=takeProfit, stop=stopLoss) // Plotting plot(fastMA, color=color.blue, title="Fast MA") plot(slowMA, color=color.red, title="Slow MA") plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")