マルチタイムフレームスーパートレンドフォロー戦略


作成日: 2024-01-15 11:35:47 最終変更日: 2024-01-15 11:35:47
コピー: 0 クリック数: 556
1
フォロー
1617
フォロワー

マルチタイムフレームスーパートレンドフォロー戦略

概要

この策略は,ATR指標を使用して,多時間枠の動的トレンドチャネルを構築し,トレンド追跡を実現する策略である.この策略は,価格がチャネルを突破するときにシグナルを生成し,チャネルを継続的に調整することにより,より大きなトレンドを捕捉する.

戦略原則

戦略はATR指数を使用して上方トレンドチャネルと下方トレンドチャネルを構築する.具体的には,上方チャネルラインは,ATR指数のN倍を差し引いたクローズアップ価格であり,下方チャネルラインは,ATR指数のN倍を加えたクローズアップ価格である.Nの値はパラメータで調整できます.

価格が上昇チャネルを突破すると,買取シグナルを生じ,価格が下降チャネルを突破すると,売り出しシグナルを生じます.チャネルは最新の価格動向に応じて調整され,トレンド追跡が可能になります.

さらに,戦略は,現在の上昇傾向または下降傾向にあるかどうかを判断するためのトレンド変数を定義します.トレンド変数は,通路線と組み合わせて使用され,誤った信号を発生させないようにします.

戦略的優位性

  • ダイナミックチャネルを利用してトレンドを追跡し,
  • 市場が逆転するリスクを減らすために,高低のトレードオフを避ける
  • 通路のパラメータは調整可能で,適応性がある.
  • 複数の時間枠の設定の柔軟性

戦略リスク

  • 追跡が激しくなり,損失のリスクが増える
  • チャンネルパラメータが正しく設定されず,信号が少ないか,誤信号が多い
  • パラメータを調整するには,強力なプログラミング能力が必要です.

改善方法:

  • ATRの倍数を適切に縮小し,追跡幅を減らす
  • パラメータを最適化して,最適なパラメータの組み合わせを見つける
  • 単一損失を減らすために ストップ・ロスを増やす

戦略最適化の方向性

  • 信号の信頼性を高めるために,他の指標のフィルターを追加します.
  • リスクの軽減のための止損策の強化
  • パラメータを最適化して,最適なパラメータを見つけます.
  • 入場・退場時間を最適化し,収益率を上げる

要約する

この戦略は全体的に良いトレンド追跡戦略である。動的に調整し,順位を順調に,高殺低を追求することを避ける。パラメータの最適化と適切な改善によって,戦略の優位性をさらに強化し,リスクを軽減して,よりよい効果を得ることができる。

ストラテジーソースコード
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '买入')
shortCondition = sellSignal
if shortCondition and window()
    strategy.close('BUY',comment = '卖出')
buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na