多期超トレンド追跡戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-15 11時35分47秒
タグ:

img

概要

この戦略は,ATRインジケーターを使用して,トレンドを追跡するための多時間フレームダイナミックトレンドチャネルを構築する.価格がチャネルを突破すると,チャネルを継続的に調整してより大きなトレンドを捉えるために信号を生成する.

戦略の論理

戦略は,アップトレンドチャネルとダウントレンドチャネルを構築するためにATRインジケーターを使用する.特に,アップトレンドチャネルラインは,ATRインジケーターのN倍マイナス閉じる価格;ダウントレンドチャネルラインは,閉じる価格プラスN倍ATRインジケーターである.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



もっと