過去のボラティリティレンジブレイクアウト取引戦略


作成日: 2023-09-21 20:38:29 最終変更日: 2023-09-21 20:38:29
コピー: 1 クリック数: 677
1
フォロー
1617
フォロワー

概要

この戦略は,価格の歴史的な波動区間に基づいて取引信号を決定する. それは,特定の周期内の最高価格と最低価格の差値を計算し,移動平均を使用して波動区間を形成する. 価格が,この区間の上下軌道を破るとき,取引信号を生成する.

戦略原則

この戦略の核心指標は,価格の歴史的変動率である.具体的には以下の計算方法が用いられる.

  1. 過去のN根Barの最高値と最低値の差を計算し,HLとして記します.

  2. 過去のN根Barの最高値と最低値の平均値avg ((H,L) を計算する

  3. 波動率 = HL / avg (H,L)

Nは”Volatility Length”のパラメータである。

波動率を計算すると,

軌道上 = 現時点のclose + 現時点のclose * 変動率

下線 = 現在のclose - 現在のclose * 変動率

上下線はWMA均線で平滑処理され,パラメータは”Average Length”である。

価格が上昇すると,多めに;価格が低下すると,空っぽに.

平仓信号は”Exit Type”のパラメータによって与えられている.

  1. Exit TypeがVolatility MAであるとき,価格はWMA平均線平準ポジションを破った.

  2. Exit TypeがRange Crossoverになったとき,価格は上下軌道平準状態に戻った.

戦略的優位性

  • 価格の変動率を使用し,トレンドの動きを捉える
  • WMA均線処理により,区間が安定し,信頼性が向上する
  • 突破的な入場は,トレンドの転換点を把握するのに便利です.
  • 平均線または上下線を突破すると,タイムストーピング
  • パラメータの最適化スペースが広く,異なる市場に対応できる

戦略リスク

  • 区間突破は急落の危険性がある
  • トレンドが逆転すると,大きな損失を被る可能性があります.
  • WMA平均線は時としてトレンド転換を認識するのに不十分です.
  • パラメータを最適化するには,多くの試行錯誤が必要です.
  • 資金管理に重点を置く

リスクは以下のような方法で軽減できます

  • バージョンを安定し,信頼性を高めるため,パラメータを最適化
  • 他の指標の判断に加えれば 逆転を避ける
  • SIZEを縮小し,資金管理を重視する
  • 再入学制度への参加を検討

最適化の方向

この戦略は以下の点で最適化できます.

  1. パラメータ最適化

異なるLengthパラメータをテストして,最適なパラメータの組み合わせを見つけます.

  1. 判断の他の指標に追加

例えば,価格が突破して軌道に乗ったとき,MACDも同時に金叉を打った場合,入場はもっとやる。

  1. 損失を抑える方法を最適化

単純な区間突破ストップではなく,弾力的な追跡ストップに最適化できます.

  1. 再入学メカニズムを追加

ストローアウトの後に,トレンドが継続する場合は,再エントリー条件を設定して,トレンドを再び追跡することができる.

  1. ポジション管理の最適化

市場変動に応じてポジションを動的に調整する.

要約する

この戦略は,全体的に傾向的な状況に適しており,波動率の軌道と下軌道を用いてトレンドの方向と強さを判断し,WMA平均線と連携してより信頼性の高い取引区画を形成し,突破買い売りポイントを生成する.しかし,トレンドの判断が遅れている,止損方法が改善されるなど,いくつかの問題もあります.我々は,実物データに対して大量にリテックおよび最適化を行い,数値設定と戦略のルールを調整し,誤入誤出の確率を低下させ,戦略が異なる市場で優れたパフォーマンスを発揮できるようにする.同時に,厳格な資金管理は,戦略が長期的に利益を得られるかどうかの鍵でもある.

ストラテジーソースコード
/*backtest
start: 2023-09-13 00:00:00
end: 2023-09-20 00:00:00
period: 5m
basePeriod: 1m
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/
// © wbburgin

//@version=5
strategy("Volatility Range Breakout Strategy [wbburgin]", shorttitle = "VRB Strategy [wbburgin]", overlay=true,
 pyramiding=20,max_bars_back=2000,initial_capital=10000)

wma(float priceType,int length,float weight) =>
    norm = 0.0
    sum = 0.0
    for i = 0 to length - 1
        norm := norm + weight
        sum := sum + priceType[i] * weight
    sum / norm

// This definition of volatility uses the high-low range divided by the average of that range.
volatility(source,length) =>
    h = ta.highest(source,length)
    l = ta.lowest(source,length)
    vx = 2 * (h - l) / (h + l)
    vx

vm1 = input.int(100,"Average Length")
volLen = input.int(100,"Volatility Length")
vsrc = input.source(close,"Volatility Source")
cross_type = input.source(close,"Exit Source")
exit_type = input.string("Volatility MA",options=["Volatility MA","Range Crossover"],title="Exit Type")

volatility = volatility(vsrc,volLen)

highband1 = close + (close * volatility)
lowband1 = close - (close * volatility)
hb1 = wma(highband1,vm1,volatility)
lb1 = wma(lowband1,vm1,volatility)
hlavg = math.avg(hb1,lb1)

upcross = ta.crossover(high,hb1)    //Crossing over the high band of historical volatility signifies a bullish breakout
dncross = ta.crossunder(low,lb1)    //Crossing under the low band of historical volatility signifies a bearish breakout

vlong = upcross
vshort = dncross
vlong_exit = switch
    exit_type == "Volatility MA" => ta.crossunder(cross_type,hlavg)
    exit_type == "Range Crossover" => ta.crossunder(cross_type,hb1)
vshort_exit = switch
    exit_type == "Volatility MA" => ta.crossover(cross_type,hlavg)
    exit_type == "Range Crossover" => ta.crossover(cross_type,lb1)

if vlong
    strategy.entry("Long",strategy.long)
if vlong_exit
    strategy.close("Long")
if vshort
    strategy.entry("Short",strategy.short)
if vshort_exit
    strategy.close("Short")

plot(hlavg,color=color.white,title="Weighted Volatility Moving Average")
t = plot(hb1,color=color.new(color.red,50),title="Volatility Reversal Band - Top")
b = plot(lb1,color=color.new(color.green,50),title="Volatility Reversal Band - Bottom")

alertcondition(vlong,"Volatility Long Entry Signal")
alertcondition(vlong_exit,"Volatility Long Exit Signal")
alertcondition(vshort,"Volatility Short Entry Signal")
alertcondition(vshort_exit,"Volatility Short Exit Signal")

fill(t,b,color=color.new(color.aqua,90))