移動平均ゴールデンクロスとデッドクロス取引戦略


作成日: 2024-02-22 16:25:13 最終変更日: 2024-02-22 16:25:13
コピー: 0 クリック数: 364
1
フォロー
1182
フォロワー

移動平均ゴールデンクロスとデッドクロス取引戦略

概要

移動平均金叉死叉取引戦略は,短期および長期の移動平均 ((EMA)) の交差を追跡する,金叉および死叉時に買入および販売操作を行う定量取引戦略である.この戦略は,MACD指標と組み合わせて取引信号判断を行う.

戦略原則

この戦略は主に12日EMA,26日EMAおよびMACD指標に依存している.具体的論理は以下の通りである.

  1. 12日EMAと26日EMAを計算する.
  2. MACD ((すなわち,12日EMA減26日EMA) を計算する.
  3. MACDの9日EMAを信号線として計算する.
  4. MACD上で信号線を穿越すると,買取信号が生成される.
  5. MACDの下の信号線を通過すると,出売信号が生成される.
  6. 信号を生成した2番目のK線が閉じる時に,対応する買取または販売操作を行う.

フィルタリング条件は以下の通りです.

  1. 取引時間は,毎日の非取引時間である.
  2. MACDとシグナルライン差の絶対値は0.08より大きい必要があります.
  3. 単一方向での取引のみが許可されます.

優位分析

この戦略は,移動平均の交差とMACD指標を組み合わせて,市場の短期および中期トレンドの転換点を効果的に捕捉することができます.主な利点は:

  1. 戦略のルールはシンプルでわかりやすく,理解しやすく,実行できます.
  2. 指標のパラメータは最適化され,パフォーマンスは比較的安定している.
  3. 追跡中の短期トレンドと時効的なストップ・ロスの退出を兼ね備える.
  4. 取引の論理は厳密であり,無効取引を避ける.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. 回測データ適合リスク.実用化時には,パラメータと値の調整が必要になるかもしれない.
  2. 取引の頻度が高く,滑点コストが高くなるリスク
  3. タイムリーで脱退しない場合の損失のリスク.
  4. 量化取引は,その利害のリスクを高めています.

対応する緩和策:

  1. ダイナミック最適化パラメータ,調整値。
  2. 取引規制を緩和し,不必要な取引を減らす.
  3. 逆転信号を判断する指標も増えました.
  4. ポジションとレバレッジを厳密に管理する

最適化の方向

この戦略は以下の点で最適化できます.

  1. より長い周期の移動平均の組み合わせをテストし,最適なパラメータを探します.
  2. 企業業績の向上,重大事件などの基本的な要素をフィルターとして使う.
  3. ブルリン・バンドやKDJなどの指標を組み合わせて,トレンドの逆転のタイミングを判断します.
  4. 開発の止損メカニズム. 損失が,事前に設定された止損ポイントに達すると,主動的に止損する.
  5. Danger ratio を追加して最大撤退を制御する.

要約する

移動平均線金叉死叉は,MACD取引戦略と結合し,簡単なトレンド追跡によって取引信号を形成し,実行しやすい.適切なフィルタリング条件と組み合わせたリスク制御は,有効な量化取引戦略である.この戦略は,パラメータ最適化,止損機構の追加,より多くの補助指標と組み合わせることで改善することができる.

ストラテジーソースコード
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMMA", max_bars_back = 200)

var up1 = #26A69A
var up2 = #B2DFDB
var down1 = #FF5252
var down2 = #FFCDD2
var confirmationLength = 2

var earliest = timestamp("20 Jan 2024 00:00 +0000")

// Regn u
shortEMA = ta.ema(close, 12)
longEMA = ta.ema(close, 26)
macd = shortEMA - longEMA
signal = ta.ema(macd, 9)
delta = macd - signal
absDelta = math.abs(delta)
previousDelta = delta[1]

signalCrossover = ta.crossover(macd, signal)
signalCrossunder = ta.crossunder(macd, signal)

harskiftetdag = hour(time[confirmationLength]) > hour(time)

enterLongSignal = signalCrossover[confirmationLength] and (macd > signal) and (absDelta >= 0.08)
exitLongSignal = signalCrossunder[confirmationLength] and (macd < signal)

enterShortSignal = signalCrossunder[confirmationLength] and (macd < signal) and (absDelta >= 0.08)
exitShortSignal = signalCrossover[confirmationLength] and (macd > signal)

// Så er det tid til at købe noe
qty = math.floor(strategy.equity / close)

if time >= earliest and not harskiftetdag
    if exitLongSignal 
        strategy.close("long")
    else if enterLongSignal
        strategy.close("short")
        strategy.entry("long", strategy.long, qty = qty)

    if exitShortSignal
        strategy.close("short")
    else if enterShortSignal
        strategy.close("long")
        strategy.entry("short", strategy.short, qty = qty)

// Så er det tid til at vise noe

plot(macd, color=color.blue)
plot(signal, color=color.orange)

// bgcolor(color = delta > 0.1 ? color.new(color.green, 90) : color.new(color.green, 100))
// bgcolor(color = signalCrossover ? color.purple : signalCrossunder ? color.aqua : color.new(color.green, 100))

histogramColor = delta > 0 ? (previousDelta < delta ? up1 : up2) : (previousDelta > delta ? down1 : down2)

plot(
     delta,
     style=plot.style_columns,
     color=histogramColor
     )