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

Tác giả:ChaoZhang, Ngày: 2023-09-13 11:53:09
Tags:

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:

  1. 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.

  2. 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.

  3. Thêm vị trí khi đạt đến các băng tần mới theo hướng hiện tại.

  4. Lấy lợi nhuận khi lợi nhuận tích lũy đạt ngưỡng, chẳng hạn như 10%.

  5. Cho phép tối đa hai vị trí đồng thời, một ở mỗi hướng.

Ưu điểm:

  1. Phạm vi tỷ lệ phần trăm cố định cho phép giao dịch cơ học.

  2. Các mục nhập nhiều cấp đạt được cơ sở chi phí tốt hơn.

  3. 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:

  1. 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.

  2. 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.

  3. 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()
 






Thêm nữa