トレンド追跡逆転戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-03 16:34:28
タグ:

img

概要

トレンドトラッキング逆転戦略は,移動平均値と価格極端値に基づいたトレンド取引戦略である.この戦略は,価格傾向を追跡するために2つの移動平均値を使用し,トレンドが逆転すると逆転ポジションを開設する.同時に,最近のKラインの最高値と最低値に基づいて価格チャネルを計算し,価格がチャネル境界に近づくと損失を止め,リスクをさらに制御する.

戦略の論理

この戦略は,価格動向を追跡するために,3期間の高低点移動平均HMAとLMAを使用します.価格がHMAを超えると,上昇傾向と解釈されます.価格がLMAを下回ると,下落傾向と解釈されます.

この戦略は,最近のバーK線内の最高値と最低値に基づいて,価格チャネルの上下線 (uplevelと dnlevel) を計算する.uplevelは,最近のバーK線における最高値と,上向きのリトレース系数を足し,dnlevelは,下向きのリトレース系数を足し,最近バーK線における最低値である.これは価格チャネルの範囲を構成する.

ロングポジションを開くとき,ストップ・ロスはチャネルの上部レールで設定され,ショートポジションを開くとき,ストップ・ロスはチャネルの下部レールで設定される.これは価格逆転による損失のリスクを効果的に制御する.

逆転信号が表示されると,戦略はすぐに新しい価格傾向を追跡するためにオープンポジションを逆転します.これは逆転を追跡する原理です.

利点

  • この戦略は,動平均を最大限に活用して,トレンドを追跡し,価格の動きを迅速に把握します.
  • 価格チャネルとリバース・オープニング・ポジションを適用して リスクをコントロールし 利益を効果的に確保します
  • 戦略の論理は シンプルで明快で 分かりやすく実行できます
  • トレンド判断長さ,リトラセインメント係数など,カスタマイズ可能なパラメータは,異なる製品に適応します.
  • 同じ方向のピラミッドを サポートし,トレンドの機会を完全に把握します

リスク

  • 価格調整の際に誤った信号を受けやすい.
  • トレンドの逆転は常にストップロスを引き起こすわけではありません. 最大損失は制御できません.
  • パラメータの設定が正しくない場合,過度に敏感または反応が遅くなる可能性があります.
  • 最良の結果を得るためには,適切な製品と時間枠を選択する必要があります.

改善:

  1. 誤った信号を他の指標でフィルタリングする.
  2. 移動ストップロスを追加して利益をロックし,最大引き上げを制限します.
  3. 異なる製品とサイクルのためのパラメータをテストし最適化します.

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

さらに最適化できる余地があります.

  1. MACD,KDなど,いくつかの無効な信号をフィルタリングするために他の指標を導入することができます.

  2. リスクをさらに制御するために,移動ストップ損失,バランスストップ損失など,適応的なストップ損失ロジックを追加することができます.

  3. 戦略パフォーマンスに対する異なるパラメータの影響をテストし,MAサイクル長さ,リトラセイメント係数の大きさなどパラメータの組み合わせを最適化します.

  4. この戦略は現在,タイムセッションで取引されています.また,一日中取引に調整することもできます.これは追加のフィルタリングルールを必要とする可能性があります.

結論

概要すると,これは価格チャネルと移動平均を組み合わせたトレンド逆転取引戦略である.トレンドとタイムリーな逆開ポジションを追跡することで,価格の動きを効果的に追跡することができる.同時に,価格チャネルと逆開のリスク管理措置は,単一の損失を効果的に制御することも可能である.戦略のアイデアはシンプルで明確であり,ライブ取引でさらなるテストと最適化に値する.


/*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()

もっと