移動平均に基づく適応型トレンドフォロー戦略

SMA MA RR
作成日: 2025-02-18 14:23:08 最終変更日: 2025-02-18 14:23:08
コピー: 0 クリック数: 322
1
フォロー
1617
フォロワー

移動平均に基づく適応型トレンドフォロー戦略

概要

この戦略は,二均線交差に基づくトレンド追跡システムで,短期と長期の移動平均の交差によって市場のトレンドを捉え,リスクと利益の1:3の比率で取引リスクを管理する.この戦略は,固定したストップと利益の目標を使用し,移動のストップメカニズムと組み合わせて利益を保護する.

戦略原則

戦略は74周期の短期移動平均 ((Short SMA) と70周期の長期移動平均 ((Long SMA) を主要な指標として使用する.短期平均線が長期平均線を上方から横切るとき,システムは多行信号を生成する.短期平均線が長期平均線を下方から横切るとき,システムは空白信号を生成する.各取引のポジションサイズは0.002で固定され,止損は353ドルで設定され,利益は止損目標の3倍である.

戦略的優位性

  1. リスク管理の改善:固定1:3のリスク/利益比率により,長期取引で安定した利益を得ることができます.
  2. シグナル明晰:古典的な均線交差策を使用し,取引シグナルが明瞭で,理解し易く実行される
  3. 高度な自動化: 完全入場・出場ロジックを含み,人間の介入を必要としない
  4. モバイル・ストップ・プロテクション: モバイル・ストップ・メカニズムにより,既得利益を有効にロックできます.
  5. ポジションの厳格な管理:ポジションのサイズを固定し,過度のリスクを避ける

戦略リスク

  1. 平均線遅れ:移動平均は本質的に遅れの指標であり,急速に波動する市場で遅れのシグナルを生む可能性があります.
  2. 振動市場には適用されない:横盤振動市場では,誤信号が頻繁に発生し,連続的な損失を引き起こす可能性があります
  3. 固定ストップリスク: 固定ドルストップは,価格の急激な変動で柔軟性がない可能性があります.
  4. タイムスケープの制限:戦略は特定の時間範囲でしか実行されず,重要な取引機会を逃す可能性があります.

戦略最適化の方向性

  1. 動的調整均線周期:市場変動に応じて均線周期を自動的に調整して,戦略の適応性を向上させる
  2. 波動率フィルターを導入する:ATRまたは他の波動率指標を追加し,高波動期間のストップロースを調整する
  3. ポジション管理の最適化:口座の純額に基づく動的なポジション調整を実現し,資金利用の効率性を向上させる
  4. 市場環境のフィルタリングを増やす:トレンドの強度指標を導入し,波動的な市場では取引頻度を自動的に低下させる
  5. 出場メカニズムの改善:価格突破または動量指標を組み合わせて,より柔軟な利益獲得メカニズムの開発

要約する

これは,構造が整った,論理が明確なトレンド追跡戦略である.均線交差捕捉によるトレンド,厳格なリスク管理とポジションコントロールを採用し,中長期取引に適している.均線遅れなどの固有の欠陥があるにもかかわらず,推奨された最適化の方向,特に動的パラメータ調整と市場環境フィルタリングの導入により,戦略の安定性と収益性がさらに向上する見込みである.

ストラテジーソースコード
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-17 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bitcoin Strategy by Jag", overlay=true)

// Input Parameters
shortSMALength = input.int(74, title="Short SMA Length")
longSMALength = input.int(70, title="Long SMA Length")
trailStopOffset = input.float(353, title="Trailing Stop Offset (USD)")  // Trailing Stop Loss Offset in USD
tradeSize = input.float(1, title="Trade Size")

// Automatically set Take Profit as 3 times Stop Loss
fixedTakeProfit = trailStopOffset * 3

// Backtesting Date Range
startDate = timestamp(2025, 02,13, 0, 0)
endDate = timestamp(2025, 03, 31, 23, 59)
withinDateRange = true

// Indicators
shortSMA = ta.sma(close, shortSMALength)
longSMA = ta.sma(close, longSMALength)

// Crossover Conditions
longCondition = withinDateRange and ta.crossover(shortSMA, longSMA)
shortCondition = withinDateRange and ta.crossunder(shortSMA, longSMA)

// Entry Logic
if (strategy.position_size == 0)  // Only allow new trades if no position is open
    if (longCondition)
        strategy.entry("Long", strategy.long, tradeSize)

    if (shortCondition)
        strategy.entry("Short", strategy.short, tradeSize)

// Exit Logic for Long Position
if (strategy.position_size > 0)
    strategy.exit("Long exit", "Long", stop=strategy.position_avg_price - trailStopOffset, limit=strategy.position_avg_price + fixedTakeProfit)  // Using stop and limit

// Exit Logic for Short Position
if (strategy.position_size < 0)
    strategy.exit("Short Exit", "Short", stop=strategy.position_avg_price + trailStopOffset, limit=strategy.position_avg_price - fixedTakeProfit)  // Using stop and limit

// Plot Moving Averages
plot(shortSMA, color=color.blue, title="Short SMA")
plot(longSMA, color=color.black, title="Long SMA")

// Visual Signals
plotshape(series=longCondition and strategy.position_size == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=shortCondition and strategy.position_size == 0, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)