サニー・スーパートレンド戦略

作者: リン・ハーンチャオチャン開催日:2023年12月13日 14:40:24
タグ:

img

概要

サニー・スーパートレンド戦略は,ATRとスーパートレンド指標に基づいたトレンドフォロー戦略である.トレンド逆転を正確に予測し,タイミング指標として完璧に機能する.この戦略は忍耐力を高め,トレーダーが適切なタイミングで市場に参入して退場するのを助けることができる.

戦略の論理

この戦略は,現在のトレンド方向を決定するためにスーパートレンドインジケーターを使用する.スーパートレンドインジケーターが方向を変更すると,トレンド逆転が起こる可能性があると考えられる.さらに,戦略は,補助判断のためにキャンドルスタイクボディの方向も使用する.潜在的な逆転信号が現れ,キャンドルスタイクボディの方向が前のものと一致すると,無効な信号はフィルタリングされる.

具体的には,この戦略は,次の論理に従って取引信号を生成します.

  1. 主なトレンド方向を決定するためにスーパートレンド指標を使用します
  2. スーパートレンド指標の方向が変化すると,潜在的な逆転信号が生成されます.
  3. この時点で,逆転信号はフィルタリングされています.
  4. ろうそくのボディの方向が変化すると,逆転信号が確認され,取引信号が生成されます.

利点分析

  1. スーパートレンド指標をベースに,トレンド逆転点を正確に決定することができます.
  2. シグナル品質を改善するためにキャンドルスタイクボディの方向を組み合わせることで,無効な信号をフィルタリング
  3. 投資家が合理的な入入出時間を選択するためのタイミング指標として適しています
  4. 幅広い時間枠と異なる品種に広く適用され,高度な適応力があります

リスク と 解決策

  1. スーパートレンドインジケーターは過多な信号を生成し,フィルタリングする必要があります. 解決策: この戦略は,有効な信号をフィルターアウトするために補助判断のためのキャンドルスタイクボディ方向を使用

  2. スーパートレンドパラメータは過度に最適化されやすい
    解決法: デフォルトパラメータを使用して手動の調整や過度に最適化を避ける

  3. 超高速トレンド逆転を処理できない 解決法: 市場変動の速さに対応するために,ATR 期間パラメータを適切に調整する

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

  1. ATR 期間パラメータの異なる組み合わせを試す
  2. 信号をフィルターするのに役立つボリュームまたは変動指標を追加します
  3. 戦略のパフォーマンスを向上させるために他のシステムと組み合わせる
  4. 単一の損失を制御するためのストップ損失メカニズムの開発

結論

サニー・スーパートレンド戦略は,スーパートレンド指標に基づく効率的なトレンド逆転戦略である.それは補助判断のためのキャンドルスタイクボディの方向性を組み合わせ,無効な信号を効果的にフィルタリングし,信号品質を改善することができる.この戦略は操作が簡単で,高度に適応性があり,複数の製品とタイムフレームで広く使用できる.パラメータを合理的に最適化し,ストップ損失メカニズムを増やすことで,戦略のパフォーマンスはさらに向上することができる.


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

//@version=5
strategy("Sunny Supertrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity)

atrPeriod = input(10, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)

[_, direction] = ta.supertrend(factor, atrPeriod)

shor= close > open and close[1] > open[1] and close[2] > open[2] 
lon = open > close and open[1] > close[1] and  open[2] > close[2]
tt= ta.change(direction) < 0
ss= ta.change(direction) > 0
long= tt
longexit = lon or ss
short= ss
shortexit = shor or tt

longPosMem = false
longexitPosMem = false
shortPosMem = false
shortexitPosMem = false

longPosMem := long ? true : short ? false : longPosMem[1]
longexitPosMem := longexit ? true : shortexit ? false : longexitPosMem[1]
shortPosMem := short ? true : long ? false : shortPosMem[1]
shortexitPosMem := shortexit ? true : longexit ? false : shortexitPosMem[1]

longy = long and not(longPosMem[1])
longexity = longexit and not(longexitPosMem[1])
shorty = short and not(shortPosMem[1])
shortexity = shortexit and not(shortexitPosMem[1])

//Use this to customize the look of the arrows to suit your needs.
plotshape(longy, location=location.abovebar, color=color.green, style=shape.arrowup, text="Buy")
plotshape(longexity, location=location.top, color=color.green, style=shape.xcross, text="Buy exit")
plotshape(shorty, location=location.belowbar, color=color.red, style=shape.arrowdown, text="Sell")
plotshape(shortexity, location=location.bottom, color=color.red, style=shape.xcross, text="Sell exit")


//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)
// STEP 1:
// Make input options that configure backtest date range
startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31)
startMonth = input.int(title="Start Month", 
     defval=1, minval=1, maxval=12)
startYear = input.int(title="Start Year",
     defval=2021, minval=1800, maxval=2100)

endDate = input.int(title="End Date",
     defval=1, minval=1, maxval=31)
endMonth = input.int(title="End Month",
     defval=2, minval=1, maxval=12)
endYear = input.int(title="End Year",
     defval=2021, minval=1800, maxval=2100)

// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange =  true



// STEP 3:
// Submit entry orders, but only when bar is inside date range
if (inDateRange and longy)
    strategy.entry("enter long",strategy.long,when= longy)
    strategy.close("long",when=longexity)


if (inDateRange and shorty)
    strategy.entry("enter short",strategy.short,when = shorty)
    strategy.close("short", when=shortexity)


もっと