この戦略は,スーパートレンド指標に基づいて開発されます.これは価格アクションとスーパートレンドチャネルの方向性を組み合わせて,市場の傾向を判断し,チャネルの方向性が変化すると取引信号を生成します.
価格がスーパートレンドチャネルを突破したとき,ロング;価格がスーパートレンドの下部のチャネルを下回ると,ショート.同時に,トレンド追跡ストップ損失メカニズムがあります.
スーパートレンドチャネルは,上列列と下列列で構成される.チャネル内の領域は統合領域であり,外側の領域はトレンド領域である.チャネルの幅を決定するために,平均の真の範囲を因数で掛け算する.
価格が上から上線を突破すると,それは買い信号です.これは新しい上昇傾向が始まっていることを意味します.価格が上から下線を突破すると,それは売り信号です.これは新しい下向きが始まっていることを意味します.
この戦略は,主要なトレンド方向を判断するためにスーパートレンドインジケーターを使用します.チャネル方向が変化すると,つまり価格がチャネルレールを突破すると,取引信号が生成されます.その後,トレンド追跡ストップロスを使って利益をロックします.
これは比較的シンプルで直感的なブレークアウト戦略です.以下の利点があります:
主なトレンド方向を決定し,ノイズ取引を避けるためにスーパートレンドチャネルを使用します.
価格とチャネルとの関係に基づいて 長期・短期間の機会を判断します
リスクを効果的にコントロールするための 明確なストップ・ロスのメカニズムがあります
ストップ・ロスの方法はトレンド追跡ストップ・ロスで,利益ロックを最大化することができます.
この戦略にはいくつかのリスクもあります.主に以下のようなリスクがあります.
スーパートレンドのパラメータの設定が正しくない場合 誤った信号が生じる可能性があります.
ブレイクシグナルは短期的な逆転シグナルであり,損失をもたらす可能性があります.
ストップロスの方法は,トレンド追跡ストップロスのみで,損失を早めに停止する可能性があります.
対応する改善措置には,次のものがあります.
異なる市場からのデータをテストし パラメータを最適化します
フィルター信号を他の指標と組み合わせる.
価格構造と組み合わせた ブレイクシグナルの信頼性を判断します
バックグラウンドストップ損失を増やしてリスクをさらに制御する.
一般的には,この戦略は,比較的シンプルで直感的なトレンドフォロー戦略である.それはトレンド方向を明確に決定するためにスーパートレンドチャネルを使用し,チャネルが方向を変えるときにシグナルを生成する.その後,トレンドトラッキングストップ損失を使用して利益をロックする.
他の指標と比較して,スーパートレンドチャネルは価格変動に対するよりよい耐性を持っています. しかし,この戦略にはまだ利益の余地があります. 安定性をさらに向上させるために,シグナルフィルタリングとストップ損失方法の観点から最適化することができます.
/*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)))