パラボリック SAR トレンド トラッキング 戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-18 12:21:17
タグ:

img

概要

この戦略は,シグナル精度を向上させるためにEMAフィルタリングと組み合わせたパラボリックSAR (ストップとリバース) インジケーターを使用しています.トレンドと取引するトレーダーに適しています.

戦略の論理

SARが価格を下回り,価格がスローEMAプラスオフセットの上回りすると,ロング信号が起動する.SARが価格の上回り,価格がスローEMAマイナスオフセット下回りすると,ショート信号が起動する.高速EMAと遅いEMAのクロスオーバーは追加のフィルタリングを提供します.これはSAR単独を使用するときに偽信号を回避します.

具体的には,長期入国条件は次のとおりです.

  1. SARは前回の閉店より低く,現在の閉店より高くなります.
  2. 現在の閉じる値は,スロー・EMA+オフセット以上,またはスロー・EMAを下回る高速・EMAを横切る.
  3. 現在の閉店はSAR値以上で EMAは遅い

短期入場条件は次のとおりです

  1. SARは前回の閉店よりも高く,現在の閉店より低く,
  2. 現在の閉じる値は,スロー・EMAマイナスオフセットまたはスロー・EMAを横断するスロー・EMA以下です.
  3. 現在の閉じる値は SAR 値以下で EMA 遅いマイナスオフセットです

利点分析

この戦略は,SARとEMAのフィルタリングを組み合わせることで,トレンド方向をよく特定し,誤った信号を減らすことができます.

利点は以下の通りです

  1. SARは価格変化に迅速に対応し,トレンド逆転点を特定することができます.
  2. EMAフィルタリングは,トレンドの方向性をさらに確認し,SARのみを使用すると誤った信号を回避します.
  3. 速いEMAと遅いEMAのクロスオーバーにより信号の精度が向上する.
  4. パラメータの最適化によって収益性が向上できる.

リスク分析

この戦略にはいくつかのリスクがあります:

  1. SAR と EMA は,レンジ・バインド市場において誤った信号を生成し,収益性に影響を与える可能性があります. これはパラメータ最適化によって軽減できます.
  2. EMAは遅延効果があり,トレンドが逆転するときに最高のエントリーポイントを見逃す可能性があります. EMA期間を短縮することで遅延効果を軽減することができます.
  3. ストップ・ロスは高波動期に簡単にヒットし,より高い損失を引き起こす可能性があります.ストップ・ロスの範囲は適切に拡大することができます.

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

この戦略は,次の側面から最適化できます.

  1. SAR パラメーターを最適化します ステップや最大で より敏感になります
  2. 最適な組み合わせを見つけるために ゆっくりと速い EMA 期間を最適化します
  3. EMAのオフセットを最適化して 偽信号を減らす
  4. MACDやKDJなどの他の指標を追加して追加フィルタリングと精度を提供します.
  5. ストップ・ロスの戦略を最適化して トレード毎の損失を減らす.

結論

この戦略は,SARとEMAの強みを組み合わせて柔軟なトレンドフォローシステムを作成する.全体的に見ると,トレンド検出能力が良好で,トレンドを追跡するのにうまく機能する.パラメータ最適化とリスク管理のさらなる強化により安定性と収益性が向上する.良質なリスク管理意識と最適化スキルを備えた投資家に適している.


/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("SAR Trend Trader Strategy By: jhanson107", shorttitle="SAR Trend Trader Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


SlowEMALength = input(100, "Slow EMA Length")
FastEMALength = input(10, "Fast EMA Length")
emaoffset = input(1.00, "EMA Offset %")
start = input(0.01)
increment = input(0.005)
maximum = input(0.08)

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

psar = sar(start, increment, maximum)
ema = ema(close, SlowEMALength)
fastema = ema(close, FastEMALength)
offset = (emaoffset / 100) * ema

// Signals
long = high[1] < psar[2] and high >= psar[1] and close > ema + offset or crossunder(ema, fastema) and close > psar and close > ema + offset
short = low[1] > psar[2] and low <= psar[1] and close < ema - offset or crossover(ema, fastema) and close < psar and close < ema - offset

// Plot PSAR
plot(psar, title="PSAR", color = low < psar and not long ? green : red, trackprice=true)

//Barcolor
barcolor(close > psar and close > ema + offset and fastema > ema ? green : na)
barcolor(close > psar and close < ema + offset or close > psar and fastema < ema ? white : na)
barcolor(close < psar and close < ema - offset and fastema < ema and close? red : na)
barcolor(close < psar and close > ema - offset or close < psar and fastema > ema ? white : na)

//Plot EMA
plot(ema, color=blue, linewidth=1, transp=0, title="Slow EMA")
plot(fastema, color=purple, linewidth=1, transp=0, title="Fast EMA")


if(high > psar)
    strategy.close("Short")
    
if(low < psar)
    strategy.close("Long")
    
if(long and time_cond)
    strategy.entry("Long", strategy.long, comment="Long")
   
if(short and time_cond)
    strategy.entry("Short", strategy.short, comment="Short")

if (not time_cond)
    strategy.close_all()

もっと