適応型トレンド流動性マルチフィルター取引戦略

EMA SMA MACD ATR HLC3
作成日: 2025-01-06 11:58:25 最終変更日: 2025-01-06 11:58:25
コピー: 0 クリック数: 617
1
フォロー
1617
フォロワー

適応型トレンド流動性マルチフィルター取引戦略

概要

この戦略は、複数のテクニカル指標フィルタリングに基づく適応型トレンド追跡システムです。指数移動平均 (EMA)、単純移動平均 (SMA)、移動平均収束発散 (MACD) などの複数のテクニカル指標を組み合わせ、さまざまな市場環境に適応するようにパラメータを動的に調整して、効率的なトレンド捕捉とリスク管理を実現します。この戦略は階層化されたフィルタリングメカニズムを採用し、複数のテクニカル指標の協調的な連携を通じて取引シグナルの信頼性を大幅に向上させます。

戦略原則

この戦略のコアロジックは、3 層のフィルタリング メカニズムに基づいています。

  1. 適応型トレンド認識レイヤー: 高速 EMA と低速 EMA の組み合わせを使用してトレンド ベースラインを計算し、市場のボラティリティに基づいて上限と下限のトラック ラインを動的に調整します。
  2. SMA フィルター: 単純移動平均を使用して、価格の動きの方向が全体的な傾向と一致していることを確認します。
  3. MACD 確認レイヤー: MACD インジケーターのトレンド確認機能を使用して、取引シグナルの有効性をさらに検証します。

取引シグナルの生成には、トレンドの変化、SMA 方向の確認、MACD シグナル ラインのサポートなど、すべてのフィルター条件を満たす必要があります。この戦略には、口座エクイティに基づいた動的なポジション管理システムも含まれており、レバレッジ係数を通じてポジションサイズを自動的に調整します。

戦略的優位性

  1. 強力な適応性: パラメータを動的に調整することで、戦略はさまざまな市場環境に適応できます。
  2. 完璧なリスク管理: 複数のフィルタリング メカニズムにより、誤った信号の可能性が大幅に低減されます。
  3. 高いカスタマイズ性: ユーザーは個人の取引スタイルに応じてさまざまなパラメータを調整できます。
  4. 高度な自動化: JSON 形式のアラート メッセージをサポートしているため、自動取引システムとの接続が容易になります。
  5. 優れた視覚化効果: トレンド バンド、シグナル マーカーなど、豊富な視覚的フィードバックを提供します。

戦略リスク

  1. トレンド依存性: 不安定な市場では、誤ったシグナルが頻繁に生成される可能性があります。
  2. ヒステリシスリスク: 複数のフィルタリングメカニズムにより、エントリタイミングが遅れる可能性があります。
  3. パラメータの感度: パラメータの組み合わせが異なると、戦略のパフォーマンスに大きな違いが生じる可能性があります。
  4. レバレッジリスク: レバレッジが高すぎると損失が拡大する可能性があります。

戦略最適化の方向性

  1. ボラティリティ適応: ATR に基づく動的ストップロス メカニズムを追加しました。
  2. 市場環境の識別: 市場ステータス分類システムを追加し、さまざまな市場環境でさまざまなパラメータの組み合わせを使用します。
  3. 信号品質スコアリング: 信号強度スコアリング システムを確立し、信号強度に基づいて位置を動的に調整します。
  4. 資金管理の最適化: より複雑な資金管理アルゴリズムを導入して、より洗練されたポジション管理を実現します。

要約する

この戦略は、多層フィルタリングメカニズムと動的なパラメータ調整を通じて、より信頼性の高いトレンド追跡効果を実現します。遅延やパラメータ依存などの一定のリスクはあるものの、合理的なパラメータ最適化とリスク管理策を講じることで、実際の取引でも安定したパフォーマンスを実現できます。トレーダーは、リアルタイムで使用する前にバックテスト検証を十分に実施し、個人のリスク許容度に応じてパラメータ設定を調整することをお勧めします。

ストラテジーソースコード
/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Adaptive Trend Flow Strategy with Filters for SPX", overlay=true, max_labels_count=500, 
     initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.01, slippage=2,
     margin_long=20, margin_short=20, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// User-defined inputs for trend logic
atr           = input.int(14, "Main Length", minval=2, group = "Find more strategies like this on pineindicators.com")
length        = input.int(2, "Main Length", minval=2)
smooth_len    = input.int(2, "Smoothing Length", minval=2)
sensitivity   = input.float(2.0, "Sensitivity", step=0.1)

// User-defined inputs for SMA filter
use_sma_filter = input.bool(true, "Enable SMA Filter?")
sma_length = input.int(4, "SMA Length", minval=1)

// User-defined inputs for MACD filter
use_macd_filter = input.bool(true, "Enable MACD Filter?")
macd_fast_length = input.int(2, "MACD Fast Length", minval=1)
macd_slow_length = input.int(7, "MACD Slow Length", minval=1)
macd_signal_length = input.int(2, "MACD Signal Length", minval=1)
// User-defined inputs for leverage
leverage_factor = input.float(4.5, "Leverage Factor", minval=1.0, step=0.1)
id           = input("besttrader123", title= "Your TradingView username", group = "Automate this strategy with plugpine.com")
key           = input("nc739ja84gf", title= "Unique identifier (UID)")
ticker        = input("SPX", title= "Ticker/symbol of your broker")
bullcolor     = #0097a7
bearcolor     = #ff195f
showbars      = input.bool(true, "Color Bars?")
showbg        = input.bool(true, "Background Color?")
showsignals   = input.bool(true, "Show Signals?")


// Trend calculation functions
calculate_trend_levels() =>
    typical = hlc3
    fast_ema = ta.ema(typical, length)
    slow_ema = ta.ema(typical, length * 2)
    basis = (fast_ema + slow_ema) / 2
    vol = ta.stdev(typical, length)
    smooth_vol = ta.ema(vol, smooth_len)
    upper = basis + (smooth_vol * sensitivity)
    lower = basis - (smooth_vol * sensitivity)
    [basis, upper, lower]

get_trend_state(upper, lower, basis) =>
    var float prev_level = na
    var int trend = 0
    if na(prev_level)
        trend := close > basis ? 1 : -1
        prev_level := trend == 1 ? lower : upper
    if trend == 1
        if close < lower
            trend := -1
            prev_level := upper
        else
            prev_level := lower
    else
        if close > upper
            trend := 1
            prev_level := lower
        else
            prev_level := upper
    [trend, prev_level]

[basis, upper, lower] = calculate_trend_levels()
[trend, level] = get_trend_state(upper, lower, basis)

// SMA filter
sma_value = ta.sma(close, sma_length)
sma_condition = use_sma_filter ? close > sma_value : true

// MACD filter
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
macd_condition = use_macd_filter ? macd_line > signal_line : true

// Signal detection with filters
long_signal = trend == 1 and trend[1] == -1 and sma_condition and macd_condition
short_signal = trend == -1 and trend[1] == 1

// Plotting visuals
p2 = plot(basis, color=trend == 1 ? bullcolor : bearcolor, linewidth=2)
p1 = plot(level, color=close > level ? bullcolor : bearcolor, linewidth=2, style=plot.style_linebr)
// if showsignals and ta.crossover(close, level)
//     label.new(bar_index, level, "▲", color=bullcolor, textcolor=chart.bg_color, style=label.style_label_upper_right)
// if showsignals and ta.crossunder(close, level)
//     label.new(bar_index, level, "▼", color=bearcolor, textcolor=chart.fg_color, style=label.style_label_lower_right)

qty = strategy.equity / close * leverage_factor

// Automated alerts
if long_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "long", "volume": ' + str.tostring(qty) + '}', alert.freq_once_per_bar)
if short_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "closelong"}', alert.freq_once_per_bar)

// Strategy entries and exits
if long_signal
    strategy.entry("Long", strategy.long, qty=qty)
if short_signal
    strategy.close("Long")

// Optional SMA and MACD plot
plot(use_sma_filter ? sma_value : na, color=color.new(color.blue, 80), title="SMA")
plot(use_macd_filter ? macd_line : na, color=color.new(color.orange, 80), title="MACD Line")
plot(use_macd_filter ? signal_line : na, color=color.new(color.red, 80), title="Signal Line")