トレンドトラッキング逆転戦略は,移動平均値と価格極端値に基づいたトレンド取引戦略である.この戦略は,価格傾向を追跡するために2つの移動平均値を使用し,トレンドが逆転すると逆転ポジションを開設する.同時に,最近のKラインの最高値と最低値に基づいて価格チャネルを計算し,価格がチャネル境界に近づくと損失を止め,リスクをさらに制御する.
この戦略は,価格動向を追跡するために,3期間の高低点移動平均HMAとLMAを使用します.価格がHMAを超えると,上昇傾向と解釈されます.価格がLMAを下回ると,下落傾向と解釈されます.
この戦略は,最近のバーK線内の最高値と最低値に基づいて,価格チャネルの上下線 (uplevelと dnlevel) を計算する.uplevelは,最近のバーK線における最高値と,上向きのリトレース系数を足し,dnlevelは,下向きのリトレース系数を足し,最近バーK線における最低値である.これは価格チャネルの範囲を構成する.
ロングポジションを開くとき,ストップ・ロスはチャネルの上部レールで設定され,ショートポジションを開くとき,ストップ・ロスはチャネルの下部レールで設定される.これは価格逆転による損失のリスクを効果的に制御する.
逆転信号が表示されると,戦略はすぐに新しい価格傾向を追跡するためにオープンポジションを逆転します.これは逆転を追跡する原理です.
改善:
さらに最適化できる余地があります.
MACD,KDなど,いくつかの無効な信号をフィルタリングするために他の指標を導入することができます.
リスクをさらに制御するために,移動ストップ損失,バランスストップ損失など,適応的なストップ損失ロジックを追加することができます.
戦略パフォーマンスに対する異なるパラメータの影響をテストし,MAサイクル長さ,リトラセイメント係数の大きさなどパラメータの組み合わせを最適化します.
この戦略は現在,タイムセッションで取引されています.また,一日中取引に調整することもできます.これは追加のフィルタリングルールを必要とする可能性があります.
概要すると,これは価格チャネルと移動平均を組み合わせたトレンド逆転取引戦略である.トレンドとタイムリーな逆開ポジションを追跡することで,価格の動きを効果的に追跡することができる.同時に,価格チャネルと逆開のリスク管理措置は,単一の損失を効果的に制御することも可能である.戦略のアイデアはシンプルで明確であり,ライブ取引でさらなるテストと最適化に値する.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") corr = input(0.0, title = "Correction, %") bars = input(1, minval = 1) revers = input(false, defval = false, title = "revers") showll = input(true, defval = true, title = "Show Levels") showos = input(true, defval = true, title = "Show Levels one side") showcl = input(false, defval = false, title = "Show Levels continuous line") showbg = input(false, defval = false, title = "Show Background") showar = input(false, defval = false, title = "Show Arrows") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") len = input(3) hma = sma(high, len) lma = sma(low, len) plot(hma) plot(lma) //Levels hbar = 0 hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0 lbar = 0 lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0 uplevel = 0.0 dnlevel = 0.0 hh = highest(high, bars + 1) ll = lowest(low, bars + 1) uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1] dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1] //Background size = strategy.position_size trend = 0 trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1] col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na bgcolor(col) //Lines upcol = na upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime plot(uplevel, color = upcol, linewidth = 2) dncol = na dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red plot(dnlevel, color = dncol, linewidth = 2) //Arrows longsignal = false shortsignal = false longsignal := size > size[1] shortsignal := size < size[1] plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0) //Trading lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if uplevel > 0 and dnlevel > 0 and revers == false strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel) strategy.entry("Long stop", strategy.short, 0, stop = lma) strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel) strategy.entry("Short stop", strategy.long, 0, stop = hma) // if time > timestamp(toyear, tomonth, today, 23, 59) // strategy.close_all()