デュアル移動平均トレンドフォローとリスク管理取引戦略

EMA SMA
作成日: 2025-02-21 09:36:33 最終変更日: 2025-02-27 17:18:43
コピー: 1 クリック数: 330
2
フォロー
319
フォロワー

デュアル移動平均トレンドフォローとリスク管理取引戦略 デュアル移動平均トレンドフォローとリスク管理取引戦略

概要

この戦略は,多周期的なトレンド追跡とリスク管理を組み合わせた自動取引システムである.これは,主に5分と1分の2つの時間周期の指数移動平均 (EMA) を使って取引の機会を識別し,固定パーセントのストップ・アンド・テイク・セットを適用してリスクを制御する.この戦略は,ショートライントレーダー,特にトレンド追跡を専門とするトレーダーに特に適しています.

戦略原則

戦略の核心的な論理は,2つの時間周期のトレンド判断に基づいています.

  1. 5分周期の200周期EMAを主要なトレンドフィルターとして使用し,価格がこの平均線上にある場合にのみ多めにすることを許可し,平均線の下にある場合にのみ空きを許可する.
  2. 1分周期で,入場トリガーとして20サイクルEMAを使用する. 価格が平均線を上方から横切るときに多信号をトリガーし,下方から横切るときに空信号をトリガーする.
  3. リスク管理は固定比率の方法を採用し,各取引のストップロスは入場価格の0.5%で,収益目標はストップロスの距離の2倍で設定され,1:2のリスク/利益比率を形成する.

戦略的優位性

  1. 多周期分析により,より信頼性の高いトレンド判断が可能になり,偽突破のリスクが軽減されます.
  2. 固定比率によるリスク管理方法により,資金管理がより規範化され,体系化される.
  3. リスク対利益比は2対1で,勝率は40%であっても利益を得ることができます.
  4. 戦略の論理はシンプルで明確で,理解し実行しやすい.
  5. ビジュアル化された取引シグナルのマークは,反測を容易に検証する.

戦略リスク

  1. 市場が急激に揺れ動くと,偽信号が頻発する可能性があります.
  2. 0.5%のストップは,波動率が低い時期には,過密である可能性があります.
  3. 均線交差に依存すると,遅滞が生じることがあります.
  4. 高頻度取引は取引コストを高める可能性があります.
  5. 市場が急激に逆転すると,大きな引き下げが起こりうる.

戦略最適化の方向性

  1. 波動率指標を導入して,ストップダメージ距離を動的に調整する.
  2. 交通量確認信号を増やして入場品質を向上させる.
  3. ADXのようなトレンド強度指標を足して弱気なトレンドをフィルターすることを考えることができます.
  4. 横盤市場では,RSIのような振動指標を加え,シグナルをフィルターする.
  5. 異なる市場特性の発展動態に応じてリスク/利益の比率設定.

要約する

これは,構造が整った,論理が明確なトレンド追跡戦略である. 多周期分析と厳格なリスク管理を組み合わせることで,資金を保護しながら,市場動向を効果的に捉えることができる. いくつかの最適化余地があるが,戦略の基本的枠組みは,基礎戦略としてさらなる改善とカスタマイズに適した安定である.

ストラテジーソースコード
/*backtest
start: 2025-01-21 00:00:00
end: 2025-02-20 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"DOGE_USDT"}]
*/

//@version=5
strategy("Scalping Strategy: 1-min Entries with 5-min 200 EMA Filter", overlay=true, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=5, calc_on_every_tick=true)

// --- Higher Timeframe Trend Filter ---
// Get the 200-period EMA on a 5-minute timeframe
ema200_5 = request.security(syminfo.tickerid, "5", ta.ema(close, 200), lookahead=barmerge.lookahead_on)
plot(ema200_5, color=color.purple, title="5-min 200 EMA")

// --- Local (1-Minute) Indicators ---
// On a 1-minute chart, calculate a 20-period EMA for entry triggers
ema20_1 = ta.ema(close, 20)
plot(ema20_1, color=color.yellow, title="1-min 20 EMA")

// --- Entry Conditions ---
// For long entries:
//   - The overall trend is bullish: current close > 5-min 200 EMA
//   - The 1-min candle closes and crosses above its 20 EMA
longCondition = (close > ema200_5) and ta.crossover(close, ema20_1)

// For short entries:
//   - Overall bearish trend: current close < 5-min 200 EMA
//   - 1-min candle crosses below its 20 EMA
shortCondition = (close < ema200_5) and ta.crossunder(close, ema20_1)

// --- Risk Management Settings ---
// For scalping, use a tight stop loss. Here we set risk at 0.5% of the entry price.
var float riskPerc = 0.005  // 0.5% risk per trade

// Declare global variables for stop loss and take profit so they can be used outside the if-blocks
var float longStop  = na
var float longTP    = na
var float shortStop = na
var float shortTP   = na

// --- Trade Execution --- 
if (longCondition)
    entryPrice = close
    // Stop loss for long: 0.5% below entry
    longStop := entryPrice * (1 - riskPerc)
    // Take profit: twice the risk distance (1:2 risk-reward)
    longTP   := entryPrice + 2 * (entryPrice - longStop)
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", from_entry="Long", stop=longStop, limit=longTP)

if (shortCondition)
    entryPrice = close
    // Stop loss for short: 0.5% above entry
    shortStop := entryPrice * (1 + riskPerc)
    // Take profit: twice the risk distance
    shortTP   := entryPrice - 2 * (shortStop - entryPrice)
    strategy.entry("Short", strategy.short)
    strategy.exit("Short Exit", from_entry="Short", stop=shortStop, limit=shortTP)

// --- Visual Debug Markers ---
// Plot a green triangle below bars when a long signal is generated
plotshape(longCondition, title="Long Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.tiny)
// Plot a red triangle above bars when a short signal is generated
plotshape(shortCondition, title="Short Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.tiny)