
Chiến lược này là một hệ thống theo dõi xu hướng kết hợp các phương pháp phân tích kỹ thuật truyền thống và trí tuệ nhân tạo hiện đại. Nó chủ yếu sử dụng chỉ số di chuyển trung bình (EMA) và trung bình di chuyển đơn giản (SMA) làm bộ lọc xu hướng, đồng thời giới thiệu mô hình dự đoán để tối ưu hóa thời gian đầu vào. Chiến lược được tối ưu hóa đặc biệt cho cấp độ đường nét, nhằm mục đích nắm bắt xu hướng thị trường trung hạn dài hạn.
Chiến lược này bao gồm 3 phần chính:
Việc tạo ra tín hiệu giao dịch cần phải đáp ứng cả hướng xu hướng và tính nhất quán của tín hiệu dự báo, đó là:
Chiến lược này được xây dựng một hệ thống theo dõi xu hướng vững chắc bằng cách kết hợp phân tích kỹ thuật truyền thống và phương pháp dự báo hiện đại. Ưu điểm chính của nó là rõ ràng về logic, có thể kiểm soát rủi ro và khả năng mở rộng mạnh mẽ.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("My Strategy", overlay=true)
// Parameters (adjust as needed)
neighborsCount = 8
maxBarsBack = 2000
featureCount = 5
useDynamicExits = true
useEmaFilter = true
emaPeriod = 200
useSmaFilter = true
smaPeriod = 200
// Moving Average Calculations
ema = ta.ema(close, emaPeriod)
sma = ta.sma(close, smaPeriod)
// Trend Conditions
isEmaUptrend = close > ema
isEmaDowntrend = close < ema
isSmaUptrend = close > sma
isSmaDowntrend = close < sma
// Model Prediction (Replace with your real model)
// Here a simulation is used, replace it with real predictions
prediction = math.random() * 2 - 1 // Random value between -1 and 1
// Entry Signals
isNewBuySignal = prediction > 0 and isEmaUptrend and isSmaUptrend
isNewSellSignal = prediction < 0 and isEmaDowntrend and isSmaDowntrend
// Exit Signals
var int barsHeld = 0
var bool in_position = false
var int entry_bar = 0
if isNewBuySignal and not in_position
in_position := true
entry_bar := bar_index
barsHeld := 1
else if isNewSellSignal and not in_position
in_position := true
entry_bar := bar_index
barsHeld := 1
else if in_position
barsHeld := barsHeld + 1
if barsHeld == 4
in_position := false
endLongTradeStrict = barsHeld == 4 and isNewBuySignal[1]
endShortTradeStrict = barsHeld == 4 and isNewSellSignal[1]
// Backtest Logic
var float totalProfit = 0
var float entryPrice = na
var int tradeDirection = 0
if isNewBuySignal and tradeDirection <= 0
entryPrice := close
tradeDirection := 1
strategy.entry("Long", strategy.long)
if isNewSellSignal and tradeDirection >= 0
entryPrice := close
tradeDirection := -1
strategy.entry("Short", strategy.short)
if (endLongTradeStrict and tradeDirection == 1) or (endShortTradeStrict and tradeDirection == -1)
exitPrice = close
profit = (exitPrice - entryPrice) / entryPrice
if tradeDirection == -1
profit := (entryPrice - exitPrice) / entryPrice
totalProfit := totalProfit + profit
tradeDirection := 0
strategy.close_all()
plot(close, color=color.blue)
plot(ema, color=color.orange)
plot(sma, color=color.purple)