
Chiến lược này dựa trên việc thực hiện nhiều giao dịch ngắn và dài trong các giao dịch chuyển động trung bình và giao dịch chết, đồng thời dựa trên các số liệu thống kê về lợi nhuận của máy chủ đầu tiên, chỉ dừng lỗ và dừng lỗ vào buổi chiều để tránh bị cản trở bởi tỷ lệ biến động cao của giao dịch buổi sáng.
Chiến lược này sử dụng moving average với 3 tham số khác nhau: đường 14 ngày, đường 28 ngày và đường 56 ngày. Làm nhiều khi đường 14 ngày đi qua đường 56 ngày; làm trống khi đường 14 ngày đi qua đường 56 ngày. Đây là phương pháp cơ bản để theo dõi xu hướng đường dài. Để lọc một số tiếng ồn, chiến lược cũng thêm đường 28 ngày làm tham chiếu, chỉ khi đường 14 ngày đồng thời cao hơn hoặc thấp hơn đường 28 ngày sẽ phát ra tín hiệu giao dịch.
Sự đổi mới quan trọng của chiến lược này là nó chỉ dừng lại trong khoảng từ 4 đến 5 giờ chiều. Theo thống kê, có khả năng 70% giá cao nhất và giá thấp nhất trong ngày sẽ xảy ra trong giờ đầu tiên mở cửa. Để tránh tác động của biến động cao vào chiến lược trong thời gian mở cửa, chỉ dừng lại trong thời gian giao dịch buổi chiều.
Chiến lược này có một số lợi thế:
Chiến lược này cũng có những rủi ro sau:
Chiến lược này có thể được tối ưu hóa hơn nữa ở những khía cạnh sau:
Chiến lược này có ý tưởng tổng thể rõ ràng và dễ hiểu, sử dụng hiệu quả các tính năng mở cửa thiết kế logic dừng lỗ, có thể tránh sự biến động cao trong thời gian đầu, đáng để thử nghiệm và tối ưu hóa thêm. Nhưng cũng có nguy cơ bị lấp và bỏ lỡ cơ hội, cần điều chỉnh tham số cho từng cổ phiếu. Nhìn chung, chiến lược này cung cấp một ý tưởng giao dịch định lượng đơn giản và hiệu quả cho người mới bắt đầu.
/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("MAC 1st Trading Hour Walkover", overlay=true)
// Setting up timeperiod for testing
startPeriodYear = input(2014, "Backtest Start Year")
startPeriodMonth = input(1, "Backtest Start Month")
startPeriodDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(startPeriodYear, startPeriodMonth, startPeriodDay, 0, 0)
stopPeriodYear = input(2025, "Backtest Stop Year")
stopPeriodMonth = input(12, "Backtest Stop Month")
stopPeriodDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(stopPeriodYear, stopPeriodMonth, stopPeriodDay, 0, 0)
// Moving Averages
ema14 = ema(close, 14)
ema28 = ema(close, 28)
sma56 = sma(close, 56)
// Plot
plot(ema14, title="ema14", linewidth=2, color=green)
plot(ema28, title="ema28", linewidth=2, color=red)
plot(sma56, title="sma56", linewidth=3, color=blue)
// Strategy
goLong = cross(ema14, sma56) and ema14 > ema28
goShort = cross(ema14, sma56) and ema14 < ema28
// Strategy.When to enter
if time >= testPeriodStart
if time <= testPeriodStop
strategy.entry("Go Long", strategy.long, 1.0, when=goLong)
strategy.entry("Go Short", strategy.short, 1.0, when=goShort)
// Strategy.When to take profit
if time >= testPeriodStart
if time <= testPeriodStop
strategy.exit("Close Long", "Go Long", profit=2000)
strategy.exit("Close Short", "Go Short", profit=2000)
// Strategy.When to stop out
// Some studies show that 70% of the days high low happen in the first hour
// of trading. To avoid having that volatility fire our loss stop we
// ignore price action in the morning, but allow stops to fire in the afternoon.
if time("60", "1000-1600")
strategy.exit("Close Long", "Go Long", loss=500)
strategy.exit("Close Short", "Go Short", loss=500)