MACD ゴールデンクロスとデスクロス戦略

作者: リン・ハーンチャオチャン開催日:2024年4月26日 12:08:24
タグ:マックドエイマDIFDEA

img

概要

この戦略は,DIF線とMACD指標のDEA線のクロスオーバーを使用して,取引信号を生成する.DIF線がDEA線を超えると,長い信号を生成し,DIF線がDEA線を下回ると,短い信号を生成する.この戦略のバックテストの結果,BTCUSDT取引ペアでは,勝利率は約40%で,年間収益は1.05である.しかし,保有資産の数が継続的に増加するので,独立した仲介戦略として使用することはできません.

戦略原則

  1. 急速指数関数移動平均 (EMA) と遅い指数関数移動平均 (EMA) を計算する.
  2. DIF線を計算します.これは,高速EMAと遅いEMAの差です.
  3. DEA線を計算する.これは DIF線の EMA です.
  4. MACDヒストグラムを計算します.これはDIF線とDEA線の差です.
  5. DIF線が DEA線を横切ると,ロング信号を発しロングポジションを開く.
  6. DIF線が DEA線を下に切ると,ショート信号を出して,ロングポジションを閉じてショートポジションを開く.
  7. 反対のクロスオーバー信号が再び表示されると,現在のポジションを閉じ,反対の方向にポジションを開きます.

戦略 の 利点

  1. この戦略は,広く使用されているMACD指標を使用し,理解し,実行するのが簡単です.
  2. 戦略の論理は明確で 取引の信号は明瞭です
  3. 市場動向に適しており,市場の主要動向を追跡することができます.

戦略リスク

  1. この戦略の勝利率は低くて 40%に過ぎません つまり取引の60%が損をする可能性があります
  2. この戦略により,保有資産の数は継続的に増加し,さらなるリスクにさらされる可能性があります.
  3. 変動する市場では,この戦略は頻繁に取引信号を生成し,高い取引コストにつながる可能性があります.
  4. この戦略は,大きな損失をもたらす可能性があるストップ・ロースやポジション管理などのリスク管理を考慮していない.

戦略の最適化方向

  1. 変動する市場での取引を避けるため,長期移動平均などのトレンドフィルターを導入する.
  2. MACD指標のパラメータを最適化し,例えば高速EMA,遅いEMA,シグナルラインの期間を異なる市場状況に適応させる.
  3. リスク管理措置を追加し,潜在的な損失を制御するストップ・ロースやポジション管理などを行う.
  4. 他の技術指標や基本分析と組み合わせて,取引信号の信頼性を向上させる.

概要

MACDゴールデンクロスとデスクロス戦略は,トレンド市場に適したシンプルでわかりやすい取引戦略である.しかし,この戦略の勝利率は低く,リスク管理対策が欠けているため,さらなる最適化と改善が必要です.トレンドフィルター,パラメータの最適化,リスク管理を追加し,他の分析方法と組み合わせることで,この戦略のパフォーマンスと信頼性が向上することができます.それでも,この戦略は依然として独立した仲介戦略として使用できず,より良い取引結果を得るために他の戦略と組み合わせなければなりません.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
// @description 该策略使用 MACD DIF 线与 EDA 线产生金叉与死叉时进行入场与出场操作, 回测后发现胜率约 40%, BTCUSDT 年化利率 1.05, 同时会导致持有的资产数量不断上升, 无法作为一个独立的套利策略进行使用.

strategy("MACD 金叉策略", overlay=true)

fastLength = input(12, "快线长度")
slowLength = input(26, "慢线长度")
MACDLength = input(9, "MACD 均线长度")

deltaIncreaseOver0 = input(color.green,'MACD 柱在 0 线以上增长')
deltaIncreaseUnder0 = input(color.rgb(153, 230, 156),'MACD 柱在 0 线以下增长')

deltaDecreaseOver0 = input(color.orange,'MACD 柱在 0 线以上下跌')
deltaDecreaseUnder0 = input(color.red,'MACD 柱在 0 线以下下跌')

buySellEnabled = input(true, '是否显示入场与出场信号')

// @variable 做多轮数
var longRound = 0
// @variable 做空轮数
var shortRound = 0

DIF = ta.ema(close, fastLength) - ta.ema(close, slowLength) // 快慢均线差值
EDA = ta.ema(DIF, MACDLength) // DIF 线的 EMA 均线
delta = DIF - EDA // MACD 柱高度

// plot(0, 'Zero', color.black)
plot(DIF,'DIF', color.yellow)
plot(EDA, "EDA", color.purple)

isDeltaIncreasing = delta[1] < delta
isDeltaOver0 = delta > 0
deltaColor = isDeltaIncreasing ? (isDeltaOver0? deltaIncreaseOver0: deltaIncreaseUnder0) :( isDeltaOver0? deltaDecreaseOver0: deltaDecreaseUnder0)
plot(delta, "Delta", deltaColor, style = plot.style_columns)

isDeltaV = delta > delta[1] and delta[2] > delta[1]
isDeltaA = delta < delta[1] and delta[2] < delta[1]

longBuy(round) =>
	entry = str.format("做多买入 {0}",round)
	// log.info(str.format("{0} {1}",entry,close))
	strategy.entry(entry, strategy.long, comment=entry)

longSell(round) =>
	entry = str.format("做多买入 {0}",round)
	exit = str.format("做多卖出 {0}",round)
	// log.info(str.format("{0} {1}",exit,close))
	strategy.close(entry, comment=exit)		

shortSell(round) =>
	entry = str.format("做空卖出 {0}",round)
	// log.info(str.format("{0} {1}",entry,close))
	strategy.entry(entry, strategy.short, comment= entry) 

shortBuy(round) =>
	entry = str.format("做空卖出 {0}",round)
	exit = str.format("做空买入 {0}",round)
	// log.info(str.format("{0} {1}",exit,close))
	strategy.close(entry, comment=exit)		

if (buySellEnabled) 
	if (ta.crossunder(DIF, EDA))
		longSell(longRound)
	if (ta.crossover(DIF, EDA))
		longRound := longRound + 1
		longBuy(longRound)

		
		

関連性

もっと