資源の読み込みに... 荷物...

双鎖ハイブリッドモメント EMA トレーディングシステム

作者: リン・ハーンチャオチャン開催日:2024年11月29日17時04分57秒
タグ:エイママルチ

img

概要

この戦略は,指数的な移動平均値 (EMA) をベースとした革新的な取引システムで,異なるタイムフレームに設定された2つの独立した取引チェーンを通じて市場の機会を把握しています.この戦略は,長期的トレンドフォローと短期的なモメンタムトレーディングの利点を統合し,多次元市場分析のための週,日,12時間,9時間のタイムフレームにEMAクロスオーバーを通じて取引信号を生成します.

戦略の原則

この戦略は2つの鎖の設計を用いており,各鎖には独自の入口と出口論理があります.

チェーン1 (長期動向) は,毎週と毎日のタイムフレームを使用します.

  • 入場信号: 閉場価格が週間の時間枠でEMAを上回るときに発生する.
  • エクジット・シグナル: 閉店価格が日間のEMAを下回るときに発生する.
  • デフォルト EMA 期間は 10 です.必要に応じて調整できます.

チェーン2 (短期モメント) は12時間と9時間のタイムフレームを使用します.

  • 入場信号: 閉場価格が12時間間のEMAを超えると生成される.
  • エクジット・シグナル: 閉店価格が9時間の時間枠でEMAを下回るときに発生する.
  • デフォルト EMA 期間は 9 です.必要に応じて調整できます.

戦略 の 利点

  1. 多次元的な市場分析: タイムフレームの組み合わせによる包括的な市場動向の把握
  2. 高柔軟性: 2つのチェーンが独立して有効または無効にすることができます
  3. 強力なリスク管理: 複数の時間枠の確認は,誤った信号を減らす
  4. 高いパラメータ適応性: EMA 期間とタイムフレームは調整可能
  5. バックテストの機能が完全である: 戦略検証のためのテスト期間設定が組み込まれている

戦略リスク

  1. トレンド逆転リスク: 不安定な市場での遅れがみられる
  2. 時間枠の構成リスク: 異なる市場では異なる時間枠の組み合わせが必要かもしれません.
  3. パラメータ最適化リスク:過度に最適化すると過度に適性になる
  4. シグナル重複リスク: 両鎖からの同時トリガーがポジションリスクを増やす可能性があります.

リスク管理の提案:

  • 合理的なストップ・ロスのレベルを設定する
  • 市場特性を考慮してパラメータを調整する
  • ライブ取引前に徹底的なバックテストを行う
  • 取引ごとに制御位置のサイズ

戦略の最適化方向

  1. シグナルフィルタリング最適化:
  • 音量確認メカニズムを追加する
  • 波動性指標を組み込む
  • トレンド強度確認を記載する
  1. リスク管理の最適化
  • ダイナミックなストップ・ロスのメカニズムを開発する
  • 設計位置管理システム
  • 引き下げ制御機能を追加する
  1. タイムフレーム最適化
  • 研究 最適な時間枠の組み合わせ
  • 適応可能な時間枠のメカニズムを開発する
  • 市場状態認識機能を追加する

概要

ダブルチェーンハイブリッドモメントEMAトレーディング・トレーディング・システムは,長期および短期間の移動平均戦略の革新的な組み合わせを通じて多次元市場分析を達成する. システムの設計は柔軟であり,異なる市場条件とトレーダースタイルに応じて調整することができ,強力な実用性を示している.適切なリスク制御と継続的な最適化を通じて,この戦略は実際の取引で安定したリターンを達成する可能性がある.トレーダーは,最適な取引結果を達成するために,ライブ実装の前に徹底的なバックテストとパラメータ最適化を行うことをお勧めする.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='Dual Chain Strategy', shorttitle='DualChain', overlay=true)

// User inputs for enabling/disabling chains
enableChain1 = input.bool(true, title='Enable Chain 1')
enableChain2 = input.bool(true, title='Enable Chain 2')

// User inputs for the first chain
len1 = input.int(10, minval=1, title='Length Chain 1 EMA', group="Chain 1")
src1 = input(close, title='Source Chain 1', group="Chain 1")
tf1_entry = input.timeframe("W", title='Chain 1 Entry Timeframe', group="Chain 1")
tf1_exit = input.timeframe("D", title='Chain 1 Exit Timeframe', group="Chain 1")

// Weekly timeframe EMA for Chain 1
entryEMA1 = request.security(syminfo.tickerid, tf1_entry, ta.ema(src1, len1))

// Daily timeframe EMA for Chain 1
exitEMA1 = request.security(syminfo.tickerid, tf1_exit, ta.ema(src1, len1))

// User inputs for the second chain
len2 = input.int(9, minval=1, title='Length Chain 2 EMA', group="Chain 2")
src2 = input(close, title='Source Chain 2', group="Chain 2")
tf2_entry = input.timeframe("720", title='Chain 2 Entry Timeframe (12H)', group="Chain 2")  // 12 hours
tf2_exit = input.timeframe("540", title='Chain 2 Exit Timeframe (9H)', group="Chain 2")    // 9 hours

// Entry timeframe EMA for Chain 2
entryEMA2 = request.security(syminfo.tickerid, tf2_entry, ta.ema(src2, len2))

// Exit timeframe EMA for Chain 2
exitEMA2 = request.security(syminfo.tickerid, tf2_exit, ta.ema(src2, len2))

// Plotting Chain 1 EMAs
plot(enableChain1 ? entryEMA1 : na, title='Chain 1 Entry EMA', color=color.new(color.blue, 0))
plot(enableChain1 ? exitEMA1 : na, title='Chain 1 Exit EMA', color=color.new(color.yellow, 0))

// Plotting Chain 2 EMAs
plot(enableChain2 ? entryEMA2 : na, title='Chain 2 Entry EMA', color=color.new(color.green, 0))
plot(enableChain2 ? exitEMA2 : na, title='Chain 2 Exit EMA', color=color.new(color.red, 0))

// Backtesting period
startDate = input(timestamp('2015-07-27'), title="StartDate")
finishDate = input(timestamp('2026-01-01'), title="FinishDate")
time_cond = true

// Entry Condition (Chain 1)
bullishChain1 = enableChain1 and ta.crossover(src1, entryEMA1)
bearishChain1 = enableChain1 and ta.crossunder(src1, entryEMA1)

// Exit Condition (Chain 1)
exitLongChain1 = enableChain1 and ta.crossunder(src1, exitEMA1)
exitShortChain1 = enableChain1 and ta.crossover(src1, exitEMA1)

// Entry Condition (Chain 2)
bullishChain2 = enableChain2 and ta.crossover(src2, entryEMA2)
bearishChain2 = enableChain2 and ta.crossunder(src2, entryEMA2)

// Exit Condition (Chain 2)
exitLongChain2 = enableChain2 and ta.crossunder(src2, exitEMA2)
exitShortChain2 = enableChain2 and ta.crossover(src2, exitEMA2)

// Debugging: Plot entry signals for Chain 1
plotshape(bullishChain1, color=color.new(color.green, 0), style=shape.labelup, text='BUY C1', location=location.belowbar)
plotshape(bearishChain1, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C1', location=location.abovebar)

// Debugging: Plot entry signals for Chain 2
plotshape(bullishChain2, color=color.new(color.green, 0), style=shape.labelup, text='BUY C2', location=location.belowbar)
plotshape(bearishChain2, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C2', location=location.abovebar)

// Trade Execution for Chain 1
if bullishChain1 and time_cond
    strategy.entry('BUY_Chain_1', strategy.long)

if bearishChain1 and time_cond
    strategy.entry('SELL_Chain_1', strategy.short)

// Exit trades based on daily conditions for Chain 1
if exitLongChain1 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_1', when=exitLongChain1)

if exitShortChain1 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_1', when=exitShortChain1)

// Trade Execution for Chain 2
if bullishChain2 and time_cond
    strategy.entry('BUY_Chain_2', strategy.long)

if bearishChain2 and time_cond
    strategy.entry('SELL_Chain_2', strategy.short)

// Exit trades based on daily conditions for Chain 2
if exitLongChain2 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_2', when=exitLongChain2)

if exitShortChain2 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_2', when=exitShortChain2)

// Close all positions outside the backtesting period
if not time_cond
    strategy.close_all()


関連性

もっと