イチモク・クラウド・ブレイクアウトとADX指数に基づく定量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2024年2月2日17時50分30秒
タグ:

img

概要

この戦略の名称は,イチモク・クラウド・ブレイクアウトとADX・インデックスに基づく定量取引戦略である.イチモク・クラウド・チャートと平均方向動向指数 (ADX) を組み合わせて,いつロングまたはショートポジションを取るか決定する.具体的には,価格がクラウド・チャートの主要な領域を突破し,ADXが強いトレンドを示したときにポジションに入ります.

戦略の論理

この戦略は,主要サポートとレジスタンス領域を特定するために,イチモク・キンコ・ヒョー指標からイチモク・クラウドを使用している.また,トレンド強さを判断するためにADX指数も組み込む.具体的な取引ルールは以下のとおりである:

長い入口信号:

  • 変換線がベースラインを横切る
  • 遅延線が0軸以上を横切る
  • 価格が雲の上位
  • ADX 45以下 (傾向が過剰に伸びていないことを示す)
  • +DI above -DI (上昇傾向を示す)

短距離入力信号:

  • 換算線がベース線以下を横切る
  • 遅延線が0軸以下を横切る
  • 低価格
  • ADX 45以上 (傾向の逆転の可能性を示す)
  • +DI -DI以下 (下向きを示している)

利点分析

この戦略は,チャートパターン分析とトレンド分析指標を組み合わせ,市場の動向と強み点を効果的に決定することができます.主な利点は以下の通りです.

  1. 強いトレンドを把握するために,主要なサポート/レジスタンスレベルを決定するために Ichimoku クラウドを使用する
  2. ADX指数を組み込み,真のトレンド強さを測定し,偽取引を回避する
  3. ライブ・トレーディングの 明確なルール

リスク と 解決策

この戦略にはいくつかのリスクがあり,主にADXトレンド決定における不安定性があります.リスクと解決策は以下の通りです.

  1. ADXは遅延効果があり,急速な逆転を逃す可能性があります.より敏感になるためにADXパラメータを下げることができます.
  2. ADXは,市場範囲でうまく機能しません. BOLLチャンネルのようなフィルターを追加することができます.
  3. イチモククラウドも失敗する.パラメータを調整したり,補助指標を追加することができます.

最適化 の 提案

この戦略は,次の方法でさらに最適化できます.

  1. イチモクパラメータを調整する
  2. 単一の取引損失を制御するためにストップロスを追加する
  3. シグナルをフィルタリングするためにより多くの指標を組み込む
  4. 傾向信号をさらに決定するために機械学習予測を追加

結論

この戦略は,イチモククラウドチャートとADXトレンドインデックスを組み合わせて完全な定量的な取引システムを形成する. 傾向を判断しながら,主要なサポート/レジスタンスレベルを特定する. 市場機会を効果的に把握することができます. 戦略はライブ取引で実装しやすく,最適化にも余地があります. 全体的に,それは品質の定量的な戦略です.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Coinrule

//@version=5
strategy('Ichimoku Cloud with ADX (By Coinrule)',
         overlay=true,
         initial_capital=1000,
         process_orders_on_close=true,
         default_qty_type=strategy.percent_of_equity,
         default_qty_value=30,
         commission_type=strategy.commission.percent,
         commission_value=0.1)

showDate = input(defval=true, title='Show Date Range')
timePeriod = time >= timestamp(syminfo.timezone, 2022, 1, 1, 0, 0)


// Stop Loss and Take Profit for Shorting
Stop_loss = input(1) / 100
Take_profit = input(5) / 100
longStopPrice = strategy.position_avg_price * (1 - Stop_loss)
longTakeProfit = strategy.position_avg_price * (1 + Take_profit)


// Inputs
ts_bars = input.int(9, minval=1, title='Tenkan-Sen Bars')
ks_bars = input.int(26, minval=1, title='Kijun-Sen Bars')
ssb_bars = input.int(52, minval=1, title='Senkou-Span B Bars')
cs_offset = input.int(26, minval=1, title='Chikou-Span Offset')
ss_offset = input.int(26, minval=1, title='Senkou-Span Offset')
long_entry = input(true, title='Long Entry')
short_entry = input(true, title='Short Entry')

middle(len) => math.avg(ta.lowest(len), ta.highest(len))

// Ichimoku Components
tenkan = middle(ts_bars)
kijun = middle(ks_bars)
senkouA = math.avg(tenkan, kijun)
senkouB = middle(ssb_bars)

// Plot Ichimoku Kinko Hyo
plot(tenkan, color=color.new(#0496ff, 0), title='Tenkan-Sen')
plot(kijun, color=color.new(#991515, 0), title='Kijun-Sen')
plot(close, offset=-cs_offset + 1, color=color.new(#459915, 0), title='Chikou-Span')
sa = plot(senkouA, offset=ss_offset - 1, color=color.new(color.green, 0), title='Senkou-Span A')
sb = plot(senkouB, offset=ss_offset - 1, color=color.new(color.red, 0), title='Senkou-Span B')
fill(sa, sb, color=senkouA > senkouB ? color.green : color.red, title='Cloud color', transp=90)

ss_high = math.max(senkouA[ss_offset - 1], senkouB[ss_offset - 1])
ss_low = math.min(senkouA[ss_offset - 1], senkouB[ss_offset - 1])


// ADX
[pos_dm, neg_dm, avg_dm] = ta.dmi(14, 14)


// Entry/Exit Signals
tk_cross_bull = tenkan > kijun
tk_cross_bear = tenkan < kijun
cs_cross_bull = ta.mom(close, cs_offset - 1) > 0
cs_cross_bear = ta.mom(close, cs_offset - 1) < 0
price_above_kumo = close > ss_high
price_below_kumo = close < ss_low

bullish = tk_cross_bull and cs_cross_bull and price_above_kumo and avg_dm < 45 and pos_dm > neg_dm
bearish = tk_cross_bear and cs_cross_bear and price_below_kumo and avg_dm > 45 and pos_dm < neg_dm

strategy.entry('Long', strategy.long, when=bullish and long_entry and timePeriod)
strategy.close('Long', when=bearish and not short_entry)

strategy.entry('Short', strategy.short, when=bearish and short_entry and timePeriod)
strategy.close('Short', when=bullish and not long_entry)




もっと