
この戦略の核心は,アンドリュー・アブラハムが1998年9月の取引トレンド誌TASCのコラムで発表した記事で開発した指標に基づいています.この指標は,平均実際の波動範囲と価格チャネルを使用して,市場トレンドの方向を判断し,MACD指標と組み合わせて,中長線トレンドを捉えるための取引信号フィルタリングを行います.
この戦略は,まず21日平均の実際の波動範囲 ((ATR) の重量移動平均をベース波動範囲として計算する.それから,過去21日の最高値と最低値を計算し,現在のK線閉店価格とベース波動範囲の上下限を比較して,価格がチャネルを突破したかどうかを判断し,結果的にトレンドの方向性を判断する.
具体的には,チャネルの上限は,過去21日間の最高価格減3倍ベースATR,チャネルの下限は過去21日間の最低価格加3倍ベースATRを定義する. 閉店価格がチャネルの上限より高いときは,看板傾向として判断する. 閉店価格がチャネルの下限より低いときは,看板傾向として判断する.
トレンドの方向を判定する一方で,この戦略はMACD指標をフィルタリングするために導入した.MACD柱状線が正の時にのみ買い信号を生成し,買い点を逃さないようにした.
この戦略は,トレンド判断と指標フィルタリングを組み合わせて,市場の中間の長線トレンドの方向を効果的に判断し,市場の短期的な波動に誤って導かれないようにします.具体的には以下の利点があります.
この戦略にはリスクもありますが,以下のような側面があります.
この場合,最適化パラメータ設定,厳格なポジションサイジング,及時な止損によってリスクを低減することができる.
この戦略は以下の点で最適化できます.
異なるLengthパラメータまたはMultiplierパラメータの組み合わせをテストして,反測データに基づいて最高の収益率を生むパラメータの組み合わせを見つけることができます.
RSI,KDJなどの他の指標と組み合わせてシグナルをフィルタリングして,収益率を上げることができるかどうかをテストできます.
市場状況に応じてパラメータを動的に調整できます.例えば,トレンドが顕著であるときに適切な通道範囲を放宽し,震動時に適切な通道範囲を緊縮します.
この戦略は,全体として比較的堅実なトレンド追跡戦略である.これは,価格チャネルがトレンド方向を判断し,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)