この戦略の核心は,TASC誌1998年9月号にアンドリュー・アブラハムが掲載した記事"Trading the Trend"で開発した指標に基づいています.指標は,中長期のトレンドを把握することを目的として,市場トレンド方向を決定するために平均の真の範囲と価格チャネルを使用し,貿易信号フィルタリングのためのMACD指標と組み合わせています.
この戦略は,まず21日間の重度の移動平均をベースライン波動性範囲 (ATR) として計算する.その後,過去21日間の最高値と最低値を計算する.現在の閉値とベースライン範囲の上限と下限を比較することによって,トレンド方向を決定するために価格がチャネルを突破するかどうかを判断する.
具体的には,上チャネル制限は,過去21日間の最高価格マイナス3倍ベースラインATRで,下チャネル制限は,過去21日間の最低価格プラス3倍ベースラインATRで定義されます. 閉じる価格が上限を超えると,上昇傾向を示します. 閉じる価格が下限を下回ると,下落傾向を示します.
トレンド方向を決定する一方で,この戦略はフィルタリングのためのMACD指標も導入している.MACDヒストグラムが正である場合にのみ購入信号を生成し,購入機会を逃さないようにする.
この戦略は,傾向決定と指標フィルタリングを組み合わせ,短期変動に誤導されずに中長期市場傾向方向を効果的に特定することができます.主な利点は次のとおりです.
この戦略には,主に次の側面において,いくつかのリスクがあります.
これらのリスクは,パラメータを最適化し,厳格なポジションサイズ化,タイムリーなストップ・ロストによって軽減できます.
戦略は,以下の主要な側面で最適化できます.
バックテストに基づいて最高返済をもたらすパラメータの組み合わせを見つけるために,長さまたは倍数の異なる組み合わせをテストします.
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)