MACD指標に基づくトレンド取引戦略


作成日: 2024-02-02 11:32:48 最終変更日: 2024-02-02 11:32:48
コピー: 3 クリック数: 642
1
フォロー
1617
フォロワー

MACD指標に基づくトレンド取引戦略

概要

この戦略の核心は,アンドリュー・アブラハムが1998年9月の取引トレンド誌TASCのコラムで発表した記事で開発した指標に基づいています.この指標は,平均実際の波動範囲と価格チャネルを使用して,市場トレンドの方向を判断し,MACD指標と組み合わせて,中長線トレンドを捉えるための取引信号フィルタリングを行います.

戦略原則

この戦略は,まず21日平均の実際の波動範囲 ((ATR) の重量移動平均をベース波動範囲として計算する.それから,過去21日の最高値と最低値を計算し,現在のK線閉店価格とベース波動範囲の上下限を比較して,価格がチャネルを突破したかどうかを判断し,結果的にトレンドの方向性を判断する.

具体的には,チャネルの上限は,過去21日間の最高価格減3倍ベースATR,チャネルの下限は過去21日間の最低価格加3倍ベースATRを定義する. 閉店価格がチャネルの上限より高いときは,看板傾向として判断する. 閉店価格がチャネルの下限より低いときは,看板傾向として判断する.

トレンドの方向を判定する一方で,この戦略はMACD指標をフィルタリングするために導入した.MACD柱状線が正の時にのみ買い信号を生成し,買い点を逃さないようにした.

戦略的優位性

この戦略は,トレンド判断と指標フィルタリングを組み合わせて,市場の中間の長線トレンドの方向を効果的に判断し,市場の短期的な波動に誤って導かれないようにします.具体的には以下の利点があります.

  1. 価格チャネルのトレンド判定を使用して,長線トレンドの方向を正確に判定する
  2. 市場変化に合わせて動的に調整できる基準の波動範囲
  3. MACDのフィルタリングにより,決定の根拠を高め,買い先を逃さない.
  4. 設定可能なパラメータ,柔軟なポリシースタイル

戦略リスク

この戦略にはリスクもありますが,以下のような側面があります.

  1. 価格チャンネルの範囲は,完全に破られるリスクを回避することはできません.
  2. MACD指標は誤った信号を発生させる危険性がある
  3. パラメータを正しく設定しない場合,strategyが不安定になる可能性があります.

この場合,最適化パラメータ設定,厳格なポジションサイジング,及時な止損によってリスクを低減することができる.

戦略最適化の方向性

この戦略は以下の点で最適化できます.

  1. 異なるパラメータの組み合わせをテストし,最適なパラメータを探します.

異なるLengthパラメータまたはMultiplierパラメータの組み合わせをテストして,反測データに基づいて最高の収益率を生むパラメータの組み合わせを見つけることができます.

  1. 他の指標と組み合わせたフィルタリングsignal

RSI,KDJなどの他の指標と組み合わせてシグナルをフィルタリングして,収益率を上げることができるかどうかをテストできます.

  1. 動的調整パラメータ

市場状況に応じてパラメータを動的に調整できます.例えば,トレンドが顕著であるときに適切な通道範囲を放宽し,震動時に適切な通道範囲を緊縮します.

要約する

この戦略は,全体として比較的堅実なトレンド追跡戦略である.これは,価格チャネルがトレンド方向を判断し,MACD指数フィルター信号の方法と組み合わせて,市場の長線トレンドを効果的に判断し,安定した収益を生成する.パラメータの最適化,リスク管理,適切な修正により,この戦略は,量化取引システムの重要な構成要素になることができる.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © melihtuna

//@version=1
strategy("Trend Trader Strategy with MACD", overlay=true)

// === Trend Trader Strategy ===
Length = input(21),
Multiplier = input(3, minval=1)
MacdControl = input(true, title="Control 'MACD Histogram is positive?' when Buy condition")
avgTR      = wma(atr(1), Length)
highestC   = highest(Length)
lowestC    = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = iff(close > hiLimit and close > loLimit, hiLimit,
        iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
pos =	iff(close > ret, 1,
	    iff(close < ret, -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(ret, color= blue , title="Trend Trader Strategy with MACD")

// === 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 = 2020, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

// === MACD ===
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdCond= MacdControl ? histLine[0] > 0 ? true : false : true

strategy.entry("BUY", strategy.long, when = window() and pos == 1 and macdCond)
strategy.entry("SELL", strategy.short, when = window() and pos == -1)