MACDトレンドフォロー戦略


作成日: 2024-03-29 15:14:18 最終変更日: 2024-03-29 15:14:18
コピー: 0 クリック数: 588
1
フォロー
1617
フォロワー

MACDトレンドフォロー戦略

概要

MACDトレンドトラッキング戦略は,MACD指標に基づく量化取引戦略である.この戦略の主な構想は,MACD指標の金叉と死叉の信号を利用してトレンドの方向を判断し,適切なタイミングで多頭または空頭ポジションを確立することである.MACD線が信号線を横切って0軸を横切るとき,多頭ポジションを開く;MACD線が信号線を横切って0軸を横切って0軸を横切ると,空頭ポジションを開く.この戦略は,多頭ストップとして最近の低点を使用し,空頭ストップとして最近の高点を使用する.平衡の条件は,MACD線が信号線を逆転して横切ることである.

戦略原則

MACDトレンド追跡戦略の核心原則は,MACD指標を使用してトレンドの形成と逆転を捉えることです. MACD指標は,2つの均線 (迅速な均線と遅い均線) の差値で構成され,信号線を配合して取引シグナルを生成します. MACD線が信号線を横切って0軸を横切ると,上昇傾向が形成され,多頭ポジションが開きます. MACD線が信号線を横切って0軸を横切ると,下降傾向が形成され,空頭ポジションが開きます.

戦略的優位性

  1. MACDのトレンド追跡戦略は,トレンドの可能性を効果的に捉え,トレンド形成の初期にポジションを構築し,トレンドの動力を十分に活用します.

  2. この策略は,MACD金叉死叉と0軸を同時にフィルタリング条件として使用し,振動市場における偽信号をうまくフィルタリングすることができる.

  3. 戦略は,最近の顕著な高低値をストップ・ローズとして採用し,単一取引のリスクのを制御します.

  4. 戦略の論理は明確で,理解し,実行しやすく,初心者向けに適しています.

戦略リスク

  1. MACD指数は本質的に後退指数であり,トレンドの逆転の初期には大きな後退が発生する可能性があります.

  2. 戦略 変動する市場では,取引が頻繁になり,取引コストが高くなる可能性があります.

  3. 止損位の設定は,最近の大幅な高低点に依存し,特定の場合,止損が早すぎたり遅すぎたりする可能性があります.

  4. この戦略は,ポジション管理と資金管理を考慮せず,実用的なアプリケーションでは,具体的な状況に合わせて最適化する必要があります.

戦略最適化の方向性

  1. 信号の信頼性や正確性を高めるために,フィルタリング条件として他の技術指標や価格行動パターンを導入することを考えることができます.

  2. ATRやパーセンテージ・ストップなどで,リスクをより良くコントロールする.

  3. ポジション管理と資金管理の仕組みを導入し,市場の変動や口座のエクイティなどに応じてポジションのサイズを動的に調整する.

  4. 異なる市場と取引基準に合わせて,パラメータを最適化して調整し,最も適切なパラメータの組み合わせを見つけます.

要約する

MACDトレンドトラッキング戦略は,MACD指標の特性を利用してトレンドの機会を捉えるためのシンプルで効果的な量化取引戦略である.この戦略の論理は明確で,理解しやすく,実装しやすく,初心者向けに適しています.しかし,実際のアプリケーションでは,リスク管理に注意を払い,他の方法と組み合わせて最適化や改善を行う必要があります.

ストラテジーソースコード
/*backtest
start: 2023-03-23 00:00:00
end: 2024-03-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MACD trendfollow", shorttitle="MACD TF", overlay=true)
// switch = input(true, title="Enable MACD Bar Color")
// X001TK MACD trendfollow Strategy
//
// 
// This strategy combines the non standart approach in MACD strategy to buy once to buy when the MACD value goes above Signal line and a zero line, to sell on the opposite condition.
//
//
// This strategy goes long if the MACD (3,9,5) goes above its Signal and above zero
//
// You can set Stop loss on the recent lowest low when long position is opened and recent highest hugh in short
// 
//
// Exit rule is simple. We close the LONG position once MACD goes below Signal line and close SHORT on the opposite condition 
//
// 
// 
//
// Input
fastMAlen = input(3, minval=1, title="MACD fast moving average")
slowMAlen = input(9,minval=1, title="MACD slow moving average")
signalMACDlen = input(5,minval=1, title="MACD signal line moving average")
// switch = input(true, title="Enable MACD Bar Color")
length = input(1, minval=1)



// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2002, title = "From Year", minval = 2000)
ToMonth   = input(defval = 3, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2029, title = "To Year", minval = 2017)



// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 00, 00)        // backtest finish window
window()  => true // create function "within window of time"

// MACD Calculation
MACD = ema(close, fastMAlen) - ema(close, slowMAlen)
signalMACD = ema(MACD, signalMACDlen)
delta = MACD - signalMACD
fastMA = ema(close,fastMAlen)
slowMA = ema(close,slowMAlen)


// Colors
//bartrendcolor = MACD > signalMACD and MACD > 0? green : MACD < signalMACD and MACD < 0? red : MACD < signalMACD? gray :  gray 
//barcolor(switch?bartrendcolor:na)

barcolour=(MACD > signalMACD and MACD > 0)?#53B987:(MACD < signalMACD and MACD < 0)?#EB4D5C:na
barcolor(color=barcolour)


// === STRATEGY ===
// conditions

longCond =  MACD > signalMACD and MACD > 0 
XlongCond = MACD < signalMACD 
ShortCond = MACD < signalMACD and MACD < 0 
XShortCond = MACD > signalMACD 





strategy.entry("long", strategy.long, when=longCond==true and window()==true )
//strategy.exit(id="Close Long", stop=longStop)//, limit=longTake)
strategy.close("long", when=XlongCond==true and window()==true)
strategy.entry("short", strategy.short,  when=ShortCond==true and window()==true )
//strategy.exit(id="Close Short", stop=shortStop)//, limit=shortTake)
strategy.close("short", when=XShortCond==true and window()==true)

// === /STRATEGY ===