Chiến lược này kết hợp theo xu hướng với cơ chế thoát dựa trên thời gian. Khái niệm cốt lõi là nắm bắt xu hướng thị trường bằng cách theo dõi mối quan hệ giá với đường trung bình động 60 ngày trong khi kết hợp cơ chế thanh lý bắt buộc cuối năm để kiểm soát rủi ro. Các vị trí dài được nhập khi giá đóng phá vỡ trên đường MA 60 ngày với độ dốc tích cực, và tất cả các vị trí được đóng vào ngày giao dịch cuối cùng của mỗi năm.
Chiến lược dựa trên một số yếu tố cốt lõi: 1. Xác định xu hướng: Sử dụng trung bình di chuyển đơn giản 60 ngày (SMA) làm chỉ số xu hướng trung hạn, với tính toán độ dốc 14 ngày để xác nhận hướng xu hướng. 2. Tín hiệu nhập cảnh: Các tín hiệu mua được tạo ra khi giá vượt qua đường MA 60 ngày với độ nghiêng tích cực, cho thấy xu hướng tăng tiềm năng. Cơ chế thoát: Thực hiện một lối thoát dựa trên thời gian cố định, đóng tất cả các vị trí vào ngày giao dịch cuối cùng của mỗi năm để tránh rủi ro vị trí xuyên năm. Quản lý thời gian giao dịch: Bao gồm kiểm soát phạm vi ngày và xác nhận ngày giao dịch để đảm bảo các hoạt động chỉ xảy ra vào ngày giao dịch hợp lệ.
Chiến lược này tạo ra một hệ thống giao dịch tương đối mạnh mẽ bằng cách kết hợp theo xu hướng với quản lý thời gian. Lý thuyết đơn giản và rõ ràng của nó làm cho nó dễ hiểu và thực hiện, cung cấp tiện ích thực tế tốt. Với tối ưu hóa tham số thích hợp và các biện pháp kiểm soát rủi ro bổ sung, chiến lược cho thấy tiềm năng tạo ra lợi nhuận ổn định trong điều kiện giao dịch thực tế.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 3m basePeriod: 3m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("Buy above 60-day MA, Sell at year-end", overlay=true, pyramiding=1) // Define inputs for start and end dates startDate = input(defval=timestamp("2010-01-01"), title="Start Date") endDate = input(defval=timestamp("2024-12-31"), title="End Date") // Define 60-day moving average length = input.int(defval=60, title="MA Length", minval=1) ma = ta.sma(close, length) slope = ta.sma(ma, 14) - ta.sma(ma, 14)[1] // Check if current bar is within the specified date range withinDateRange = true // Function to check if a day is a trading day (Monday to Friday) isTradingDay(day) => true // Check if current bar is the last trading day of the year // Check if current bar is the last trading day of the year isLastTradingDayOfYear = false yearNow = year(time) if (month == 12 and dayofmonth == 31) isLastTradingDayOfYear := isTradingDay(time) else if (month == 12 and dayofmonth == 30) isLastTradingDayOfYear := isTradingDay(time) and not isTradingDay(time + 86400000) else if (month == 12 and dayofmonth == 29) isLastTradingDayOfYear := isTradingDay(time) and not isTradingDay(time + 86400000) and not isTradingDay(time + 86400000 * 2) // Plot moving average plot(ma, color=color.blue, linewidth=2) // Buy when closing price crosses above 60-day MA and up trend if (withinDateRange and ta.crossover(close, ma) and slope > 0) strategy.entry("Buy", strategy.long) // Sell all positions at the last trading day of the year if (isLastTradingDayOfYear) strategy.close_all(comment="Sell at year-end") // Plot buy and sell signals //plotshape(series=ta.crossover(close, ma), location=location.belowbar, color=color.green, style=shape.labelup, text="Buy") //plotshape(series=isLastTradingDayOfYear, location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")