Strategi Perdagangan Range Akhir Pekan

Penulis:ChaoZhang, Tanggal: 2023-09-13 11:53:09
Tag:

Strategi ini secara khusus memperdagangkan perubahan harga akhir pekan dengan menentukan arah panjang/pendek berdasarkan band persentase yang telah ditetapkan sebelumnya.

Logika Strategi:

  1. Tetapkan rentang persentase berdasarkan penutupan Jumat sebelumnya, misalnya 4,5% naik/turun.

  2. Masuk short jika harga melebihi band upside, masuk panjang jika di bawah band downside.

  3. Tambahkan posisi saat mencapai band baru dalam arah yang ada.

  4. Mengambil keuntungan ketika akumulasi keuntungan mencapai ambang, seperti 10%.

  5. Biarkan maksimal dua posisi secara bersamaan, satu di setiap arah.

Keuntungan:

  1. Band persentase tetap memungkinkan perdagangan mekanis.

  2. Entri multi-level mencapai basis biaya yang lebih baik.

  3. Periodicity stabil, tidak terpengaruh oleh fundamental.

Risiko:

  1. Tidak dapat membatasi ukuran kerugian perdagangan tunggal, risiko kehilangan perdagangan besar.

  2. Parameter tetap gagal menyesuaikan volatilitas yang berubah dari periode ke periode.

  3. Periodicity dapat berubah dari waktu ke waktu, membatalkan model.

Singkatnya, strategi ini sering diperdagangkan pada siklus akhir pekan tetapi menghadapi tantangan mengunci keuntungan secara konsisten.


/*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()
 






Lebih banyak