
この戦略は,低変動率と高変動率の期間中の資産の購入の違いを研究することを目的としています. それは,モードの入力変数を変更することによって,低変動率と高変動率の期間中の購入を選択することをユーザーに許可します.
この策略はATRとSMAを計算することで波動率を決定する.具体的には,ATRのSMAを計算し,ATRとSMAの比率を計算する.この比率がユーザ定義の値であるvolatilityTargetRatioより高い場合,波動率が高いと考えられる.この値より低い場合,波動率が低いと考えられる.
戦略は,ユーザが選択したモードに応じて,波動率が高いか低いときに買い信号を生成する. 購入すると,戦略は,一定のバー数 (sellAfterNBarsLengthによって定義される) を保持し,その後平仓する.
この戦略の主な利点は以下の通りです.
この戦略の主なリスクは以下の通りです.
これらのリスクは,パラメータを調整し,異なる波動率レベルを組み合わせて購入することで緩和できます.
この戦略はさらに改善できます.
この戦略は,低波動率と高波動率の買取戦略のパフォーマンスを効果的に比較できます.それはSMAを平らなATRを使用して,波動率レベルに応じて取引信号を生成します.この戦略は,パラメータの調整と最適化条件によって改善することができます.全体的に,この戦略は,波動率戦略の研究に有効なツールを提供します.
/*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)