
この戦略は,通道指標に基づく突破取引戦略である.これは,通道上下線の揺動特性を利用し,価格が通道上下線を突破するときに多行し,通道下下線を突破するときに空白し,トレンド追跡型の戦略である.
この戦略は,まず,SMA計算チャネルの中軸線を利用し,中軸線に1つのパラメータ値を上軌道に足し,1つのパラメータ値を下軌道に減算して,価格チャネルを形成する.そのあと,価格が上下軌道に突破したかどうかを判断し,取引量の激増と組み合わせて開場シグナルとして使用する.価格が再びチャネルに戻ったとき,平仓シグナルとして使用する.
この戦略の取引の論理は以下の通りです.
経路の中軸を計算する:SMA ((閉店価格,N)
通路上の軌道線: 中軸 + 参数値
通路下軌道:中軸 - パラメータ値
軌道上線を突破する際,取引量が前回期の2倍以上の条件を満たす場合,追加入場を行う.
再び通路に突入する際には,
下軌道線を突破すると,取引量が前の周期の2倍以上の条件を満たす場合,空白入場
戻り通路に入るときは空頭ポジション
この戦略の利点は以下の通りです.
経路指数は,価格の動向を効果的に追跡することができます.
取引量の急増と組み合わせた条件で,偽の突破を効果的にフィルターすることができます.
戻入チャネルは,単一取引の損失を制限する,止損退出メカニズムである.
ショートラインのトレンドを捉えるのに適した振動特性.
実現の論理はシンプルで,理解し,実行しやすい.
この戦略にはいくつかのリスクがあります.
価格が通路側で長期にわたって動いている場合,同方向の開設を連続的に誘発し,損失のリスクを冒します.
チャンネルパラメータの設定を間違えた場合,誤った信号が多く発生する可能性があります.
取引量の急増の判断基準が不適切であることもあり,本当の突破の信号を逃すこともあります.
退出を防ぐメカニズムは保守的で,大きな状況を見逃す可能性があります.
この戦略は以下の点で最適化できます.
経路のパラメータを最適化して,異なる市場の特性に合わせる.
ポジション開設条件を最適化または増やす.例えば平均線が空っぽすぎるとか,Kline形状などを考慮して,偽突破を避ける.
ストップ・アウト・メカニズムを最適化し,ストップ・アウトの幅を適切に緩和し,早退を避ける.
市場状況に応じてポジション管理機構を増やし,ポジションと資金活用率を調整する.
大規模なトレンドの方向性を判断する指標を多く加え,大規模なトレンドと対峙することを避ける.
この戦略は,全体的に比較してシンプルで実用的なトレンド追跡戦略である.価格チャネルの振動特性を利用し,中短線トレンドを効果的に捕捉することができる.しかし,最適化パラメータの設定に注意し,その中のリスクを防ぎ,より良い戦略効果を得ることができる.より多くの指標と技術手段と組み合わせて最適化すれば,戦略の安定性と収益性をさらに強化することができる.
/*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")