Strategi ini diperdagangkan secara khusus untuk turun naik harga pada hujung minggu, dengan arah yang lebih terbuka melalui julat kenaikan dan penurunan yang ditetapkan sebelumnya. Ia adalah strategi perdagangan goyah yang tipikal.
Prinsip-prinsip strategi:
Berdasarkan harga penutupan pada Jumaat lepas, letakkan julat kenaikan dan penurunan, contohnya julat terhad kepada kenaikan harga penutupan sebanyak 4.5%
Apabila harga melebihi had atas, lakukan operasi shorting; apabila harga berada di bawah had bawah, lakukan lebih banyak operasi.
Dalam kes di mana terdapat kedudukan, teruskan kedudukan berdasarkan lebih dari satu lapisan baru, seperti kosong atau tambahan.
Apabila keuntungan terakumulasi mencapai peratusan tertentu, kedudukan kosong akan berhenti, contohnya 10%.
Kedudukan yang memegang maksimum dua arah pada satu masa. Semua kedudukan kosong sebelum pembukaan Isnin.
Kelebihan strategi ini:
Tetapkan julat naik turun yang tetap untuk operasi mekanikal.
Ia juga boleh digunakan untuk menjimatkan kos.
Peraturan kitaran adalah stabil dan tidak terjejas oleh asas.
Risiko strategi ini:
Tidak boleh membatasi jumlah kerugian tunggal, terdapat risiko kerugian tunggal yang besar.
Parameter tetap tidak boleh disesuaikan dengan kadar turun naik pasaran dalam tempoh masa yang berbeza.
Peraturan berkala mungkin berubah, membawa risiko model gagal.
Ringkasnya, strategi ini menggunakan peraturan kitaran untuk perdagangan yang kerap, tetapi terdapat masalah kesukaran untuk mengunci keuntungan tertentu. Perlu berhati-hati dengan parameter yang tidak berfungsi dan risiko kerugian tunggal yang terlalu besar, dan beroperasi dengan berhati-hati.
/*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()