パラボリック SAR ダイナミック ブレイク トリプル SMMA 戦略

作者: リン・ハーンチャオチャン開催日:2023年11月08日 11:53:09
タグ:

img

概要

これは,パラボリックSAR指標と3つのSMMAラインを異なる期間で組み合わせたブレークアウト取引戦略である.すべての3つのSMMAラインが上昇しているときに長くなって,すべてが落ちているときに短くなって,SAR指標を使用してトレンド方向を決定し,SARが方向を転換するときに反トレンドエントリを取ります.この戦略にはストップ損失と利益を取ることも含まれます.

戦略の論理

戦略は以下の主要なポイントに基づいています.

  1. パラボリック SAR インディケーターを使用して,現在のトレンド方向を決定します.SARは価格の変化を動的に追跡し,上昇傾向と下落傾向を特定することができます.

  2. 3つのSMMA線を異なる期間で設定する (高速線21,中間線50,遅い線200). 3つの線が上昇しているとき,上昇傾向を示します.すべての線が下落しているとき,下落傾向を示します.

  3. 3つのSMMA線が上昇している間,SARがダウンするときに長くなっています.

  4. 3つのSMMA線が落ちている間に SARが反転すると短縮します

  5. SAR をベースにしたストップ・ロスを組み込み,入場価格の一定の割合で利益を得ます.

具体的には,戦略は,まず,現在のバーの方向をSARが転覆するかどうかをチェックします.SMMAが上昇している間にSARが上から下へと転移した場合,それは長くなります.SMMAが落ちている間にSARが下から上へと転移した場合,それは短くなります.

入場後,ストップロスは次のバーのSAR価格で設定され,SARをダイナミックトレーリングストップロスとして使用する. 利益を取ることは入場価格の10%に設定される. 価格が利益を取るかストップロスのレベルに達すると,ポジションは閉鎖される.

利点分析

この戦略は,トレンドフォローインジケーターと複数のタイムフレーム移動平均の利点を組み合わせ,SMMAで誤ったブレイクをフィルタリングしながら,トレンド逆転のタイミングでエントリを可能にします.主な利点は以下の通りです.

  1. SARはトレンドの変化を迅速に検知し 逆転の機会を把握できます

  2. 三重SMMAは,市場の騒音を効果的にフィルタリングし,誤った断断を回避します.

  3. SMMAを使用すると,より滑らかな曲線とMAのウィップソーからの干渉が少なくなります.

  4. ストップ・ロストとテイク・プロフィートを組み込むことは,単一の取引損失を制御し,部分的な利益をロックするのに役立ちます.

  5. 柔軟なパラメータ設定により,異なる市場向けに最適化できます.

リスク分析

考慮すべきリスクもいくつかあります.

  1. SARは変動傾向の際に頻繁に転機し,過剰な取引によるコストを増加させることがあります

  2. SMMA設定はすべての楽器にうまく適合しない可能性があり,個々の最適化が必要である.

  3. SARのストップ損失には時間遅れがあり 損失を増加させる可能性があります

  4. 安定したトレンドでは誤ったブレイクが起こります.SARパラメータを平滑化することで助けられます.

  5. SMMA の設定が不十分である場合,見落とした傾向や悪い信号を引き起こす可能性があります.注意深く検査する必要があります.

リスクに対処するために,最適化は以下に焦点を当てることができます.

  1. SARパラメータを 変動性に基づいて調整して 転機を減らす

  2. 計器の特徴に合わせて SMMA 期間を調整する.

  3. ストップ・ロスの改善,例えば,遅延またはリミット・オーダー.

  4. アクティブ・トレードでストップ・ロスの制限オーダーを使用する.

  5. パラメータのテストと調整を 徹底した

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

上記の分析に基づいて,最適化は以下を含むことができる:

  1. SARパラメータを最適化して 曲線を滑らかにし 転がりも少なくする

  2. SMMAの長さを取引手段に合わせて調整する

  3. 動的ストップ・ロスを利用する ストップ・トレイルや制限オーダー

  4. 高周波取引におけるストップ・ロスの制限オーダーを使用する.

  5. 信号の質を改善するために RSI,KDなどのフィルターを追加します

  6. 入り口条件を改善し,例えばSAR投射でキャンドルのパターンをチェックする.

  7. ストップ・ロスのトリガー後に再入場条件を追加する.

  8. 増幅して利益を得て 後ろに下がり 部分的な接近 驚異的なレベル

  9. バックテスト結果と感度分析に基づくパラメータ調整

概要

ストップ・ロストとテイク・プロフィートの利用は,リスクを制御し,利益をロックするのに役立ちます.パラメータ設定,エントリー/エグジットルール,偽ブレイクに対する強度に関するさらなる最適化により,さまざまな取引機器の戦略パフォーマンスを向上させることができます.


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

//@version=5
strategy(title="SAR + 3SMMA with SL & TP", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD, commission_type= strategy.commission.percent, commission_value=0.03)
start = input.float(0.02, step=0.01, group="SAR")
increment = input.float(0.02, step=0.01, group="SAR")
maximum = input.float(0.2, step=0.01, group="SAR")

//Take Profit Inputs     
take_profit = input.float(title="Take Profit (%)", minval=0.0, step=0.1, defval = 0.1, group="Stop Loss and Take Profit", inline="TP") * 0.01

//Stop Loss Inputs
stop_loss = input.float(title="StopLoss (%)", minval=0.0, step=0.1, defval=1, group="Stop Loss and Take Profit", inline="SL") * 0.01

// Smooth Moving Average
fastSmmaLen = input.int(21, minval=1, title="Fast Length", group = "Smooth Moving Average")
midSmmaLen = input.int(50, minval=1, title="Mid Length", group = "Smooth Moving Average")
slowSmmaLen = input.int(200, minval=1, title="Slow Length", group = "Smooth Moving Average")

src = input(close, title="Source", group = "Smooth Moving Average")

smma(ma, src, len) => 
    smma = 0.0
    smma := na(smma[1]) ? ma : (smma[1] * (len - 1) + src) / len
    smma

fastSma = ta.sma(src, fastSmmaLen)
midSma = ta.sma(src, midSmmaLen)
slowSma = ta.sma(src, slowSmmaLen)

fastSmma = smma(fastSma, src, fastSmmaLen)
midSmma = smma(midSma, src, midSmmaLen)
slowSmma = smma(slowSma, src, slowSmmaLen)

isSmmaUpward = ta.rising(fastSmma, 1) and ta.rising(midSmma, 1) and ta.rising(slowSmma, 1)

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 := math.max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := math.min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := math.min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := math.min(AF + increment, maximum)
	if uptrend
		SAR := math.min(SAR, low[1])
		if bar_index > 1
			SAR := math.min(SAR, low[2])
	else
		SAR := math.max(SAR, high[1])
		if bar_index > 1
			SAR := math.max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

sarIsUpTrend = uptrend ? true : false

sarFlippedDown = sarIsUpTrend and not sarIsUpTrend[1] ? true : false
sarFlippedUp = not sarIsUpTrend and sarIsUpTrend[1] ? true : false


longEntryCondition = isSmmaUpward and sarFlippedDown
shortEntryCondition = not isSmmaUpward and sarFlippedUp

if(longEntryCondition)
    strategy.entry("L", strategy.long, stop=nextBarSAR, comment="L")

if(shortEntryCondition)
    strategy.entry("S", strategy.short, stop=nextBarSAR, comment="S")


strategy.exit("CL", when=strategy.position_size > 0, limit=strategy.position_avg_price * (1+take_profit), stop=strategy.position_avg_price*(1-stop_loss))
strategy.exit("CS", when=strategy.position_size < 0, limit=strategy.position_avg_price * (1-take_profit), stop=strategy.position_avg_price*(1+stop_loss))


plot(SAR, style=plot.style_cross, linewidth=1, color=color.orange)
plot(nextBarSAR, style=plot.style_cross, linewidth=1, color=color.aqua)
plot(series = fastSmma, title="fastSmma", linewidth=1)
plot(series = midSmma, title="midSmma", linewidth=2)
plot(series = slowSmma, title="slowSmma", linewidth=3)
plotchar(series = isSmmaUpward, title="isSmmaUpward", char='')
plotchar(series=sarIsUpTrend, title="sarIsUpTrend", char='')
plotchar(series=sarFlippedUp, title="sarFlippedUp", char='')
plotchar(series=sarFlippedDown, title="sarFlippedDown", char='')
plotchar(series=longEntryCondition, title="longEntryCondition", char='')
plotchar(series=shortEntryCondition, title="shortEntryCondition", char='')
plotchar(series=strategy.position_size > 0, title="inLong", char='')
plotchar(series=strategy.position_size < 0, title="inShort", char='')


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



もっと