ダブル移動平均クロスオーバー戦略

EMA SMA
作成日: 2024-05-17 15:48:04 最終変更日: 2024-05-17 15:48:04
コピー: 0 クリック数: 661
1
フォロー
1617
フォロワー

ダブル移動平均クロスオーバー戦略

概要

双均線交差策略は,典型的なトレンドを追跡する取引策である。この策略は,2つの移動平均を用いており,一つは急速な移動平均,もう一つは遅い移動平均である。急速な移動平均が上下からゆっくりな移動平均を横切るときは”,黄金交差”と呼ばれ,上昇傾向が形成される可能性を示し,その時にポジションを多く開く。急速な移動平均が上下からゆっくりな移動平均を横切るときは”,死交差”と呼ばれ,下降傾向が形成される可能性を示し,その時にポジションを空にする。この策略のコードは,シンプルな移動平均 ((SMA) 指数と数値移動平均 ((EMA) を使用することをサポートし,ストップロスを設定することができます。

戦略原則

この戦略の核心は,移動平均のトレンド特性と交差信号を利用してトレンドの方向と開店のタイミングを判断することである.まずは,パラメータを設定して,高速移動平均 ((デフォルト50) と遅い移動平均 ((デフォルト200) の周期,およびSMAまたはEMAを使用する選択を行うこと.それから,二つの移動平均を計算して,それらの交差を判断する.

  1. 急速移動平均線が遅い移動平均線を上方に横切るとき ((金交差) は,現時点でポジションを持っていない場合は,ポジションを多く開設し,同時にストップ・ロスの価格を設定する ( (ストップ・ロスのパーセントに基づいて計算する) 。
  2. 急速移動平均線がゆっくり移動平均線を下向きに横切るとき (死交差) は,現在持っていないポジションは空白して,同時にストップ・ロスの価格を設定する.
  3. 複数のポジションがある場合,死交差が起きた時に平仓する.
  4. 既にある空頭ポジションは,ゴールドクロス発生時に平仓する. 移動平均クロスシグナルでポジションを開き,ストップを設定して,トレンドフォローの方法で価格の中長期トレンドをキャプチャする.

戦略的優位性

  1. トレンドトラッキング戦略の基礎となる 論理はシンプルで明快で 容易に理解し 実行できます
  2. 2つの異なる周期の移動平均の交差によって,トレンドの形成と逆転をよく判断できます.
  3. SMAとEMAの2種類の移動平均をサポートし,柔軟に選択できます.
  4. ストップ・ロスを設定し,損失のリスクを一定程度にコントロールします.
  5. 長期トレンドを把握する,トレンドフォローするスタイルに適している.

戦略リスク

  1. パラメータの選択を誤った場合 (例えば移動平均周期の選択を誤った場合) は,信号の頻度やトレンド判断の遅延を引き起こす可能性があります.
  2. 取引の頻度や不良なパフォーマンスを引き起こす可能性があります.
  3. トレンドの逆転や終焉の際に大きな後退が起こる可能性があります.
  4. 固定パーセンテージのストップは,リスクを十分にコントロールできないかもしれない.

戦略最適化の方向性

  1. パラメータの最適化,移動平均周期,ストップダスト比率など,安定性と利益リスク比率を向上させる.
  2. ATRなどの波動率に関連する指標を導入して,ストップローズを動的に調整することを考えることができます.
  3. トレンド確認後,交差する時にすぐにポジションを開くのではなく,トレンド確認後にポジションを開くか,または他のトレンド確認指標の補助判断を加え,トレンド把握の正確性を向上させる.
  4. 資金管理戦略の改善は,加仓,減仓などで可能である.
  5. 複数の要素を組み合わせた戦略を考える.

要約する

双均線交差策略は,2つの異なる周期の移動平均の交差によってトレンド方向と開拓タイミングを判断する簡単な古典的なトレンド追跡策略であり,中長期のトレンドを把握するのに適しています.しかし,固定パラメータは,変化する市場環境で不安定なパフォーマンスを発揮し,さらなる最適化が必要になります.

ストラテジーソースコード
/*backtest
start: 2023-05-11 00:00:00
end: 2024-05-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//==============================================================================
// A baseline strategy with a well known concept, golden cross & death cross.
// Support for both Simple & Exponential moving averages.
// Support for long & short stop losses as a percentage.:well
//==============================================================================
strategy("Basic Moving Average Crosses", overlay=true)

//------------------------------------------------------------------------------
// configuration
//------------------------------------------------------------------------------
maQuickLength = input(50, title="Quick MA Length") 
maSlowLength  = input(200, title="Quick MA Length") 
useSma        = input(true, title="Use SMA? If false, EMA is used.")

maQuick = useSma ? ta.sma(close, maQuickLength) : ta.ema(close, maQuickLength)
maSlow  = useSma ? ta.sma(close, maSlowLength) : ta.ema(close, maSlowLength)

stop_loss_percentage = input(2.0, title="Stop Loss (%)")

var float longStopLevel = na
var float shortStopLevel = na

bool isGoldenCross = ta.crossover(maQuick, maSlow)
bool isDeathCross  = ta.crossunder(maQuick, maSlow)

//------------------------------------------------------------------------------
// position opening logic
//------------------------------------------------------------------------------

if(strategy.position_size == 0)
    // Golden cross, enter a long position
    if(isGoldenCross)
        strategy.entry("Buy", strategy.long)
        longStopLevel := close - close * stop_loss_percentage/100.0
        strategy.exit("StopLossLong", "Buy", stop=longStopLevel)
    // Death cross, enter short position
    else if(isDeathCross)
        strategy.entry("Sell", strategy.short)
        shortStopLevel := close + close * stop_loss_percentage/100.0
        strategy.exit("StopLossShort", "Sell", stop=shortStopLevel)

//------------------------------------------------------------------------------
// position closing logic
//------------------------------------------------------------------------------
else
    // Close long position on death cross
    if(strategy.position_size > 0 and isDeathCross)
        strategy.close("Buy")
    
    // Close short position on golden cross
    else if(strategy.position_size < 0 and isGoldenCross)
        strategy.close("Sell")

//------------------------------------------------------------------------------
// ploting
//------------------------------------------------------------------------------
plot(maQuick, color=color.yellow)
plot(maSlow, color=color.blue)