
この戦略は,MACDトレンドフォロー戦略と呼ばれるもので,MACD指標を用いて価格トレンドを判断し,トレンドフォローで取引する量化戦略である.この戦略は,中長期のトレンドを捕捉し,トレンドが転じるときに適切なタイミングでポジションを調整することを目的としている.
この戦略は,MACD指標を使用して価格の傾向を判断する.MACD指標は,快線EMA ((12日) と慢線EMA ((26日) で構成される突破指標であり,それらの離散値はMACD柱状の線を形成し,柱状の線の9日EMAはMACDの信号線を形成する.MACD線上の信号線を横切るときは金叉で,価格が上昇傾向にあることを示し,MACD線の下を通るときは死叉で,価格が下落傾向にあることを示している.
この戦略は,MACD線と信号線を計算し,MACD線と信号線の差分値を計算する.デルタが0を超えると買入シグナルが生じ,デルタが0を超えると売出シグナルが生じ,この2つのシグナルに基づいてポジションを調整する.騒音をフィルターするために,戦略は,EMA均等線を導入し,価格が均等線を破るときのみ真の取引シグナルが生じる.
具体的には,戦略の論理は以下の通りです.
このような設計によって,戦略は中長期トレンドに順応して取引することができ,トレンドが変化したときにタイミングでポジションを調整し,短期市場の騒音に惑わされないようにします.
この戦略の利点は以下の通りです.
この戦略にはいくつかのリスクがあります.
対策として
この戦略は,以下の点で最適化できます.
指標の組み合わせ,ストップダスト,自己適応パラメータなどの方法の最適化により,この戦略の効果を大幅に向上させることができる.
全体として,このMACDトレンドフォロー戦略は,シンプルで効果的なMACD指標によって中長期トレンドを判断し,より明確なトレンドフォロー取引ロジックを設計しています.それは,トレンドを捕捉する能力と,一定のリスク管理措置を持っています.さらなる最適化と改善により,この戦略は,非常に実用的な量化取引システムになることができます.それは,短期利益ではなく,長期にわたる安定した収益を追求する投資家に適しています.
/*backtest
start: 2022-11-14 00:00:00
end: 2023-10-27 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's MACD Strategy v1.0", shorttitle = "MACD str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
usefil = input(false, defval = false, title = "Use EMA filter")
lenfil = input(5, defval = 5, minval = 1, maxval = 50, title = "EMA filter period")
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
//Signals
ema = ema(close, lenfil)
trend = crossover(delta, 0) == true ? 1 : crossunder(delta, 0) == true ? -1 : trend[1]
up = trend == 1 and (low < ema or usefil == false) ? 1 : 0
dn = trend == -1 and (high > ema or usefil == false) ? 1 : 0
plot(ema, color = black, transp = 0)
if (up == 1)
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
if (dn == 1)
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)