トレンド・トレード戦略 MACD インディケーターに基づく

作者: リン・ハーンチャオチャン, 日付: 2024-02-02 11:32:48
タグ:

img

概要

この戦略の核心は,TASC誌1998年9月号にアンドリュー・アブラハムが掲載した記事"Trading the Trend"で開発した指標に基づいています.指標は,中長期のトレンドを把握することを目的として,市場トレンド方向を決定するために平均の真の範囲と価格チャネルを使用し,貿易信号フィルタリングのためのMACD指標と組み合わせています.

戦略の論理

この戦略は,まず21日間の重度の移動平均をベースライン波動性範囲 (ATR) として計算する.その後,過去21日間の最高値と最低値を計算する.現在の閉値とベースライン範囲の上限と下限を比較することによって,トレンド方向を決定するために価格がチャネルを突破するかどうかを判断する.

具体的には,上チャネル制限は,過去21日間の最高価格マイナス3倍ベースラインATRで,下チャネル制限は,過去21日間の最低価格プラス3倍ベースラインATRで定義されます. 閉じる価格が上限を超えると,上昇傾向を示します. 閉じる価格が下限を下回ると,下落傾向を示します.

トレンド方向を決定する一方で,この戦略はフィルタリングのためのMACD指標も導入している.MACDヒストグラムが正である場合にのみ購入信号を生成し,購入機会を逃さないようにする.

利点

この戦略は,傾向決定と指標フィルタリングを組み合わせ,短期変動に誤導されずに中長期市場傾向方向を効果的に特定することができます.主な利点は次のとおりです.

  1. 傾向を特定し,長期的な方向性を正確に特定するために価格チャネルを使用する
  2. 動的ベースライン波動性範囲は,市場の変化に適応する
  3. MACD フィルタリングは,購入ポイントを欠けているのを避けるために追加の意思決定サポートを提供します.
  4. 設定可能なパラメータは,戦略スタイルを調整する柔軟性を提供します.

リスク

この戦略には,主に次の側面において,いくつかのリスクがあります.

  1. 価格チャネルの破裂リスク
  2. MACD信号の誤差のリスク
  3. パラメータの設定が不十分であれば 戦略が不安定になる可能性があります

これらのリスクは,パラメータを最適化し,厳格なポジションサイズ化,タイムリーなストップ・ロストによって軽減できます.

オプティマイゼーションの方向性

戦略は,以下の主要な側面で最適化できます.

  1. 最適値を見つけるために異なるパラメータの組み合わせをテスト

バックテストに基づいて最高返済をもたらすパラメータの組み合わせを見つけるために,長さまたは倍数の異なる組み合わせをテストします.

  1. 他の指標でフィルタリングを追加

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)




もっと