スーパートレンドに基づく長期取引戦略


作成日: 2023-09-20 17:14:33 最終変更日: 2023-09-20 17:14:33
コピー: 0 クリック数: 770
1
フォロー
1617
フォロワー

概要

この戦略は,スーパートレンド指数を使用して長線入場機会を識別する.これは,平均真範囲ATRと倍数を使用して動的なサポート位置を決定し,長ポジション入場を行う.この戦略は,長ポジションの取引機会に焦点を当てている.

戦略原則

  1. ATR周期と倍数による上軌道と下軌道の計算. 上軌を突破すると上昇,下軌を突破すると下落.

  2. 現在のトレンドを計算する. 1は看板,-1は下落を表す. 価格が上線を突破すると,トレンドは下向きに転がり,買入シグナルを誘発する. 下線を突破すると,トレンドは下向きに転がり,売り出せシグナルを誘発する.

  3. 移動平均をトレンドフィルターとして組み合わせて,上線を突破するとMAより高い価格を要求して購入し,下線を突破するとMAより低い価格を要求して販売し,偽の突破を避ける.

  4. アシスタントがトレンドや取引シグナルなどを視覚的に表示し,判断を補助する.

優位分析

この戦略の利点は以下の通りです.

  1. SuperTrendの指数は,価格の変化を動的に追跡し,トレンドの転換をタイムリーに反映します.

  2. ATRのストップは,市場の変動に応じてストップポジットを調整して,利益をロックするのに有利である.

  3. 偽の突破を排除するMAと組み合わせると,波動市場の騒音取引信号を効果的にフィルタリングできます.

  4. ビジュアルデザインは,取引戦略と市場の状況を直観的に表示し,操作が簡単である.

  5. 長期に適したトレンドターニングポイントのみの取引です.

リスク分析

この戦略には以下のリスクがあります.

  1. SuperTrend指標はパラメータに敏感で,多空線調整が頻繁で,頻繁に取引が起こる可能性がある.

  2. ストップダメージラインは,地震の時に頻繁に起動します.

  3. 取引コストを考慮しない場合,小額の資金は取引費用に大きく影響されます.

  4. ストップ・ロスが設定されていない場合,撤回のリスクは高くなります.

  5. 予想外ですが,このトレンドウィークは,いくつかの機会を逃しているかもしれません.

リスクは以下の方法で軽減できます.

  1. ATRパラメータを最適化して,多線路調節頻度を低下させる.

  2. 高周波の小波動による停止を避けるため,等価K線フィルタを追加する.

  3. ストップ・ローズ・ストップ・パッチを設定し,利益を守ります.

  4. 移動平均周期を適切に調整して,フィルタリング効果をバランスさせる.

  5. 資金管理を最適化し,取引コストの影響を軽減します.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 試算は,価格の異なる源,例えば,閉店価格,最高価格,などで実施されます.

  2. Chandelier Exitのような他の動的止損指標を試してみてください.

  3. ポジション管理モジュールを追加し,資金使用効率を最適化します.

  4. 波動率指標を組み合わせて refining 入場タイミング

  5. ストップ・ストップ・モジュールを追加し,リスクを制御する.

  6. 異なる市場に対応するパラメータの調整

  7. 機械学習アルゴリズムのパラメータ最適化を探求する.

  8. フィルタリングの精度を向上させるための他の指標と組み合わせる.

要約する

この戦略は,スーパートレンドを動的ストップ・ローズ判断のトレンドに統合し,MAを補助してトレンドフィルタリングを行い,長線を購入するタイミングを識別する. 視覚的な設計は操作を簡素化する. パーメータ設定と機能拡張を最適化することで,安定した信頼できる長線取引戦略になる.

ストラテジーソースコード
/*backtest
start: 2020-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SuperTrend Long Strategy", overlay=true, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)

Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)

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

// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)

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 and close > ma
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 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 and close < ma
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0))

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 70) : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 70) : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(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)
    strategy.entry("BUY", strategy.long, when = window())

shortCondition = sellSignal
if (shortCondition)
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short, when = window())

buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)