スーパートレンドチャネルに基づくブレイクアウト取引戦略


作成日: 2024-02-18 14:19:58 最終変更日: 2024-02-18 14:19:58
コピー: 2 クリック数: 683
1
フォロー
1617
フォロワー

スーパートレンドチャネルに基づくブレイクアウト取引戦略

概要

この戦略は超トレンドチャネル指標に基づいて開発された.これは,価格の動きと超トレンドチャネルの方向を組み合わせて,市場の動きを判断し,チャネルの方向が転換したときに取引シグナルを発信する.

価格が超トレンドチャネルを突破すると,買い上げをする.価格が超トレンド下チャネルを突破すると,空売りをする.同時に,トレンド追跡のストップ・ロスの仕組みがある.

戦略原則

超トレンドチャネルは,上軌道と下軌道で構成されている。チャネル内部は整合領域であり,チャネル外部はトレンド領域である。それは,平均実際の波動範囲を倍数で掛け,チャネルの幅を決定する。

価格が下から上線を突破すると,買いの信号となる。これは新しい上昇傾向が開始されることを意味する。価格が上から下線を突破すると,売りの信号となる。これは新しい下降傾向が開始されることを意味する。

この戦略は,スーパートレンドのチャネル指標を使用して,主要なトレンドの方向を判断する.チャネル方向が転じるとき,つまり価格がチャネル軌道を破るとき,取引信号を発信する.その後,トレンドを追跡して,利益をロックする.

優位分析

これはシンプルで直感的な突破策であり,以下の利点があります.

  1. 超トレンドチャネルを使って,主要なトレンドの方向を判断し,ノイズiBで儲かることを避ける.

  2. 価格と通路の関係から判断すると空き時間が増えるのです.

  3. リスク管理のための明確なストップダメージメカニズムがある.

  4. ストップ・ロスはトレンドを追跡するストップ・ロスで,最大限の利益を確保する.

リスクと改善

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

  1. 超トレンドチャネルのパラメータが正しく設定されていなければ,偽信号が発生する可能性があります.

  2. 突破信号は短期的な反転信号であり,その結果,損失が生じます.

  3. ストップはトレンドを追跡するストップのみで,早めにストップする可能性があります.

改善策は以下の通りです.

  1. 異なる市場のデータをテストし,パラメータを最適化します.

  2. 他の指標と組み合わせたフィルター信号.

  3. 価格構造と組み合わせて,突破信号の信頼性を判断する.

  4. 背景の損失を増加させ,リスクをさらに制御する.

要約する

この戦略は,全体として,比較的シンプルで直感的なトレンド追跡戦略である.これは,超トレンドチャネルを使用して,トレンドの方向を明確に判断し,チャネルが転じるときにシグナルを生成し,その後,トレンド追跡のストップ・ロスを使って,利益をロックする.

他の指標と比較して,スーパートレンドチャネルは価格変動に包容性が優れている。しかし,この戦略にも一定の利潤の余地があり,信号フィルタリングや止損方法などから最適化して,さらに安定性を高めることができる。

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

//@version=4
strategy("Supertrend TEST Strategy", overlay = true, format=format.price, precision=2)

Periods = input(title="ATR Period", type=input.integer, defval=4)
src = input(hlc3, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=4.7)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
tp=close
sl=close

atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green )
plotshape(buySignal and showsignals ? up : na, title="Лонг", text="Лонг", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white )
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red )
plotshape(sellSignal and showsignals ? dn : na, title="Шорт", text="Шорт", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white )
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white



if (strategy.position_size > 0)
	tp:=tp[1]
	sl:=up
	strategy.exit("Long_TP/SL","Long",limit=tp, stop=sl)
	
if (strategy.position_size < 0)
	tp:=tp[1]
	sl:=dn
	strategy.exit("Short_TP/SL","Short",limit=tp, stop=sl)



if buySignal 
	tp:=close+(close-up)*0.382
    strategy.entry("Long", strategy.long,  limit=tp, comment=tostring(round(tp)))
if sellSignal
	tp:=close-(dn-close)*0.382
    strategy.entry("Short", strategy.short, limit=tp, comment=tostring(round(tp)))