ダイナミック・リエントリー 購入のみの戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-19 13:56:55
タグ:

img

概要

この戦略は,移動平均のクロスオーバーと週商品チャネル指数 (CCI) または週平均方向指数 (ADX) をベースに購入信号を生成する購入のみ取引システムである. 急速移動平均がスロー移動平均を超えると,週CCIおよび/または週 ADXが指定された条件を満たすときに購入信号を生成する.

この戦略はまた,ダイナミックな再入入りを可能にする.つまり,出口後価格が3つの移動平均値を超えると新しいロングポジションを開くことができる.しかし,価格が3番目の移動平均値以下に閉じる場合,戦略はロングポジションを退場する.

戦略原則

このスクリプトは,購入信号を生成するための条件を定義します.有効な購入信号の2つの条件をチェックします:

  • 急速移動平均はゆっくり移動平均を上回る
  • ユーザは毎週CCIまたは毎週ADXを使用して取引をフィルタリングを選択することができます.

ダイナミック・リエントリー活発なロングポジションがない場合,価格が3つの移動平均値以上であれば,新しいロングポジションが開かれます.

出口条件:閉じる価格が3番目の移動平均値を下回ったら,スクリプトはロングポジションを閉じる.

利点分析

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

  1. 複数の技術指標を使用して信号をフィルタリングすることで 誤った信号は減少します
  2. ダイナミックな再入力メカニズムにより,トレンドを最大限に把握できます.
  3. 短縮する危険を回避する

リスク分析

この戦略のリスクは以下のとおりです.

  1. 鞭の危険性がある
  2. 長い待機時間が長くなり,停止が必要になるかもしれません
  3. パラメータの設定が悪ければ,取引が頻繁すぎる可能性があります.

解決策:

  1. フィルタリングのためにより良いパラメータ組み合わせと指標組み合わせを使用します
  2. 合理的なストップ損失を設定する
  3. 安定性を確保するためにパラメータを調整

オプティマイゼーションの方向性

この戦略は,以下の方法で最適化できます.

  1. より良いエントリータイミングを見つけるためにより多くの技術指標の組み合わせをテストする
  2. 最適なパラメータ組み合わせを見つけるためにパラメータを最適化
  3. 単一の損失を制御するためのストップ損失メカニズムの追加
  4. 市場状況に基づいてポジションを増やし/減少させる ポジションサイズを追加する

概要

このダイナミック・リエントリー・バイ・オンリー戦略は,エントリータイミングを決定するために複数の技術指標を統合し,リアルタイムでトレンドを追跡するためにダイナミック・リエントリー・デザインを採用している.ロング・オンリーであることでショートリスクが回避される.パラメータ最適化,ストップ・ロース,ポジションサイジングを通じて,この戦略は,過剰なリターンを捕捉しながらリスクを制御するためにライブ・トレーディングで実装できる.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Buy Only Strategy with Dynamic Re-Entry and Exit", overlay=true)

// Input Parameters
fast_length = input(20, title="Fast Moving Average Length")
slow_length = input(30, title="Slow Moving Average Length")
third_ma_length = input(100, title="Third Moving Average Length")
cci_period = input(14, title="CCI Period for Weekly CCI")
use_cci = input(true, title="Use CCI for Entry")
use_adx = input(true, title="Use ADX for Entry")
adx_length = input(14, title="ADX Length")
adx_threshold = input(25, title="ADX Threshold")

// Calculate Moving Averages
fast_ma = ta.sma(close, fast_length)
slow_ma = ta.sma(close, slow_length)
third_ma = ta.sma(close, third_ma_length)

// Weekly Commodity Channel Index (CCI) with user-defined period
weekly_cci = request.security(syminfo.tickerid, "W", ta.cci(close,  cci_period))

// Weekly Average Directional Index (ADX)
dirmov = hlc3
plus = ta.change(dirmov) > 0 ? ta.change(dirmov) : 0
minus = ta.change(dirmov) < 0 ? -ta.change(dirmov) : 0
trur = ta.rma(ta.tr, adx_length)
plusDI = ta.rma(plus, adx_length) / trur * 100
minusDI = ta.rma(minus, adx_length) / trur * 100
sum = plusDI + minusDI
DX = sum == 0 ? 0 : math.abs(plusDI - minusDI) / sum * 100
ADX = ta.rma(DX, adx_length)

// Entry Conditions (Buy Only and Weekly CCI > 100 and/or Weekly ADX > 25)
cci_condition = use_cci ? (weekly_cci > 100) : false
adx_condition = use_adx ? (ADX > adx_threshold) : false
long_condition = ta.crossover(fast_ma, slow_ma) and (cci_condition or adx_condition)

// Exit Condition and Dynamic Re-Entry
exit_condition = close < third_ma
re_entry_condition = close > fast_ma and close > slow_ma and close > third_ma and weekly_cci > 100

// Entry and Exit Signals
strategy.entry("Long", strategy.long, when=long_condition)
strategy.close("Long", when=exit_condition)

// Dynamic Re-Entry and Exit
if strategy.position_size == 0 and re_entry_condition
    strategy.entry("Long", strategy.long)

if strategy.position_size > 0 and close < third_ma
    strategy.close("Long")

// Plot Weekly CCI and ADX for reference
plot(weekly_cci, title="Weekly CCI", color=color.orange)
plot(ADX, title="Weekly ADX", color=color.blue)


もっと