低ボラティリティ買い高ボラティリティ買い戦略


作成日: 2024-01-08 11:33:58 最終変更日: 2024-01-08 11:33:58
コピー: 0 クリック数: 607
1
フォロー
1617
フォロワー

低ボラティリティ買い高ボラティリティ買い戦略

概要

この戦略は,低変動率と高変動率の期間中の資産の購入の違いを研究することを目的としています. それは,モードの入力変数を変更することによって,低変動率と高変動率の期間中の購入を選択することをユーザーに許可します.

戦略原則

この策略はATRとSMAを計算することで波動率を決定する.具体的には,ATRのSMAを計算し,ATRとSMAの比率を計算する.この比率がユーザ定義の値であるvolatilityTargetRatioより高い場合,波動率が高いと考えられる.この値より低い場合,波動率が低いと考えられる.

戦略は,ユーザが選択したモードに応じて,波動率が高いか低いときに買い信号を生成する. 購入すると,戦略は,一定のバー数 (sellAfterNBarsLengthによって定義される) を保持し,その後平仓する.

優位分析

この戦略の主な利点は以下の通りです.

  1. 低波動期と高波動期における買い戦略のパフォーマンスを直感的に比較できます.
  2. SMAでATRを平滑化して,偽突破をフィルターする.
  3. 異なる波動率レベルをパラメータの調整でテストすることができます.

リスク分析

この戦略の主なリスクは以下の通りです.

  1. 価格が上昇するチャンスを逃してしまうかもしれません.
  2. システムリスクは,高変動率のみの購入によって増加する可能性があります.
  3. パラメータを正しく設定しない場合,購入のタイミングを逃したり,早めに平仓したりする可能性があります.

これらのリスクは,パラメータを調整し,異なる波動率レベルを組み合わせて購入することで緩和できます.

最適化の方向

この戦略はさらに改善できます.

  1. 異なるATR長度パラメータをテストする.
  2. ストップ・ロスの策略を増やすこと
  3. 他の指標と組み合わせたフィルタリング偽破裂.
  4. 取引の条件を最適化する.

要約する

この戦略は,低波動率と高波動率の買取戦略のパフォーマンスを効果的に比較できます.それは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)