超トレンド戦略を追跡する

作者: リン・ハーンチャオチャン開催日:2023年12月26日 15:58:55
タグ:

img

概要

これは,トラッキング効果を達成するために,主にスーパートレンド指標と異なるパラメータ設定を組み合わせ,リスク制御のためにフィルター指標を使用するトラッキングスーパートレンド戦略です.戦略の核心構想は,シンプルで実践的で,理解しやすいもので,初心者が学ぶのに適しています.

戦略原則

この戦略は主に異なるパラメータ設定を持つ3つのグループからなる.最初のグループは,市場動向の基本的な判断のためにデフォルトパラメータを使用する主要なスーパートレンド指標である.第2グループは,ATR期間を短縮し,ATR倍数を増やすことで価格変化のより敏感な追跡を達成する副スーパートレンド指標である.第3グループは,フィルタースーパートレンド指標で,誤ったブレイクをフィルターするために,ATR期間とATR倍数を適切に増加させる.

メインスーパートレンドが購入信号を発行すると,副スーパートレンドも同期信号を発行し,フィルタースーパートレンド方向が上向きである場合,ストラテジーは追跡購入を行う.メインスーパートレンドが販売信号を発行すると,副スーパートレンドも同期信号を発行し,フィルタースーパートレンド方向が下向きである場合,ストラテジーは追跡販売を行う.これは柔軟な副スーパートレンドインジケーターを使用して小規模な調整を追跡し,間に合うエントリーとストップ損失を達成するために,メイントレンドを捕捉することができます.

利点

  1. 戦略のアイデアは シンプルで明快で 分かりやすいし 初心者が学ぶのに適しています
  2. 戦略パラメータの設定は,市場を効果的に追跡し,リスクを制御するために合理的である
  3. 戦略信号はより正確で信頼性が高く,勝利率は高くなります.
  4. 追跡効果を達成するために異なるパラメータの組み合わせを組み合わせる
  5. フィルターメカニズムを追加することで,誤った信号を効果的にフィルタリングし,リスクを制御できます

リスク

  1. システム的なリスク
  2. スーパートレンドインジケーターは一部の市場で遅れている可能性があります.
  3. 誤ったATRパラメータ設定は信号偏差を引き起こす可能性があります.
  4. 取引量が不足しているため,損失を完全に削減することは困難です

主なリスク予防対策:

  1. 流動性が良し,変動が大きい株を選びます
  2. 遅延の可能性を減らすためにパラメータを合理的に最適化
  3. 信号の精度を向上させるパラメータテストと最適化
  4. 損失削減スペースを確保するために,取引量を適切に増加させる.

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

  1. 追跡効果を最適化するために ATR 期間の異なる組み合わせをテストする
  2. ATRを代替する他の変動指標を試す
  3. 効果をテストするためにスーパートレンドの組み合わせの数を増やしたり減らしたりする
  4. シグナルフィルタリング最適化のために他の指標と組み合わせる
  5. 最適な解決法を見つけるために,異なるストップ損失方法をテスト

概要

この戦略の全体的な考え方は明確でシンプルです.異なるパラメータ設定を持つ複数のグループのスーパートレンドインジケーターを調整することで,エントリー追跡とリスク管理を実現します. 戦略信号は,良いライブパフォーマンスによりより正確です. 初心者の学習に適しており,さまざまな指標やパラメータをテストし最適化するためのテンプレートとしても使用できます. これは推奨に値するスーパートレンド戦略です.


/*backtest
start: 2023-11-25 00:00:00
end: 2023-12-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Supertrend TEST 2 Strategy", overlay = true, format=format.price, precision=2)

Periods = input(title="ATR Period", type=input.integer, defval=4)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=4.7)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
tp=close
sl=close

atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? 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="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green )
plotshape(buySignal and showsignals ? up : na, title="Лонг", text="Лонг", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white )
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red )
plotshape(sellSignal and showsignals ? dn : na, title="Шорт", text="Шорт", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white )
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white

sPeriods=input(title="ATR Period", type=input.integer, defval=8)
sMultiplier=input(title="dop ATR Multiplier", type=input.float, step=0.1, defval=1.5)
satr2 = sma(tr, sPeriods)
satr= changeATR ? atr(sPeriods) : satr2
ssup=ohlc4-(sMultiplier*satr)
ssup1 = nz(ssup[1],ssup)
ssup := close[1] > ssup1 ? max(ssup,ssup1) : ssup
sdn=ohlc4+(sMultiplier*satr)
sdn1 = nz(sdn[1], sdn)
sdn := close[1] < sdn1 ? min(sdn, sdn1) : sdn
strend = 1
strend := nz(strend[1], strend)
strend := strend == -1 and close > sdn1 ? 1 : strend == 1 and close < ssup1 ? -1 : strend
sbuySignal = strend == 1 and strend[1] == -1
ssellSignal = strend == -1 and strend[1] == 1

fPeriods=input(title="ATR Period", type=input.integer, defval=10)
fMultiplier=input(title="filter ATR Multiplier", type=input.float, step=0.1, defval=5)
fatr2 = sma(tr, fPeriods)
fatr= changeATR ? atr(fPeriods) : fatr2
fup=ohlc4-(fMultiplier*fatr)
fup1 = nz(fup[1],fup)
fup := close[1] > fup1 ? max(fup,fup1) : fup
fdn=ohlc4+(fMultiplier*fatr)
fdn1 = nz(fdn[1], fdn)
fdn := close[1] < fdn1 ? min(fdn, fdn1) : fdn
ftrend = 1
ftrend := nz(ftrend[1], ftrend)
ftrend := ftrend == -1 and close > fdn1 ? 1 : ftrend == 1 and close < fup1 ? -1 : ftrend
fbuySignal = ftrend == 1 and ftrend[1] == -1
fsellSignal = ftrend == -1 and ftrend[1] == 1
tcolor=color.new(color.gray,50)
fdnPlot = plot(ftrend == 1 ? na : fdn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=tcolor)
fupPlot = plot(ftrend == 1 ? fup : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=tcolor)



if (strategy.position_size > 0)
	tp:=tp[1]
	sl:=up
	strategy.exit("Long_TP/SL","Long",limit=tp, stop=sl)
	
if (strategy.position_size < 0)
	tp:=tp[1]
	sl:=dn
	strategy.exit("Short_TP/SL","Short",limit=tp, stop=sl)



if ((buySignal and  ftrend==1) or (sbuySignal and trend==1 and  ftrend==1)) 
	tp:=close+(close-up)*0.382
    strategy.entry("Long", strategy.long,  limit=tp, comment=tostring(round(tp)))
if ((sellSignal and ftrend==-1) or (ssellSignal and trend==-1 and  ftrend==-1)) 
	tp:=close-(dn-close)*0.382
    strategy.entry("Short", strategy.short, limit=tp, comment=tostring(round(tp)))


もっと