ダイナミッククロージングストップロス移動平均戦略


作成日: 2024-01-29 15:52:43 最終変更日: 2024-01-29 15:52:43
コピー: 0 クリック数: 621
1
フォロー
1617
フォロワー

ダイナミッククロージングストップロス移動平均戦略

概要

この戦略は,動的トレーリングストップの考え方を採用し,ATRと価格の極値に基づいて長期ショートポジションのストップを計算する.Chandelier Exitの思想と組み合わせて,ストップラインの方向に基づいて長期ショートポジションの方向を判断する.ストップラインが上方突破すると,看板と判断して,多額にする.ストップラインが下方突破すると,看板と判断して,空にする.

この戦略は,ストップ・ロズとエントリー・シグナルの判断の双重機能を兼ね備えています.

戦略原則

この戦略は以下の部分から構成されています.

  1. ATRに基づく長期・短期ストップライン

ユーザが設定したATR周期長と倍数multに基づいて,リアルタイムでATRを計算する.ATRと価格の極値に基づいて長短ストップラインを計算する:

    longStop = 最高价 - ATR
    shortStop = 最低价 + ATR
  1. 取引の方向性を判断する

前K線のストップラインと現在のK線のストップラインを比較する.現在のK線のストップラインが突破された場合,取引信号を発する:

    长仓止损线上方突破,做多
    短仓止损线下方突破,做空
  1. リスクによるリターン比で ストップとストップを設定する

ユーザが設定したリスクリターン比riskRewardRatioに基づいて,ATRから止損距離と停止距離を計算する. ポジション開設時にストップ・ロストとストップ・ストップを設定します.

優位分析

この戦略の利点は以下の通りです.

  1. ダイナミック・トラッキング・ストロー,タイムストロー

この戦略は,ストップラインを動的に追跡し,タイムリーにストップして下落のリスクを制御します.

  1. ストップ・ロズと入場判断機能

この戦略のストップ・ロズラインは,入場判断条件としても使われており,戦略の論理を簡素化している.

  1. リスク・リターン比率を設定できます

設定されたリスク/リターン比率に基づいて,より高い利益を追求する.

  1. 簡単に理解し 拡張できます

この戦略はシンプルで理解しやすく,拡張を最適化できます.

リスク分析

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

  1. 双方のリスク

この戦略は,二面的な取引戦略であり,同時にも,多額のリスクと空白のリスクを負う.

  1. ATRパラメータ依存

ATRパラメータの設定は,ストップ・ロッドラインと取引頻度に直接影響し,不適切な設定は,ストップ・ロッドが過度に緩やかまたは取引頻度が過度に高くなることにつながります.

  1. 市場への適応性

この戦略は,平均線を整えた後の突破に適しているが,傾向が強い状況には適していない.

このリスクに対して,以下の方法で最適化できます.

  1. トレンド指数と組み合わせた

MAなどのトレンド指標を組み合わせて,市場動向を判断し,逆転取引を避ける.

  1. オプティマイズパラメータの組み合わせ

ATRのパラメータとリスク・リターン比率のパラメータを最適化して,ストップ・ロズとストップ・ストップを合理化します.

  1. フィルタリング条件を追加

取引量や波動性指標のフィルタリング条件を増加させ,取引品質を確保する.

最適化の方向

この戦略はさらに改善できる余地があります.

  1. 機械学習の組み合わせ

マシン・ラーニング・モデルの利用により,価格の動向を予測し,入場の精度を向上させる.

  1. オプションでリスクフリーなポートフォリオを構築する

オプションのヘッジ品種の価格変動率を利用して,リスクのないスレージポートフォリオを構築する.

  1. 多種種のクロスマーケットアバター

異なる市場,異なる品種の間で統計的アベरेजを行い,安定したアルファを得ます.

  1. アルゴリズム取引

アルゴリズム取引エンジンによる高効率な戦略反省と実物取引.

要約する

この記事では,ダイナミック・トラッキング・ストップ・ローズに基づく量化取引戦略を詳しく分析する.この戦略は,ストップ・マネジメントと取引シグナル判断機能を同時に備えており,リスクを効果的に制御することができる.この戦略の優位性,潜在的なリスク,およびその後の最適化アイデアを分析する.この戦略は,非常に実用的な取引戦略であり,さらなる研究と応用に値する.

ストラテジーソースコード
/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Chandelier Exit with 1-to-1 Risk-Reward", shorttitle='CE', overlay=true)

// Chandelier Exit Logic
length = input.int(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
useClose = input.bool(title='Use Close Price for Extremums', defval=true)

atr = mult * ta.atr(length)

longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop

shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop

var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

// Risk-Reward Ratio
riskRewardRatio = input.int(1, title="Risk-Reward Ratio", minval=1, maxval=10, step=1)

// Calculate Take Profit and Stop Loss Levels
takeProfitLevel = atr * riskRewardRatio
stopLossLevel = atr

// Entry Conditions
longCondition = dir == 1 and dir[1] == -1
shortCondition = dir == -1 and dir[1] == 1

// Entry Signals
if (longCondition)
    strategy.entry("Long", strategy.long, stop=close - stopLossLevel, limit=close + takeProfitLevel)
if (shortCondition)
    strategy.entry("Short", strategy.short, stop=close + stopLossLevel, limit=close - takeProfitLevel)

longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.green)
shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.red)

midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false)

fill(midPricePlot, longStopPlot, color=color.new(color.green, 90), title='Long State Filling')
fill(midPricePlot, shortStopPlot, color=color.new(color.red, 90), title='Short State Filling')

// Alerts
if (dir != dir[1])
    strategy.entry("Direction Change", strategy.long, comment="Chandelier Exit has changed direction!")
if (longCondition)
    strategy.entry("Buy Signal", strategy.long, comment="Chandelier Exit Buy!")
if (shortCondition)
    strategy.entry("Sell Signal", strategy.short, comment="Chandelier Exit Sell!")