パラボリック SAR トレンド追跡ストップ損失逆転戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-01 14:54:09
タグ:

img

概要

パラボリックSARトレンドトラッキングストップ損失逆転戦略 (Parabolic SAR Trend Tracking Stop Loss Reversal Strategy) は,トレンドを特定し,トレンドが逆転するときに反トレンドポジションを入力するためにパラボリックSAR指標を使用する戦略である.この戦略には,リスク制御のためのストップ損失と収益メカニズムも含まれている.

戦略の論理

この戦略は,現在の市場動向を判断するためにパラボリックSAR指標を使用している.パラボリックSARは"パラボリックストップと逆転"を意味する.その指標線は価格チャート上のパラボラの連続を形成し,これらのパラボラのポイントは潜在的な逆転点を表している.

SAR ポイントが価格を下回り,価格を下回ると上昇傾向を示し,SAR ポイントが上昇して価格を下回ると下落傾向を示します.この戦略は,SAR ポイントの位置に基づいて現在のトレンド方向を判断します.

具体的には,SARポイントが上昇傾向を示し,価格を超えると,戦略はショートになります.SARポイントが下落傾向を示し,価格を下回ると,戦略はロングになります.つまり,SARポイントがトレンド逆転を示したとき,反トレンドポジションに入ります.

また,ストップ・ロストとテイク・プロフィートのメカニズムも設定する.ロングに行くとき,損失を制限するためにストップ・ロスト価格を設定する.同時に,特定の目標利益に達した後,ポジションを閉鎖するためにテイク・プロフィートの価格を設定する.ショートに行くことは類似している.

利点分析

トレンドインジケーターとストップ・ロスト/テイク・プロフィートメカニズムを組み合わせることで得られる主な利点は以下の通りである.

  1. 逆トレンド取引の機会を適時に把握する.
  2. リスクと利益を積極的にコントロールする ストップ・ロストと 利益の引き上げを設定する
  3. パラボリックSARは広く使用され,有効な逆向指標です.
  4. シンプルで明快な戦略ルールで 分かりやすく実行できます

リスク分析

この戦略にはいくつかのリスクも考慮すべきです.

  1. パラボリックSARインジケーターは完璧ではありません 時には間違った信号を生成します
  2. ストップ・ロスの価格と得益の価格を合理的に設定する必要がある.そうでなければ,早めにストップ・アウトしたり得益を上げたりする可能性があります.
  3. 取引手数料も 総利益に影響します
  4. 逆転後の新しい傾向は 短期的かもしれません

これらのリスクは,パラメータの最適化,他のフィルター指標の使用などによって解決できます.

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

戦略は以下の側面で最適化できます.

  1. パラボリック SAR パラメータを最適化して 最適な組み合わせを見つけます
  2. ストップ・ロスを後押しするような 利益戦略を採用してください
  3. 逆取引シグナルをフィルタリングするために指標や条件を追加します.
  4. 市場状況に基づいて位置制御を追加します.
  5. 異なる取引手段のパラメータを調整する.

結論

一般的には,これはかなり古典的なトレンドトラッキングストップ損失逆転戦略である.トレンド逆転を特定し,ストップ損失と収益手段でリスクを制御する.最適化後,ライブ取引のための価値のある戦略になり得る.


/*backtest
start: 2024-01-24 00:00:00
end: 2024-01-31 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Parabolic SAR Strategy", overlay=true)
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)
	if barstate.isconfirmed
		if uptrend
			strategy.entry("ParSE", strategy.short, stop=nextBarSAR, comment="ParSE")
			strategy.cancel("ParLE")
		else
			strategy.entry("ParLE", strategy.long, stop=nextBarSAR, comment="ParLE")
			strategy.cancel("ParSE")
plot(SAR, style=plot.style_cross, linewidth=3, color=color.orange)
plot(nextBarSAR, style=plot.style_cross, linewidth=3, color=color.aqua)
//Stop Loss Inputs
use_short_stop_loss = input(false, title="Short Stop Loss", group="Stop Loss and Take Profit", inline="Short_SL")
short_stop_loss = input(title="(%)", type=input.float, minval=0.0, step=0.1, 
     defval=5, group="Stop Loss and Take Profit", inline="Short_SL") * 0.01
use_long_stop_loss = input(false, title="Long Stop Loss", group="Stop Loss and Take Profit", inline="Long_SL")
long_stop_loss = input(title="(%)", type=input.float, minval=0.0, step=0.1, 
     defval=5, group="Stop Loss and Take Profit", inline="Long_SL") * 0.01

//Take Profit Inputs     
use_short_take_profit = input(false, title="Short Take Profit", group="Stop Loss and Take Profit", inline="Short_TP")
short_take_profit = input(title="(%)", type=input.float, minval=0.0, step=0.1,
     defval = 20, group="Stop Loss and Take Profit", inline="Short_TP") * .01
use_long_take_profit = input(false, title="Long Take Profit", group="Stop Loss and Take Profit", inline="Long_TP")
long_take_profit = input(title="(%)", type=input.float, minval=0.0, step=0.1,
     defval = 20, group="Stop Loss and Take Profit", inline="Long_TP") * .01


longStopPrice  = strategy.position_avg_price * (1 - long_stop_loss)
shortStopPrice = strategy.position_avg_price * (1 + short_stop_loss)
longLimitPrice = strategy.position_avg_price * (1 + long_take_profit)
shortLimitPrice = strategy.position_avg_price * (1 - short_take_profit)


if (strategy.position_size > 0.0)
    if (use_long_stop_loss and not use_long_take_profit)
        strategy.exit("Long", stop = longStopPrice)
    if (use_long_take_profit and not use_long_stop_loss)
        strategy.exit("Long", limit = longLimitPrice)
    if (use_long_take_profit and use_long_stop_loss)
        strategy.exit("Long", stop = longStopPrice, limit=longLimitPrice)
if (strategy.position_size < 0.0)
    if (use_short_stop_loss and not use_short_take_profit)
        strategy.exit("Short", stop = shortStopPrice)
    if (use_short_take_profit and not use_short_stop_loss)
        strategy.exit("Short", limit = shortLimitPrice)
    if (use_short_take_profit and use_short_stop_loss)
        strategy.exit("Short", stop = shortStopPrice, limit = shortLimitPrice)

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

もっと