移動平均クロスオーバーMACD取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-22 16:25:13
タグ:

img

概要

移動平均クロスオーバーMACD取引戦略は,短期および長期指数的な移動平均 (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のキャンドルストイックの閉じる時に対応する購入または販売操作を行います.

さらに,この戦略は,いくつかのフィルタリング条件も設定しています.

  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. 最大抽出率を制御するために抽出率を加える.

概要

移動平均クロスオーバー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
     )

もっと