適応型トレンドフォローストップロス戦略


作成日: 2023-10-17 14:04:28 最終変更日: 2023-10-17 14:04:28
コピー: 0 クリック数: 878
1
フォロー
1617
フォロワー

適応型トレンドフォローストップロス戦略

概要

この戦略は,Wilder volatility trailing stopの方法を使用し,ATR指標と異なる種類の移動平均線を組み合わせて,非常に適応性の高いトレンドフォロー型のストップ戦略を実現します.

戦略原則

この戦略の核心は,Wilder volatility trailing stop アルゴリズムである.これは,まずATR指数を計算し,入力されたパラメータに従ってATR指数の長さと倍数を計算し,ダイナミックなストップラインを得ている.そして,閉盘価格,最高価格,最低価格のいずれかのオプションを組み合わせて,ストップラインの高点と低点を絶えず更新している.価格がこのストップラインを破るとき,買取と販売を行う.

f_ma関数で,まず,RMA,EMA,SMA,Hull MAなど,複数の移動平均線を実現します. そして,ATR指標を計算し,ユーザが設定した倍数で,波動率に基づくストップラインが得られます. ストップラインの最高と最低の点を,最高と最低の関数で追跡し,価格がストップラインを破るとき,取引します.

この戦略は,ATR指標,異なるタイプの平均線およびパラメータ設定を柔軟に使用し,非常に適応性の強いトレンド追跡ストップ戦略を実現します.これは,市場が大きな引き下がりを起こしたときに,トレンドを効果的に追跡し,ストップオフを可能にします.

優位分析

  • この戦略は最初に,Wilder Volatility Trailing Stop アルゴリズムを使用し,これは信頼性の高いトレンドトラッキングのストップ方法である.

  • ATR指標のダイナミックな計算により,ストップラインを計算し,ストップポイントが過度に固定されないようにする.ATR指標は,市場の変動率とリスクレベルを効果的に反映できる.

  • コードは,RMA,EMA,SMA,Hull MAなどの複数の均線を選択し,戦略の適応性を強化します.

  • ATRの長さや倍数パラメータを調整することで,異なる市場向けに最適のパラメータを見つけ,戦略の効果を最適化することができる.

  • 戦略は,最高価格,最低価格,閉店価格など,異なる価格を選択して,異なる品種に対して最適化することができるストップローンを計算します.

  • 全体として,この戦略は,信頼性があり,適応性があり,容易に最適化できるトレンド・トラッキング・ストップ・ストラトジーである.

リスク分析

  • この戦略は主にパラメータ最適化に依存し,異なる市場と品種で適切なATRと倍数パラメータの組み合わせをテストする必要があります.そうでなければ,止損効果は良くないかもしれません.

  • 振動の状況では,ATRのストップラインが頻繁にストップを誘発する可能性がある. 振動のトレンドを逃さないために,トレンド判断指標と組み合わせて最適化する必要があります.

  • ストップラインが過度に緩やかになる場合,撤回の機会を逃してしまう.過度に緊密になる場合,取引頻度とスライドポイントのコストが増加する.バランスポイントを見つけるために,慎重にテストする必要があります.

  • 多数の平均線選択は,戦略効果の偏差を引き起こす可能性がある.特定の品種に対して1つの主要な平均線を選択し,他の平均線は補助的な参照のみである.

  • この戦略はトレンド追跡に焦点を当てており,直接利益は得られない.他の入場退出戦略または停止戦略の組み合わせを使用することを考慮する必要がある.

  • パラメータが不適切である場合,戦略が頻繁に取引されるか,長期間保持される問題が発生する可能性があります.これは最適化によって解決する必要があります.

最適化の方向

  • トレンド指数 (Trend Indicators) を加えることで,トレンドがあるかどうかを判断し,波動的な状況に巻き込まれるのを防ぐことができます.

  • 逆転指数要素を加えることで,空頭トレンドと多頭トレンドが交替するときに,より早くストップ・ロスのポジションを向けて変更するテストができます.

  • ATR長さのパラメータを取引品種の特徴と関連付けることができます.異なる品種は異なるATR長さの設定を採用します.

  • 取引量指数を加え,取引量が明らかに減少したときに止損線の緊縮速度を上げることができます.

  • 撤回比率の止損を増加させることも考えられるが,過度に緊密にしないことにより,正常な回転が止損を防ぐことができる.

  • 他の指標の判断力と組み合わせてパラメータを最適化することができ,力が不足した場合に適切な止損範囲を緩めることができる.

要約する

この戦略は,Wilder Volatility Trailing Stopの考えに基づいて,ATR指標を使用して,非常に適応性の高いトレンド追跡型ストップ戦略を設計した.これは,パラメータ最適化によって,異なる取引品種にうまく適応し,信頼性の高い,実用的なストップ戦略である.しかし,我々は,トレンド判断と取引量要素などの追加により,リスクにも注意し,さらに最適化して,より安定して信頼性のあるようにする.そして,他の戦略の組み合わせと使用すると注意して,ストップストップ戦略の最大限の効果を発揮する.

ストラテジーソースコード
/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Wilder's Volatility Trailing Stop Strategy with various MA's
// by SparkyFlary

//For Educational Purposes
//Results can differ on different markets and can fail at any time. Profit is not guaranteed.
strategy(title="Wilder's Volatility Trailing Stop Strategy with various MA's", shorttitle="Trailing Stop Strategy", overlay=true)

AtrMult = input(3.0, title="ATR multiplier")
ATRlength = input(7, title="ATR length")
ATRavgType = input("RMA", title="ATR moving average type", options=["RMA", "EMA", "SMA", "HULL"])
sicType = input("close", title="significant close type for trail calculation", options=["close", "high-low"])

//function for choosing moving averages
f_ma(type, src, len) =>
    float result = 0
    if type == "RMA" // Wilder's moving averaege or Running moving average
        result := rma(src, len)
    if type == "EMA" // Exponential moving average
        result := ema(src, len)
    if type == "SMA" // Simple moving average
        result := sma(src, len)
    if type == "HULL" // Hull moving average
        result := wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))
    result

ATR = f_ma(ATRavgType, tr, ATRlength)
upperTrail = lowest(sicType=="close"?close:low, ATRlength) + AtrMult * ATR
lowerTrail = highest(sicType=="close"?close:high, ATRlength) - AtrMult * ATR

float TS = 0
TS := close < TS[1] ? upperTrail[1] : close > TS[1] ? lowerTrail[1] : TS

//plot
plot(TS, title="trailing stop", color=close<TS?color.red:color.green)

//Strategy
buy = crossover(close, TS)
//sell = close < TS
short = crossunder(close, TS)
//cover = close > TS

strategy.entry(id="enter long", long=true, when=buy)
//strategy.close(id="enter long", comment="exit long", when=sell)
strategy.entry(id="enter short", long=false, when=short)
//strategy.close(id="enter short", comment="exit short", when=cover)