移動平均フィルタリング戦略と組み合わせた動的な複数期間のトレンド予測

EMA SMA ML AI PREDICTION Trend FILTER BACKTEST
作成日: 2025-02-20 14:03:44 最終変更日: 2025-02-27 17:38:36
コピー: 1 クリック数: 345
2
フォロー
319
フォロワー

移動平均フィルタリング戦略と組み合わせた動的な複数期間のトレンド予測 移動平均フィルタリング戦略と組み合わせた動的な複数期間のトレンド予測

概要

この戦略は,伝統的な技術分析と近代的な人工知能の方法を組み合わせたトレンド追跡システムである.これは,主に指数移動平均 ((EMA) と単純な移動平均 ((SMA) をトレンドフィルターとして使用し,入場時間を最適化するために予測モデルを導入する.戦略は,日線レベルに特別の最適化が行われ,中長期の市場トレンドを捉えることを目的としている.

戦略原則

戦略の核心的な論理は以下の3つの主要要素から構成されています.

  1. トレンド判断システム - 200周期のEMAとSMAを主要なトレンドフィルターとして使用し,価格と平均線の位置関係によって現在のトレンド方向を判断する
  2. 予測モジュール - 拡張可能な予測コンポーネントを使用し,現在では模擬予測を使用しており,次いで機械学習モデルに代替される
  3. ポジション管理 - ポジションの時間とリスクを制御するために,固定4Kラインのポジション保持周期を設定する

取引信号の生成は,トレンドの方向と予測信号の一致性を同時に満たす必要があります.

  • 多頭シグナル:価格がEMAとSMAの上にあり,予測値は正値である
  • 空頭シグナル:価格はEMAとSMAの下にあり,予測値はマイナスである

戦略的優位性

  1. 構造の明快さ - 戦略の論理はシンプルで直感的で,理解し,維持しやすい
  2. リスク管理 - 固定ポジション周期と二重均線フィルターでリスクを効果的に制御
  3. 拡張性 - 予測モジュールの設計は柔軟で,需要に応じて異なる予測モデルにアクセスできます
  4. 適応性 - パラメータを調整し,異なる市場環境に対応できる
  5. 操作頻度 中等 - 日線レベルの操作により取引コストと心理的ストレスを軽減する

戦略リスク

  1. 逆転リスク - トレンドの転換点で連続的な損失が発生する可能性がある
  2. パラメータの感受性 - 平均線周期とポジション保持周期の選択は,戦略のパフォーマンスに大きな影響を与える
  3. モデル依存性 - 予測モジュールの正確さは,戦略の効果に直接影響する
  4. スライドポイントの影響 - 日線レベルでの操作は,大きなスライドポイントに直面する可能性がある
  5. 市場環境依存 - 変動する市場では不良な結果が出る可能性

戦略最適化の方向性

  1. 予測モデルのアップグレード - 既存のランダム予測の代わりに機械学習モデルを導入する
  2. 動的なポジション保持周期 - 市場の変動率に動的に調整されたポジション保持時間
  3. ストップ・オプティミゼーション - ダイナミック・ストップ・メカニズムを追加し,リスク管理能力を向上させる
  4. ポジション管理 - 変動率に基づくポジション管理システム導入
  5. 多次元フィルタリング - 取引量,波動率などの補助指標の増加

要約する

この戦略は,伝統的な技術分析と近代的な予測方法を組み合わせて,堅牢なトレンド追跡システムを構築している.その主な優点は,論理の明確性,リスクの制御性,および強力な拡張性にある.戦略の最適化,特に予測モデルとリスク管理の改善によって,戦略の安定性と収益性をさらに向上させる見込みがある.戦略は,中長期にわたって安定した収益を追求する投資家の使用に適している.

ストラテジーソースコード
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("My Strategy", overlay=true)

// Parameters (adjust as needed)
neighborsCount = 8
maxBarsBack = 2000
featureCount = 5
useDynamicExits = true
useEmaFilter = true
emaPeriod = 200
useSmaFilter = true
smaPeriod = 200

// Moving Average Calculations
ema = ta.ema(close, emaPeriod)
sma = ta.sma(close, smaPeriod)

// Trend Conditions
isEmaUptrend = close > ema
isEmaDowntrend = close < ema
isSmaUptrend = close > sma
isSmaDowntrend = close < sma

// Model Prediction (Replace with your real model)
// Here a simulation is used, replace it with real predictions
prediction = math.random() * 2 - 1 // Random value between -1 and 1

// Entry Signals
isNewBuySignal = prediction > 0 and isEmaUptrend and isSmaUptrend
isNewSellSignal = prediction < 0 and isEmaDowntrend and isSmaDowntrend

// Exit Signals
var int barsHeld = 0
var bool in_position = false
var int entry_bar = 0

if isNewBuySignal and not in_position
    in_position := true
    entry_bar := bar_index
    barsHeld := 1
else if isNewSellSignal and not in_position
    in_position := true
    entry_bar := bar_index
    barsHeld := 1
else if in_position
    barsHeld := barsHeld + 1
    if barsHeld == 4
        in_position := false

endLongTradeStrict = barsHeld == 4 and isNewBuySignal[1]
endShortTradeStrict = barsHeld == 4 and isNewSellSignal[1]

// Backtest Logic
var float totalProfit = 0
var float entryPrice = na
var int tradeDirection = 0

if isNewBuySignal and tradeDirection <= 0
    entryPrice := close
    tradeDirection := 1
    strategy.entry("Long", strategy.long)

if isNewSellSignal and tradeDirection >= 0
    entryPrice := close
    tradeDirection := -1
    strategy.entry("Short", strategy.short)

if (endLongTradeStrict and tradeDirection == 1) or (endShortTradeStrict and tradeDirection == -1)
    exitPrice = close
    profit = (exitPrice - entryPrice) / entryPrice
    if tradeDirection == -1
        profit := (entryPrice - exitPrice) / entryPrice

    totalProfit := totalProfit + profit
    tradeDirection := 0
    strategy.close_all()

plot(close, color=color.blue)
plot(ema, color=color.orange)
plot(sma, color=color.purple)