複数の信号整合性クラウドエッジのブレークスルー戦略

技术指标 ICHIMOKU TENKAN-SEN Kijun-Sen Senkou Span CHIKOU SPAN KUMO
作成日: 2025-04-16 15:24:06 最終変更日: 2025-04-16 15:24:06
コピー: 0 クリック数: 350
2
フォロー
319
フォロワー

複数の信号整合性クラウドエッジのブレークスルー戦略 複数の信号整合性クラウドエッジのブレークスルー戦略

概要

複数の信号一致性 雲のエッジブレイク戦略は,一目均衡表 (イチモク・クラウド) の重要な要素に基づく量化取引戦略である.この戦略は,変換線 (テンカン・セン),基準線 (キジュン・セン),先行帯A (センコウ・スペンA),先行帯B (センコウ・スペンB),遅延線 (チコウ・スペン) など,複数の技術指標を総合的に分析し,市場動向と潜在的逆転を8つの異なる看板信号を判断することによって識別する.戦略の核心点は,複数の技術指標の一致性確認を探すことであり,看板信号の数が予測された値の値に達したときに多場を打つ,看板信号の数が予測された値の値を下回ったときに空場を打つ,その結果,完全な取引システムを形成する.

戦略原則

この戦略の核心原則は,一見均衡表の複数の構成要素を統合して市場の傾向の強さと方向を判断することである.具体的には,戦略は以下の8つの重要な看板信号を定義している.

  1. 移動周期前の価格よりも現在の価格が高い[displacement])
  2. 現在価格がコンバーションラインより高い ((price > Tenkan-sen)
  3. 変換線は基準線より高い ((Tenkan-sen > Kijun-sen)
  4. 遅延線が変換線を横切る時間は,横切るよりも近い
  5. 遅延線が基准線を上から下へより近い距離で切る
  6. 変換線が基準線を横切る時間は,下を通るよりも近い
  7. 遅延線が雲の上の境界を上向きに通過する時間は,雲の下の境界を下向きに通過するよりも近い
  8. 先行帯Aが先行帯Bを上向きに通過する時間は,下向きに通過するよりも近い.

策略は条件を満たすシグナルの数 ((bullish_count) を計算し,既定の値 ((bullishThresholdとbearishThreshold) と比較して,取引方向を決定する.看板シグナルの数がbullishThresholdに達または超えると,策略はオーバーポジションを開き,任意の空白ポジションを平らにする.看板シグナルの数がbearishThreshold以下またはそれと同等である場合,策略は空白ポジションを開き,任意の多頭位ポジションを平らにする.

この多信号一致性の判断方法は,市場騒音を効果的にフィルターし,取引信号の信頼性を高め,偽突破のリスクを軽減します.

戦略的優位性

この戦略は,コードを深く分析することで,以下のいくつかの明らかな利点があります.

  1. 多次元信号確認: 戦略は単一の指標に依存するのではなく,8つの異なる技術信号を総合的に考慮し,複数の信号が一致するときにのみ取引を誘発し,偽の信号の確率を大幅に低下させる.

  2. 適応性が高い: bullishThresholdとbearishThresholdのパラメータを調整することで,戦略は異なる市場環境に応じて信号の値を調整し,異なる市場条件下で有効に保つことができます.

  3. ビジュアル化: 戦略は,雲の (Kumo) 描画,シグナル標識,そして現在の看板シグナルの数を示すタグを含む豊富な視覚的要素を提供し,トレーダーが市場構造と戦略の動作状態を直視的に理解できるようにします.

  4. 全面的なトレンドの捉え方戦略は,価格と指標の関係だけでなく,指標の相互関係と歴史を考慮し,市場動向の変化をより全面的に捉えることができます.

  5. フレキシブルなパラメータ設定: 戦略は,ユーザが異なる取引品種と時間周期に適応できるように,変換線周期,基準線周期,先行帯B周期および移転周期を含む一目均衡表のパラメータをカスタマイズすることを可能にします.

戦略リスク

この戦略は巧妙に設計されていますが,実際は以下のリスクがあります.

  1. 遅延のリスク一目平衡表は,それ自体が遅滞指数であり,特に位移周期 (<デフォルト26>) は,信号が一定の遅延を生じさせ,急速に変化する市場で最適な入場点を逃すか,または大きなストップ損失を引き起こす可能性があります.

  2. 歴史的データに過度に依存する: 策略では,歴史交差点を比較するために,大量のbarssince関数を使用し,充分な歴史データに依存する.歴史データが不足すると,誤った信号判断につながる可能性がある.

  3. パラメータ感度: 戦略の効果はパラメータ設定に大きく依存し,異なる市場環境では異なるパラメータの組み合わせが必要になり,間違ったパラメータ設定は過剰取引や重要な機会を逃す可能性があります.

  4. リスク管理の欠如: コードには明確なストップ・ロズやストップ・ストップの仕組みがなく,ポジション管理も考慮されていないため,不利な状況で過大損失を被る可能性があります.

  5. 信号の衝突波動的な市場では,8つのシグナルが頻繁に変化し,相互に矛盾し,取引コストを増加させる.

これらのリスクを軽減するために,トレーダーは,ストップ・ストップ・ストップの論理を追加し,パラメータの設定を最適化し,他の非関連性指標と組み合わせてシグナルを確認し,適切なポジションサイズを制御することを検討することができます.

戦略最適化の方向性

戦略の特徴と潜在的リスクに基づいて,いくつかの可能性のある最適化方向は以下の通りです.

  1. ボラティリティフィルターを追加:ATRまたは他の波動性指標をコードに追加し,市場の波動性が過大または過小であるときに戦略を急激に調整するか,またはこれらの期間の取引を直接回避します.これは,低波動期間に発生する偽の突破または高波動期間に発生する過度のリスクを効果的に回避します.

  2. リスク管理の改善: ATR ベースのストップや,重要なサポートレジスタンス位置に基づくストップなどのダイナミックなストップストップロジックを追加し,戦略のリスク・リターン比率を向上させる.

  3. 信号の重さを最適化する: 異なる看板シグナルが異なる市場環境で異なる重要性を持つ可能性があり,戦略の適応性を高めるために,単純にカウントするのではなく,8つのシグナルに異なる重みを与えることができます.

  4. 取引量確認: 取引量を追加の確認条件として,取引量がサポートされている場合にのみシグナルが確認され,偽の突破をさらに減らすことができます.

  5. ダイナミックパラメータの自己適応を実現する市場状況 (例えば波動率,トレンドの強さなど) に応じて戦略のパラメータを動的に調整する自己適応機構を開発し,変化する市場環境に戦略をより良く適応させることができる.

  6. 市場状況を判断する: 戦略に市場状態 ((トレンド/振動) の判断ロジックを加え,異なる市場状態で異なるシグナル値または取引戦略を採用することで,異なる市場環境下での戦略のパフォーマンスを大幅に向上させることができる.

これらの最適化により,戦略はより堅牢になり,撤退を減らし,長期的な収益性を高めることができます.

要約する

多信号一致性 雲端エッジブレイク戦略は,一目平衡表の複数の構成要素を組み合わせた総合的な取引システムである.これは,8つの重要な技術信号を定義し,条件を満たした信号の数に基づいて市場トレンドの方向と取引決定を決定する.

この戦略の最大の利点は,複数の技術指標が一致することを要求することによって市場のノイズをフィルターし,取引信号の信頼性を高める,その多次元的な信号確認メカニズムにあります. 同時に,戦略は,市場構造と戦略の状態をトレーダーに直感的に理解するために,豊富な可視化要素と柔軟なパラメータ設定を提供します.

しかし,戦略には信号の遅延,歴史データへの過度な依存,リスク管理の欠陥などの問題もあります. 将来の戦略は,波動率フィルターを追加し,リスク管理機構を完善し,信号重量を最適化することによってさらに改善することができます.

全体として,これは,一見バランス表を少し理解しているトレーダーが使用するように設計された,包括的で,論理的に明確な戦略の枠組みです.適切なパラメータ調整とさらなる最適化により,この戦略は,安定した取引システムになる可能性があり,中長期のトレンド追跡取引に特に適しています.

ストラテジーソースコード
/*backtest
start: 2024-04-16 00:00:00
end: 2025-04-15 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//PineWiseTrading

//@version=6
strategy("⛅ CloudEdge", overlay=true, max_bars_back=4999)

// === INPUTS ===
// Ichimoku Periods
tenkanPeriod    = input.int(9, "Tenkan-sen Period", minval=1, tooltip="Period for Tenkan-sen (Conversion Line)")
kijunPeriod     = input.int(26, "Kijun-sen Period", minval=1, tooltip="Period for Kijun-sen (Base Line)")
senkouBPeriod   = input.int(52, "Senkou Span B Period", minval=1, tooltip="Period for Senkou Span B")
displacement    = input.int(26, "Displacement", minval=1, tooltip="Shift for Kumo and Chikou Span")

// Signal Thresholds
bullishThreshold = input.int(8, "Bullish Signal Threshold", minval=0, maxval=8, tooltip="Number of bullish signals required for a long position")
bearishThreshold = input.int(0, "Bearish Signal Threshold", minval=0, maxval=8, tooltip="Number of bullish signals below which a short position is entered")

// Visualization Options
showIchimoku = input.bool(true, "Show Ichimoku Lines", tooltip="Toggle to show/hide Ichimoku components")
showSignals  = input.bool(true, "Show Signal Indicators", tooltip="Toggle to show/hide entry signals")

// === ICHIMOKU CALCULATIONS ===
// Tenkan-sen (Conversion Line)
tenkanHigh = ta.highest(high, tenkanPeriod)
tenkanLow  = ta.lowest(low, tenkanPeriod)
tenkanSen  = (tenkanHigh + tenkanLow) / 2

// Kijun-sen (Base Line)
kijunHigh = ta.highest(high, kijunPeriod)
kijunLow  = ta.lowest(low, kijunPeriod)
kijunSen  = (kijunHigh + kijunLow) / 2

// Senkou Span A (Leading Span A)
senkouA = (tenkanSen + kijunSen) / 2

// Senkou Span B (Leading Span B)
senkouBHigh = ta.highest(high, senkouBPeriod)
senkouBLow  = ta.lowest(low, senkouBPeriod)
senkouB  = (senkouBHigh + senkouBLow) / 2

// Chikou Span (Lagging Span)
chikouSpan = close[displacement]

// Kumo Upper and Lower for Visualization
kumoUpper = math.max(senkouA[displacement], senkouB[displacement])
kumoLower = math.min(senkouA[displacement], senkouB[displacement])

// === STRATEGY SIGNALS ===
// Define 8 Bullish Signals
signal1 = close > close[displacement]  
signal2 = close > tenkanSen             
signal3 = tenkanSen > kijunSen          
signal4 = ta.barssince(ta.crossover(chikouSpan, tenkanSen)) < ta.barssince(ta.crossunder(chikouSpan, tenkanSen))  
signal5 = ta.barssince(ta.crossover(chikouSpan, kijunSen)) < ta.barssince(ta.crossunder(chikouSpan, kijunSen))    
signal6 = ta.barssince(ta.crossover(tenkanSen, kijunSen)) < ta.barssince(ta.crossunder(tenkanSen, kijunSen))      
signal7 = ta.barssince(ta.crossover(chikouSpan, kumoUpper)) < ta.barssince(ta.crossunder(chikouSpan, kumoLower))  
signal8 = ta.barssince(ta.crossover(senkouA, senkouB)) < ta.barssince(ta.crossunder(senkouA, senkouB))          
// Count Bullish Signals
bullish_count = 0
bullish_count += (signal1 ? 1 : 0)
bullish_count += (signal2 ? 1 : 0)
bullish_count += (signal3 ? 1 : 0)
bullish_count += (signal4 ? 1 : 0)
bullish_count += (signal5 ? 1 : 0)
bullish_count += (signal6 ? 1 : 0)
bullish_count += (signal7 ? 1 : 0)
bullish_count += (signal8 ? 1 : 0)

// === TRADING LOGIC ===
if bullish_count >= bullishThreshold
    strategy.entry("Long", strategy.long)
    strategy.close("Short")
else if bullish_count <= bearishThreshold
    strategy.entry("Short", strategy.short)
    strategy.close("Long")

// === VISUALIZATIONS ===
// Plot Ichimoku Lines 
plot(showIchimoku ? tenkanSen : na, "Tenkan-sen", color=color.red, linewidth=2)
plot(showIchimoku ? kijunSen  : na, "Kijun-sen",  color=color.blue, linewidth=2)
plot(showIchimoku ? chikouSpan : na, "Chikou Span", color=color.green, offset=-displacement)

// For Senkou spans, capture the plot handles
senkouA_plot = plot(showIchimoku ? senkouA : na, "Senkou Span A", color=color.orange, offset=displacement)
senkouB_plot = plot(showIchimoku ? senkouB : na, "Senkou Span B", color=color.purple, offset=displacement)
// Use the plot handles in fill
fill(senkouA_plot, senkouB_plot, color=senkouA > senkouB ? color.new(color.green, 90) : color.new(color.red, 90), title="Kumo Cloud")

// Plot Signal Indicators using conditions inside the function call
plotshape(showSignals and bullish_count >= bullishThreshold, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(showSignals and bullish_count <= bearishThreshold, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
label.new(bar_index, high, text=str.tostring(bullish_count) + "/8", color=color.black, textcolor=color.white, style=label.style_label_down)

// Background Highlighting 
bgcolor(bullish_count >= bullishThreshold ? color.new(color.green, 90) : bullish_count <= bearishThreshold ? color.new(color.red, 90) : na)