これは,パラボリックSAR指標と3つのSMMAラインを異なる期間で組み合わせたブレークアウト取引戦略である.すべての3つのSMMAラインが上昇しているときに長くなって,すべてが落ちているときに短くなって,SAR指標を使用してトレンド方向を決定し,SARが方向を転換するときに反トレンドエントリを取ります.この戦略にはストップ損失と利益を取ることも含まれます.
戦略は以下の主要なポイントに基づいています.
パラボリック SAR インディケーターを使用して,現在のトレンド方向を決定します.SARは価格の変化を動的に追跡し,上昇傾向と下落傾向を特定することができます.
3つのSMMA線を異なる期間で設定する (高速線21,中間線50,遅い線200). 3つの線が上昇しているとき,上昇傾向を示します.すべての線が下落しているとき,下落傾向を示します.
3つのSMMA線が上昇している間,SARがダウンするときに長くなっています.
3つのSMMA線が落ちている間に SARが反転すると短縮します
SAR をベースにしたストップ・ロスを組み込み,入場価格の一定の割合で利益を得ます.
具体的には,戦略は,まず,現在のバーの方向をSARが転覆するかどうかをチェックします.SMMAが上昇している間にSARが上から下へと転移した場合,それは長くなります.SMMAが落ちている間にSARが下から上へと転移した場合,それは短くなります.
入場後,ストップロスは次のバーのSAR価格で設定され,SARをダイナミックトレーリングストップロスとして使用する. 利益を取ることは入場価格の10%に設定される. 価格が利益を取るかストップロスのレベルに達すると,ポジションは閉鎖される.
この戦略は,トレンドフォローインジケーターと複数のタイムフレーム移動平均の利点を組み合わせ,SMMAで誤ったブレイクをフィルタリングしながら,トレンド逆転のタイミングでエントリを可能にします.主な利点は以下の通りです.
SARはトレンドの変化を迅速に検知し 逆転の機会を把握できます
三重SMMAは,市場の騒音を効果的にフィルタリングし,誤った断断を回避します.
SMMAを使用すると,より滑らかな曲線とMAのウィップソーからの干渉が少なくなります.
ストップ・ロストとテイク・プロフィートを組み込むことは,単一の取引損失を制御し,部分的な利益をロックするのに役立ちます.
柔軟なパラメータ設定により,異なる市場向けに最適化できます.
考慮すべきリスクもいくつかあります.
SARは変動傾向の際に頻繁に転機し,過剰な取引によるコストを増加させることがあります
SMMA設定はすべての楽器にうまく適合しない可能性があり,個々の最適化が必要である.
SARのストップ損失には時間遅れがあり 損失を増加させる可能性があります
安定したトレンドでは誤ったブレイクが起こります.SARパラメータを平滑化することで助けられます.
SMMA の設定が不十分である場合,見落とした傾向や悪い信号を引き起こす可能性があります.注意深く検査する必要があります.
リスクに対処するために,最適化は以下に焦点を当てることができます.
SARパラメータを 変動性に基づいて調整して 転機を減らす
計器の特徴に合わせて SMMA 期間を調整する.
ストップ・ロスの改善,例えば,遅延またはリミット・オーダー.
アクティブ・トレードでストップ・ロスの制限オーダーを使用する.
パラメータのテストと調整を 徹底した
上記の分析に基づいて,最適化は以下を含むことができる:
SARパラメータを最適化して 曲線を滑らかにし 転がりも少なくする
SMMAの長さを取引手段に合わせて調整する
動的ストップ・ロスを利用する ストップ・トレイルや制限オーダー
高周波取引におけるストップ・ロスの制限オーダーを使用する.
信号の質を改善するために RSI,KDなどのフィルターを追加します
入り口条件を改善し,例えばSAR投射でキャンドルのパターンをチェックする.
ストップ・ロスのトリガー後に再入場条件を追加する.
増幅して利益を得て 後ろに下がり 部分的な接近 驚異的なレベル
バックテスト結果と感度分析に基づくパラメータ調整
ストップ・ロストとテイク・プロフィートの利用は,リスクを制御し,利益をロックするのに役立ちます.パラメータ設定,エントリー/エグジットルール,偽ブレイクに対する強度に関するさらなる最適化により,さまざまな取引機器の戦略パフォーマンスを向上させることができます.
/*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)