振動チャネル突破戦略


作成日: 2023-11-15 16:01:09 最終変更日: 2023-11-15 16:01:09
コピー: 1 クリック数: 660
1
フォロー
1617
フォロワー

振動チャネル突破戦略

概要

この戦略は,通道指標に基づく突破取引戦略である.これは,通道上下線の揺動特性を利用し,価格が通道上下線を突破するときに多行し,通道下下線を突破するときに空白し,トレンド追跡型の戦略である.

戦略原則

この戦略は,まず,SMA計算チャネルの中軸線を利用し,中軸線に1つのパラメータ値を上軌道に足し,1つのパラメータ値を下軌道に減算して,価格チャネルを形成する.そのあと,価格が上下軌道に突破したかどうかを判断し,取引量の激増と組み合わせて開場シグナルとして使用する.価格が再びチャネルに戻ったとき,平仓シグナルとして使用する.

この戦略の取引の論理は以下の通りです.

  1. 経路の中軸を計算する:SMA ((閉店価格,N)

  2. 通路上の軌道線: 中軸 + 参数値

  3. 通路下軌道:中軸 - パラメータ値

  4. 軌道上線を突破する際,取引量が前回期の2倍以上の条件を満たす場合,追加入場を行う.

  5. 再び通路に突入する際には,

  6. 下軌道線を突破すると,取引量が前の周期の2倍以上の条件を満たす場合,空白入場

  7. 戻り通路に入るときは空頭ポジション

優位分析

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

  1. 経路指数は,価格の動向を効果的に追跡することができます.

  2. 取引量の急増と組み合わせた条件で,偽の突破を効果的にフィルターすることができます.

  3. 戻入チャネルは,単一取引の損失を制限する,止損退出メカニズムである.

  4. ショートラインのトレンドを捉えるのに適した振動特性.

  5. 実現の論理はシンプルで,理解し,実行しやすい.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. 価格が通路側で長期にわたって動いている場合,同方向の開設を連続的に誘発し,損失のリスクを冒します.

  2. チャンネルパラメータの設定を間違えた場合,誤った信号が多く発生する可能性があります.

  3. 取引量の急増の判断基準が不適切であることもあり,本当の突破の信号を逃すこともあります.

  4. 退出を防ぐメカニズムは保守的で,大きな状況を見逃す可能性があります.

最適化の方向

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

  1. 経路のパラメータを最適化して,異なる市場の特性に合わせる.

  2. ポジション開設条件を最適化または増やす.例えば平均線が空っぽすぎるとか,Kline形状などを考慮して,偽突破を避ける.

  3. ストップ・アウト・メカニズムを最適化し,ストップ・アウトの幅を適切に緩和し,早退を避ける.

  4. 市場状況に応じてポジション管理機構を増やし,ポジションと資金活用率を調整する.

  5. 大規模なトレンドの方向性を判断する指標を多く加え,大規模なトレンドと対峙することを避ける.

要約する

この戦略は,全体的に比較してシンプルで実用的なトレンド追跡戦略である.価格チャネルの振動特性を利用し,中短線トレンドを効果的に捕捉することができる.しかし,最適化パラメータの設定に注意し,その中のリスクを防ぎ,より良い戦略効果を得ることができる.より多くの指標と技術手段と組み合わせて最適化すれば,戦略の安定性と収益性をさらに強化することができる.

ストラテジーソースコード
/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Copyright, 2022, Cache_that_pass.  You are free to use this script however you see fit and reproduce it in any manner.

//@version=5

            //////  Name the strategy between the 2 quotation marks.  Consider setting commission type and value in strategy header to match exchanges rates. //////

strategy("Oscillating SSL Channel Strategy", "O-SSL Strat", overlay=true, pyramiding=1, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 100, calc_on_order_fills=true)



            //////  Inputs and calculations used by script  //////

period = input(title='Period', defval=25)
len = input(title='Period', defval=25)
smaHigh = ta.sma(high, len)
smaLow = ta.sma(low, len)
Hlv = int(na)
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

            //////  Show me the money  //////

plot(sslDown, linewidth=2, color=color.new(color.red, 0))
plot(sslUp, linewidth=2, color=color.new(color.lime, 0))


            //////  Trade execution logic  //////  
            
//pseudo-code//
        //Go long when high (or maybe close) breaks above the sslUp and volume is 2x or > Volume[1] and sslUp > sslDown
        //Close the above longs when sslUp crosses under sslDown (or set takeprofit and stop loss exits)
        //
        //Go short when low is lower than the sslUp and volume is 2x or > Volume[1] and sslDown > sslUp
        //Close shorts when sslDown crosses under sslUp

longCondition1 = (sslUp > sslDown)
longCondition2 = ta.crossover(high, sslUp)
//longCondition3 = (volume >= (volume[1]*1.89))
longCondition = ((longCondition1) and (longCondition2))// and (longCondition3))

longExit = ta.crossunder(sslUp, sslDown)

            //////  Bring It  //////
if (longCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (longExit)
    strategy.close("Bring It", comment="Sling It")


shortCondition1 = (sslDown) > (sslUp)
shortCondition2 = ta.crossunder(low, sslUp)
//shortCondition3 = (volume >= (volume[1]*1.89))
shortCondition = ((shortCondition1) and (shortCondition2))// and (shortCondition3))

shortExit = ta.crossunder(sslDown, sslUp)

            //////  Bring It  //////
if (shortCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (shortExit)
    strategy.close("Bring It", comment="Sling It")

            //////  Sling It  //////
if (shortCondition)
    strategy.entry("Sling It", strategy.short)

            //////  Bling It  //////
if (shortExit)
    strategy.close("Sling It", comment="Bring It")