Chiến lược giao dịch biến động cuối tuần

Tác giả:ChaoZhang, Ngày: 2023-11-16 10:53:01
Tags:

img

Tổng quan

Chiến lược này thiết lập các điều kiện đầu vào dài và ngắn dựa trên giá đóng cửa thứ Sáu, và đi dài hoặc ngắn sau khi mở thứ Bảy và Chủ nhật, thoát khỏi tất cả các vị trí trước khi mở thứ Hai.

Nguyên tắc

  1. Ghi giá đóng cửa ngày thứ Sáu như giá tham khảo
  2. Vào ngày thứ Bảy và chủ nhật mở cửa:
    • Nếu giá trên 105% của ngày thứ sáu đóng cửa, đi ngắn
    • Nếu giá thấp hơn 95% trong ngày đóng cửa thứ Sáu, mua dài.
  3. Lợi nhuận được thiết lập ở mức 3% vốn ban đầu
  4. Đóng tất cả các vị trí trước khi mở cửa thứ Hai

Phân tích lợi thế

  1. Giao dịch vào cuối tuần có khối lượng và biến động thấp để giảm rủi ro thị trường
  2. Các quy tắc nhập và xuất rõ ràng đơn giản hóa việc thực hiện chiến lược
  3. Theo đuổi lợi nhuận nhỏ ổn định với các giao dịch ngắn hạn
  4. Chuyển đổi vốn cao với chu kỳ ngắn

Phân tích rủi ro

  1. Sự biến động giá cuối tuần có thể nhỏ hơn dự kiến, không thể mở các vị trí
  2. Sự biến động quá mức có thể gây ra lệnh dừng lỗ
  3. Các sự kiện quan trọng vào thứ Hai có thể gây ra khoảng cách giá, không thể ngăn chặn tổn thất kịp thời

Giải pháp rủi ro:

  1. Điều chỉnh phạm vi biến động cho các mục
  2. Đặt điểm dừng lỗ thích hợp
  3. Đóng các vị trí sớm, tránh giữ trong cuối tuần

Hướng dẫn tối ưu hóa

  1. Điều chỉnh ngưỡng nhập khẩu dựa trên các đặc điểm sản phẩm khác nhau
  2. Tối ưu hóa các quy tắc lấy lợi nhuận dựa trên kết quả backtest
  3. Chọn đòn bẩy dựa trên quy mô vốn
  4. Thêm các bộ lọc chỉ số như trung bình động vào các mục thời gian

Tóm lại

Chiến lược giao dịch ngắn hạn này có logic và các biện pháp kiểm soát rủi ro rất rõ ràng. Với điều chỉnh tham số thích hợp và thử nghiệm và tối ưu hóa liên tục, nó có thể tạo ra lợi nhuận đầu tư ổn định. Đồng thời, rủi ro mất mát cuối tuần lớn do biến động quá mức cần phải được quản lý thông qua kiểm soát rủi ro thích hợp.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
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,initial_capital=20000)
leverage = input(1,"Leverage")
profitTakingPercentThreshold = input(0.03,"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 = request.security(syminfo.tickerid,'D',close[days_since_friday])
plot(fridaycloseprice)
strategy.initial_capital = 50000
// 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
                strategy.entry("Long Entry",strategy.long,leverage)
    // On Monday, if we have any open positions, close them 
    if (dayofweek==2.0)
        strategy.close_all()
 






Thêm nữa