Strategi ini bertujuan untuk mempelajari perbedaan antara membeli aset pada periode volatilitas rendah dan tinggi. Hal ini memungkinkan pengguna untuk memilih untuk membeli pada periode volatilitas rendah dan tinggi dengan mengubah mode input variabel.
Strategi ini menentukan tingkat fluktuasi dengan menghitung ATR dan SMA-nya. Secara khusus, ia menghitung SMA untuk ATR dan kemudian menghitung rasio ATR terhadap SMA-nya. Jika rasio ini lebih tinggi dari ambang batas volatilityTargetRatio yang didefinisikan pengguna, maka nilai fluktuasi dianggap tinggi; jika lebih rendah dari ambang batas tersebut, maka nilai fluktuasi dianggap rendah.
Bergantung pada mode yang dipilih pengguna, strategi menghasilkan sinyal beli pada saat volatilitas tinggi atau rendah. Setelah membeli, strategi akan memegang sejumlah bar (definisi oleh sellAfterNBarsLength) dan kemudian menetap.
Keuntungan utama dari strategi ini adalah sebagai berikut:
Risiko utama dari strategi ini adalah sebagai berikut:
Risiko di atas dapat dikurangi dengan menyesuaikan parameter dan membeli kombinasi tingkat fluktuasi yang berbeda.
Strategi ini dapat dioptimalkan lebih lanjut:
Strategi ini dapat secara efektif membandingkan kinerja strategi volatilitas rendah dan volatilitas tinggi. Strategi ini menggunakan SMA untuk meluruskan ATR dan menghasilkan sinyal perdagangan sesuai dengan tingkat volatilitas. Strategi ini dapat ditingkatkan dengan menyesuaikan parameter dan mengoptimalkan kondisi.
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © I11L
//@version=5
strategy("I11L - Better Buy Low Volatility or High Volatility?", overlay=false)
mode = input.string("Buy low Volatility",options = ["Buy low Volatility","Buy high Volatility"])
volatilityTargetRatio = input.float(1,minval = 0, maxval = 100,step=0.1, tooltip="1 equals the average atr for the security, a lower value means that the volatility is lower")
atrLength = input.int(14)
atr = ta.atr(atrLength) / close
avg_atr = ta.sma(atr,atrLength*5)
ratio = atr / avg_atr
sellAfterNBarsLength = input.int(5, step=5, minval=0)
var holdingBarsCounter = 0
if(strategy.opentrades > 0)
holdingBarsCounter := holdingBarsCounter + 1
isBuy = false
if(mode == "Buy low Volatility")
isBuy := ratio < volatilityTargetRatio
else
isBuy := ratio > volatilityTargetRatio
isClose = holdingBarsCounter > sellAfterNBarsLength
if(isBuy)
strategy.entry("Buy",strategy.long)
if(isClose)
holdingBarsCounter := 0
strategy.exit("Close",limit=close)
plot(ratio, color=isBuy[1] ? color.green : isClose[1] ? color.red : color.white)
plot(1, color=color.white)