
Chiến lược này sử dụng hai đường trung bình di chuyển ((MA) để tạo ra tín hiệu giao dịch. Khi MA có chu kỳ ngắn hơn đi từ dưới lên qua MA có chu kỳ dài hơn, tạo ra tín hiệu mua; Khi MA có chu kỳ ngắn hơn đi từ trên xuống qua MA có chu kỳ dài hơn, tạo ra tín hiệu bán. Chiến lược này đồng thời thiết lập khoảng thời gian giao dịch ((8 giờ đến 20 giờ UTC) và điểm dừng ((150 điểm).
Chiến lược này dựa trên sự giao thoa của hai trung bình di chuyển trong hai chu kỳ khác nhau để tạo ra tín hiệu giao dịch và phù hợp với thị trường đang có xu hướng. Bằng cách thiết lập khoảng thời gian giao dịch và điểm dừng cố định, rủi ro có thể được kiểm soát ở một mức độ nào đó. Tuy nhiên, chiến lược này có thể không hoạt động tốt trong thị trường bất ổn và điểm dừng cố định có thể hạn chế không gian lợi nhuận của chiến lược.
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Moving Average Crossover Strategy", overlay=true)
// User-defined moving average periods
ma1Periods = input(5, title="First Moving Average Periods")
ma2Periods = input(20, title="Second Moving Average Periods")
// Calculate moving averages
ma1 = sma(close, ma1Periods)
ma2 = sma(close, ma2Periods)
// Plot moving averages
plot(ma1, color=color.red, linewidth=2, title="First Moving Average")
plot(ma2, color=color.blue, linewidth=2, title="Second Moving Average")
// Detect crossovers and crossunders
bullishCross = crossover(ma1, ma2)
bearishCross = crossunder(ma1, ma2)
// Define trading hours (8 AM to 2 PM UTC)
startHour = 8
endHour = 20
utcHour = hour(time, "UTC")
isMarketOpen = true
// Define profit target
profitTarget = 150
// Check if the price has closed above/below the MA for the past 4 bars
aboveMa = close[4] > ma1[4] and close[3] > ma1[3] and close[2] > ma1[2] and close[1] > ma1[1]
belowMa = close[4] < ma1[4] and close[3] < ma1[3] and close[2] < ma1[2] and close[1] < ma1[1]
// Create buy and sell signals
if (bullishCross and isMarketOpen and aboveMa)
strategy.entry("Buy", strategy.long)
strategy.exit("Sell", "Buy", profit=profitTarget)
if (bearishCross and isMarketOpen and belowMa)
strategy.entry("Sell", strategy.short)
strategy.exit("Cover", "Sell", profit=profitTarget)
// Plot shapes on crossovers
plotshape(series=bullishCross and isMarketOpen and aboveMa, location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=bearishCross and isMarketOpen and belowMa, location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")