Chiến lược này đặc biệt giao dịch các biến động giá cuối tuần bằng cách xác định hướng dài / ngắn dựa trên các dải tỷ lệ phần trăm được đặt trước.
Chiến lược logic:
Thiết lập tỷ lệ phần trăm dựa trên kết thúc thứ Sáu trước đó, ví dụ 4,5% tăng / giảm.
Nhập ngắn nếu giá vượt quá dải tăng, nhập dài nếu dưới dải giảm.
Thêm vị trí khi đạt đến các băng tần mới theo hướng hiện tại.
Lấy lợi nhuận khi lợi nhuận tích lũy đạt ngưỡng, chẳng hạn như 10%.
Cho phép tối đa hai vị trí đồng thời, một ở mỗi hướng.
Ưu điểm:
Phạm vi tỷ lệ phần trăm cố định cho phép giao dịch cơ học.
Các mục nhập nhiều cấp đạt được cơ sở chi phí tốt hơn.
Thời kỳ là ổn định, không bị ảnh hưởng bởi các yếu tố cơ bản.
Rủi ro:
Không thể giới hạn kích thước lỗ giao dịch duy nhất, có nguy cơ thua lỗ giao dịch lớn.
Các thông số cố định không thích nghi với sự biến động thay đổi qua các giai đoạn.
Thời kỳ có thể thay đổi theo thời gian, vô hiệu hóa mô hình.
Tóm lại, chiến lược này thường giao dịch trong chu kỳ cuối tuần nhưng phải đối mặt với những thách thức khóa lợi nhuận một cách nhất quán.
/*backtest start: 2023-01-01 00:00:00 end: 2023-09-12 00:00:00 period: 2d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //Copyright Boris Kozak // strategy("XBT Weekend Trade Strategy", overlay=true, default_qty_type=strategy.percent_of_equity,) strategy.initial_capital=50000 leverage = input(10,"Leverage") profitTakingPercentThreshold = input(0.10,"Profit Taking Percent Threshold") //****Code used for setting up backtesting.****/// testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(12, "Backtest Start Month") testStartDay = input(10, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2025, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FFFF : na bgcolor(testPeriodBackgroundColor, transp=50) testPeriod() => true //****END Code used for setting up backtesting.****/// //*** Main entry point is here***// // Figure out how many days since the Friday close days_since_friday = if dayofweek == 6 0 else if dayofweek == 7 1 else if dayofweek == 1 2 else if dayofweek == 2 3 else if dayofweek == 3 4 else if dayofweek == 4 5 else 6 // Grab the Friday close price fridaycloseprice = security(syminfo.ticker,'D',close[days_since_friday]) plot(fridaycloseprice) // Only perform backtesting during the window specified if testPeriod() // If we've reached out profit threshold, exit all positions if ((strategy.openprofit/strategy.initial_capital) > profitTakingPercentThreshold) strategy.close_all() // Only execute this trade on saturday and sunday (UTC) if (dayofweek == 7.0 or dayofweek == 1.0) // Begin - Empty position (no active trades) if (strategy.position_size == 0) // If current close price > threshold, go short if ((close>fridaycloseprice*1.045)) strategy.entry("Short Entry", strategy.short, leverage) else // If current close price < threshold, go long if (close<(fridaycloseprice*0.955)) strategy.entry("Long Entry",strategy.long, leverage) // Begin - we already have a position if (abs(strategy.position_size) > 0) // We are short if (strategy.position_size < 0) if ((close>strategy.position_avg_price*1.045)) // Add to the position strategy.entry("Adding to Short Entry", strategy.short, leverage) else if ((close<strategy.position_avg_price*0.955)) strategy.entry("Adding to Long Entry",strategy.long,leverage) // On Monday, if we have any open positions, close them if (dayofweek==2.0) strategy.close_all()