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

MACD EMA DIF DEA
作成日: 2024-04-26 12:08:24 最終変更日: 2024-04-26 12:08:24
コピー: 0 クリック数: 1107
1
フォロー
1617
フォロワー

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

概要

この戦略は,MACD指標のDIF線とDEA線の交差を用い,取引信号を生成する. DIF線がDEA線を上から下へと渡るとき,多行信号を生成する;DIF線がDEA線を上から下へと渡るとき,空白信号を生成する. この戦略の反省結果は,BTCUSDTの取引ペアでは,約40%の勝率と,年収1.05のリターン率を示しているが,保有する資産の数が増加し続ける結果になるので,独立したセールス戦略として使用できない.

戦略原則

  1. 速動平均 ((EMA) と遅動平均 ((EMA) を計算する.
  2. DIF線,つまり高速EMAと遅速EMAの差値を計算する.
  3. DEA線,すなわちDIF線のEMAを計算する.
  4. DIF線とDEA線の差値であるMACD柱状図を計算する.
  5. DIF線がDEA線を上から下を通過すると,多行信号が生成され,多行が開かれる.
  6. DIF線がDEA線を上から下へと横切ると,空白信号が発生し,平仓を多めにし,開仓を空白する.
  7. 逆の交差信号が再び現れると,現在のポジションを平仓し,逆の方向のポジションを開いた.

戦略的優位性

  1. この戦略は,広く使用されているMACD指標を用いて,容易に理解し,実行する.
  2. 戦略の論理は明確で,取引のシグナルも明確です.
  3. トレンド市場には適用され,市場の主なトレンドを追跡できます.

戦略リスク

  1. この戦略の成功率は40%しかなく,これは60%の取引が失敗する可能性があることを意味します.
  2. この戦略は,保有する資産の数を増加させることで,リスクの余剰の余地をもたらす可能性があります.
  3. 波動的な市場では,この戦略は頻繁に取引シグナルを発生させ,取引コストを高額にする可能性があります.
  4. この戦略は, Stop Loss とポジション管理などのリスク管理を考慮していないため,大きな損失を招く可能性があります.

戦略最適化の方向性

  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)