Zスコア正規化に基づく線形信号定量取引戦略

RSI SMA Z-SCORE LSB TP SL
作成日: 2025-01-06 16:14:07 最終変更日: 2025-01-06 16:14:07
コピー: 6 クリック数: 437
1
フォロー
1617
フォロワー

Zスコア正規化に基づく線形信号定量取引戦略

概要

この戦略は、線形シグナルと Z スコア正規化に基づいた定量取引システムです。 RSI などの外生変数と価格データを組み合わせて標準化された取引シグナルを構築し、しきい値を使用して取引をトリガーします。この戦略は、日中取引や高頻度取引のシナリオに適しており、優れた適応性と構成可能性を備えています。

戦略原則

戦略の中核となる原則には、次の重要なステップが含まれます。

  1. 線形信号の構築: RSI インジケーターは、設定可能な重み (signal_alpha) を使用して価格データと線形に結合され、初期信号を形成します。
  2. Z スコア正規化: 設定されたルックバック期間 (lookback_period) に基づいて、線形信号の平均と標準偏差が計算され、信号が Z スコア形式に正規化されます。
  3. しきい値トリガーメカニズム: Z スコアが負のしきい値より低い場合は、ロング ポジションが開かれ、正のしきい値より高い場合は、ショート ポジションが開かれます。しきい値は、リスク調整係数 (risk_adjustment_factor) によって制御されます。
  4. リスク管理: 取引ごとに利益確定と損切りを設定し、パーセンテージパラメータを通じてリスクとリターンの比率を柔軟に調整します。

戦略的優位性

  1. 信号の正規化: Z スコア変換により、信号に優れた統計特性が与えられ、普遍的なしきい値を設定しやすくなります。
  2. 高い柔軟性: 外生変数と価格の影響は、signal_alpha を調整することでバランスをとることができます。
  3. 制御可能なリスク: 市場特性に応じて柔軟に設定できる完全なストッププロフィットおよびストップロスメカニズム。
  4. 優れた適応性: 複数の期間に適用でき、流動性の高い他の取引商品に拡張できます。

戦略リスク

  1. パラメータの感度: 戦略のパフォーマンスはパラメータの選択に敏感であり、十分なバックテストと検証が必要です。
  2. 市場環境への依存: トレンドが弱く、不安定な市場では、取引が頻繁に発生する可能性があります。
  3. シグナルラグ: 移動平均計算によって生じるラグがエントリータイミングに影響を与える可能性があります。
  4. 流動性リスク: 流動性が不十分な場合、高頻度取引ではスリッページ損失が発生する可能性があります。

戦略最適化の方向性

  1. 動的パラメータ調整: 市場のボラティリティに基づいてしきい値とストップロスポジションを動的に調整する適応メカニズムを導入します。
  2. 複数のシグナルの確認: シグナルの信頼性を向上させるために、フィルタリング条件として他のテクニカル指標を追加します。
  3. ポジション管理の最適化: ボラティリティと信号強度に基づいて動的なポジション管理システムを設計します。
  4. 取引コスト管理: ポジションのオープンとクローズのロジックを最適化し、頻繁な取引によるコスト損失を削減します。

要約する

これは、明確な構造と厳密なロジックを備えた定量的な取引戦略です。線形結合と標準化処理を通じて堅牢な取引シグナル システムが構築されます。この戦略は高度に構成可能で、完璧なリスク管理を備えていますが、パラメータの最適化と市場適応性に注意を払う必要があります。推奨される最適化の方向性を通じて、戦略の安定性と収益性をさらに向上させることができます。

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

//@version=5
strategy("Linear Signal-Based Strategy", shorttitle = "LSB_V1", overlay=true)

// Inputs
lookback_period = input.int(14, title="Lookback Period for Moving Averages")
signal_alpha = input.float(0.5, title="Signal Weight Alpha (Exogenous Variable)")
take_profit_percent = input.float(0.02, title="Take Profit (%)")
stop_loss_percent = input.float(0.01, title="Stop Loss (%)")
risk_adjustment_factor = input.float(1.5, title="Risk Adjustment Factor")

// Fetch Exogenous Variable (Example: RSI as a Proxy)
rsi_value = ta.rsi(close, lookback_period)

// Linear Signal Calculation
linear_signal = signal_alpha * rsi_value + (1 - signal_alpha) * close

// Z-Score Normalization for Signal
mean_signal = ta.sma(linear_signal, lookback_period)
stddev_signal = ta.stdev(linear_signal, lookback_period)
z_score_signal = (linear_signal - mean_signal) / stddev_signal

// Entry Conditions
long_condition = z_score_signal < -risk_adjustment_factor
short_condition = z_score_signal > risk_adjustment_factor

// Risk Management
long_take_profit = close * (1 + take_profit_percent)
long_stop_loss = close * (1 - stop_loss_percent)
short_take_profit = close * (1 - take_profit_percent)
short_stop_loss = close * (1 + stop_loss_percent)

// Execute Trades
if (long_condition)
    strategy.entry("Long", strategy.long, qty=1)
    strategy.exit("Exit Long", "Long", stop=long_stop_loss, limit=long_take_profit)

if (short_condition)
    strategy.entry("Short", strategy.short, qty=1)
    strategy.exit("Exit Short", "Short", stop=short_stop_loss, limit=short_take_profit)