モメンタムADXとRSIを調整可能なトレーリングストップ戦略と組み合わせる


作成日: 2023-10-09 15:36:07 最終変更日: 2023-10-09 15:36:07
コピー: 1 クリック数: 711
1
フォロー
1617
フォロワー

概要

この戦略は,相対的に強い指標 ((RSI)) と相対的に強い指標 ((RSI)) と結合し,トレンドの方向を捕捉し,リスクを制御するために,尾行可能なストップダスのメカニズムを補完します.価格が強い勢いがあるとき,買い物をし,価格が弱い勢いがあるとき,空売りをします.戦略は同時に,ストップダスの条件を設定し,最大利益レベルを追跡するストップダスの尾行を利用して,利益をロックし,損失を減らすことができます.

戦略原則

動量線とRSIの指標は入場を判断する

  • 動力の指標ADXを使用して価格の傾向の方向を判断する

    • ADXが20を超えるとトレンドが確認される

    • +DI線でDI線を横切るときは,看板信号

    • -DI線が+DI線を横切ったときの下落信号

  • RSIは過剰買いと過剰売れを判断する

    • RSIが70を超えれば,買い増やし,下落の兆しとなる

    • RSIが30を下回ると 超売り区間です

ADXがトレンドがあると判断し,RSIが確認信号を発信すると,相応の多空操作を行う.

ストップ・ダメージメカニズム

戦略は,動的に調整可能な追随停止メカニズムを採用し,次の2つのパラメータを含む.

  • アクティベーション比率: ポジション開設後,価格が設定比率に達したときにアクティベーションフォローストップ

  • 追随比:追随のストップダメージが,最近最大の利益から離れている比率

価格がアクティベーション条件に達すると,尾行ストップ・ロッドラインは最高利益レベルを追跡する.価格が逆転すると,ストップ・ロッドラインは尾行下に移動する.逆転幅が設定されたトラッキング比率を超えると,ストップ・ロッドラインはトリガーされ,すべてのポジションを閉鎖する.

優位分析

  • 動力指標はトレンドの方向を判断し,企業に負担をかけるのを避ける

  • RSI指標は逆転の機会を逃さないようにする

  • ストップ・ローズで利益を固定し,損失を減らす.

  • 戦略は明確で簡潔で,実行は分かりやすい.

  • 異なる市場と時間周期に広く適用可能

リスクと対策

  • ADXは偽突破が誤った信号を生むと判断した.

    • ADXパラメータを調整して,真のトレンドの突破を保証します.
  • RSIは複数の偽信号を発信した.

    • 過剰取引を防ぐために,過剰購入と過剰販売のパラメータを調整する
  • 調整可能な損耗パラメータの設定が間違っています.

    • パーメータを最適化して,最適のストップダメージレベルを見つける
  • 大規模な空飛ぶ事故

    • 価格制限を考慮し,損失を回避する

思考を最適化する

  • ADXとRSIの異なるパラメータの組み合わせをテストする

  • 異なるストップダストアクティベーションポイントと追跡幅を検出し,最適なパラメータを探します.

  • 他の指標へのフィルタリングを考慮し,信号の質を向上させる

  • 異なる市場をテストし,一般的なパラメータ設定を決定する

要約する

この戦略は,動量分析,RSI指標および尾行停止メカニズムを統合し,トレンドの方向を効果的に判断し,逆転点の位置を識別し,取引リスクを制御します.戦略の考え方は明確で,実行は簡単で,株式,外貨,デジタル通貨などの市場でのトレンド取引に広く使用できます.パラメータの最適化と指標のフィルタリングにより,戦略のパフォーマンスをさらに向上させることができます.この戦略は,トレーダーにシンプルで信頼性の高い量的な取引プログラムを提供します.

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

//@version=5
strategy("Trailing Stop with RSI", overlay=true)

length = input.int(12, "Momentum Length")
price = close
momentum(seria, length) =>
    mom = seria - seria[length]
    mom
mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)

rsiLength = input.int(14, "RSI Length")
rsiOverbought = input(70, "RSI Overbought Level")
rsiOversold = input(30, "RSI Oversold Level")

rsiValue = ta.rsi(close, rsiLength)

tsact = input.float(0.0, "Trailing Stop Activation (%)", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop (%)", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na

in_long = strategy.position_size > 0
in_short = strategy.position_size < 0

var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0

if in_long
    if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
    if not tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
if in_short
    if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    if not tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)

trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na

if (mom0 > 0 and mom1 > 0)
    strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
    strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
    strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
    strategy.cancel("MomSE")

tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
    strategy.close_all()
if not strategy.opentrades
    array.clear(ts_)

rsiOverboughtCondition = rsiValue >= rsiOverbought
rsiOversoldCondition = rsiValue <= rsiOversold

if rsiOverboughtCondition
    strategy.close("SHORT", "SX")
    strategy.entry("LONG", strategy.long)

if rsiOversoldCondition
    strategy.close("LONG", "LX")
    strategy.entry("SHORT", strategy.short)

plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)