
この戦略は,平均真の波動範囲 (Average True Range,ATR) の指標に基づいて構築された超トレンドラインであり,市場のトレンド方向を判断し,取引信号を与えるトレンド追跡戦略である.この戦略は,トレンド判断とトレンド追跡の双重機能を持ち,株式指数期貨,外貨,デジタル通貨などの分野で使用できます.
この戦略は,一定の周期内のATR指標を計算し,それを価格と比較して,価格が上昇傾向の通路内にあるかどうかを判断する.具体的には,戦略は,まずATR指標を計算し,ATR値を係数で乗算して,上軌道と下軌道を構成する.価格が上軌道より高いときは,上昇傾向として判断する.価格が下軌道より低いときは,下行傾向として判断する.上昇傾向では,価格が下向きから上向きに転向し,買い信号を生じ,下向きでは,価格が上向きから下向きに転向し,売り信号を生じます.
この戦略の鍵は,トレンド判断基準である超トレンドラインを構築することです.超トレンドラインはATR指標の動態の変化に基づいて,市場騒音を効果的にフィルターし,主要なトレンド方向を判断できます.また,超トレンドラインには一定の遅滞性があります.これは,トレンドの転換点を確認し,間違った取引信号を生じないようにするのに役立ちます.
この戦略の最大の利点は,トレンド判断とトレンド追跡を組み合わせる能力にあります.具体的には,主な利点は以下の通りです.
この戦略には以下のリスクがあります.
対策方面では,ATR周期,超トレンドライン係数などのパラメータを調整することで最適化することができる.また,他の指標と組み合わせて検証することも可能で,誤信号の確率を下げることができる.さらに,ストップ・ロスを設定し,単一損失を制御することができる.
この戦略はさらに改善できる余地があります.
ディープ・オプティマイゼーションにより,戦略の安定性,適応性,収益の余地がさらに向上する見込みです.
この戦略は,全体的に安定,信頼性,収益性の高い特徴を有している。 トレンドラインを超えて主要なトレンドを判断し,取引信号を出すことは戦略の最大の亮点である。 しかし,一定程度の遅滞性および誤判のリスクも存在する。 参数およびモデル最適化により,より良い戦略のパフォーマンスを得る見通しがある。 全体として,この戦略は,トレンドをベースにした典型的な代表であり,実用的な検証と適用に値する。
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Supertrend Strategy", overlay = true)
Periods = input(10, title="ATR Period")
src = input(hl2, title="Source")
Multiplier = input(3.0, title="ATR Multiplier", step=0.1)
changeATR = input(true, title="Change ATR Calculation Method?")
showsignals = input(true, title="Show Buy/Sell Signals?")
highlighting = input(true, title="Highlighter On/Off?")
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, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
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, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
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
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)
strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")