デュアルチェーンハイブリッドモメンタム移動平均追従取引システム

EMA MA
作成日: 2024-11-29 17:04:57 最終変更日: 2024-11-29 17:04:57
コピー: 5 クリック数: 465
1
フォロー
1617
フォロワー

デュアルチェーンハイブリッドモメンタム移動平均追従取引システム

概要

この戦略は,指数移動平均 ((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. シグナル重複のリスク: 2つのチェーンを同時にトリガーすると,ポジションのリスクが増加する

リスク管理の提案:

  • 合理的なストップを設定する
  • 市場特性に合わせたパラメータ
  • リアルタイムで十分なフィードバックを検証
  • 各取引の資本比率を管理する

戦略最適化の方向性

  1. 信号フィルタリングの最適化:
  • ボリューム確認メカニズムを追加
  • 波動率指標のフィルター信号を導入する
  • トレンドの強さを確認する
  1. リスク管理の最適化:
  • ダイナミック・ストップ・メカニズムの開発
  • ポジション管理システムの設計
  • 戻り制御機能を追加しました.
  1. タイムサイクル最適化:
  • 最適な時間周期组合を研究する
  • 適応時間サイクルメカニズムを開発する
  • 市場状況認識機能を追加

要約する

双連鎖混合量均線トラッキング取引システムは,長期短期均線戦略を革新的に組み合わせることで,市場の多次元分析と把握を実現する.システムの設計は柔軟で,異なる市場状況とトレーダーのスタイルに応じて調整することができ,強力な実用性を持っています.合理的なリスク管理と継続的な最適化により,この戦略は実際の取引で安定した収益を期待できます.

ストラテジーソースコード
/*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()