トレンドフォロー反転戦略


作成日: 2024-01-03 16:34:28 最終変更日: 2024-01-03 16:34:28
コピー: 0 クリック数: 653
1
フォロー
1621
フォロワー

トレンドフォロー反転戦略

概要

トレンド追跡反転戦略は,移動平均と価格の極値に基づくトレンド取引戦略である.この戦略は,価格のトレンドを追跡する2つの移動平均を使用し,トレンドが反転したときに反転ポジションを開きます.同時に,最近の数K線の最高価格と最低価格に基づいて価格チャネルを計算し,価格がチャネル境界に近づくとストップロスを設定し,リスクをさらに制御します.

戦略原則

この策略は,3の長さの高点と低点の移動平均であるhmaとlmaを使用して価格の動向を追跡する. 価格がhmaを突破すると,看板として解釈し,価格がlmaを突破すると,看板として解釈する.

この戦略はまた,最近のbars根K線内の最高価格と最低価格に基づいて価格チャネルを計算します. uplevelとdnlevel。uplevelは,最近のbars根K線内の最高価格に基づいて下への回調係数corrを追加します;dnlevelは,最近のbars根K線内の最低価格に基づいて下への回調係数corr減算します。これは,価格のチャネル範囲を構成します。

多項開くときは,ストップ価格が通路上線;空券開く時は,ストップ価格が通路下線.これは,価格逆転による損失リスクを効果的に制御することができる.

逆転のシグナルが現れたとき,この戦略はすぐに逆転し,新しい価格トレンドを追跡する.これは逆転の原則を追跡する.

戦略的優位性

  • この戦略は,移動平均のトレンド追跡の優位性を活用し,価格の動きを素早く捉える.
  • 価格チャネルと逆転開設は,リスクをコントロールし,利益を効果的に固定する.
  • 戦略の論理はシンプルで明快で,理解し,実行しやすい.
  • トレンド判定長さ,回帰係数などのカスタマイズ可能なパラメータは,異なる品種に適応します.
  • 市場が成長し,市場が成長し,市場が成長する.

戦略リスク

  • 価格の変動は誤ったシグナルを誘発しやすい.
  • 市場が上昇し,市場が上昇し,市場が成長し,市場が成長し,市場が成長し,市場が成長する.
  • パラメータを正しく設定しない場合,過敏または鈍感になる可能性があります.
  • 適切な品種と時期を選ばれば効果が上がります

改善方法:

  1. 他の指標と組み合わせたフィルタリングは無効信号です.
  2. 利潤を固定するために移動式ストップを増やし,最大撤退を縮小します.
  3. 異なる品種と周期に対してパラメータテストと最適化を行う.

戦略最適化の方向性

この戦略はさらに改善できる余地があります.

  1. 他の指標の組み合わせを導入することができ, filtrate は some の無効信号を落とす。例えば 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()