
Strategi ini bertujuan untuk mengkaji perbezaan antara membeli aset semasa turun naik rendah dan turun naik tinggi. Ia membolehkan pengguna memilih untuk membeli semasa turun naik rendah dan turun naik tinggi dengan mengubah mod input pembolehubah.
Strategi ini menentukan kadar turun naik dengan mengira ATR dan SMA-nya. Khususnya, ia mengira SMA ATR dan kemudian mengira nisbah ATR terhadap SMA-nya. Jika nisbah ini lebih tinggi daripada had volatilityTargetRatio yang ditentukan oleh pengguna, maka kadar turun naik dianggap tinggi; jika lebih rendah daripada had itu, maka kadar turun naik dianggap rendah.
Bergantung pada mod pilihan pengguna, strategi menghasilkan isyarat beli apabila turun naik tinggi atau turun naik rendah. Setelah membeli, strategi akan memegang beberapa bar (dikenali oleh sellAfterNBarsLength) dan kemudian menetap.
Kelebihan utama strategi ini ialah:
Risiko utama strategi ini ialah:
Risiko di atas boleh dikurangkan dengan menyesuaikan parameter, menggabungkan pembelian dengan tahap kadar turun naik yang berbeza.
Strategi ini boleh dioptimumkan lagi:
Strategi ini dapat membandingkan dengan berkesan prestasi strategi membeli dengan turun naik rendah dan turun naik tinggi. Ia menggunakan SMA untuk meluruskan ATR dan menghasilkan isyarat perdagangan berdasarkan tahap turun naik. Strategi ini dapat diperbaiki dengan menyesuaikan parameter dan mengoptimumkan keadaan.
/*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)