
これは,パラパラ線SAR指数と3つの異なる周期のSMMA平均線を組み合わせたブレークトレード戦略である.それは,3つの平均線が全面的に上昇すると多額の取引を行い,3つの平均線が全面的に低下すると空白取引を行い,SAR指数と組み合わせてトレンドの方向を判断し,SAR指数が変化すると逆転開設を行う.この戦略は,同時にもストップ・ローズとストップ・ストップをサポートする.
この戦略は主に以下の点に基づいています.
PARALINESAR指数は,価格の変化を動的に追跡し,多頭トレンドと空頭トレンドを判断します.
3つの異なる周期のSMMA平均線を設定します (快線21周期,中線50周期,慢線200周期). 3つの平均線がすべて上昇すると,多頭トレンドが形成され; 3つの平均線がすべて低下すると,空頭トレンドが形成され.
SAR指標が下向きに転じるとき,三つの均線が全体的に上昇した場合,追加入場を行う.
SAR指数が上向きに転じると,3つの均線が完全に下落した場合,空調に入場する.
ストップとストップを設定する.ストップはSAR指標を動的ストップとして設定し,ストップは入場価格の一定割合として設定する.
具体的には,戦略はまず,現在のBARのSAR指標が転向しているかどうかを判断する.SARが上から下へ転向し,3つの均線が全体的に上昇した場合,多めに行う.SARが下から上へ転向し,3つの均線が全体的に低下した場合,空っぽにする.
ポジションを取った後,ストップラインを次のBARのSAR指数価格として設定し,SARをストップを動的に追跡する. ストップは入場価格の10%として設定. 価格がストップまたはストップのレベルに達すると平仓を退出する.
この戦略は,トレンド判断指標と多時間周期平均線の優位性を組み合わせ,トレンドが転じるときに間に合うように入場し,同時に平均線フィルターで偽突破することができる.主な優位性は:
SAR指標は,動的にトレンドの転換を判断し,トレンド転換の機会を迅速に捉えることができます.
3つの均線は,市場騒音を効果的にフィルターし,偽突破を防ぐことができます.
SMMA均線を使用し,曲線がより滑らかになり,均線振動が取引の干渉を軽減する.
ストップ・ストップ・ストップの設定と組み合わせると,単発損失を制御し,利益の一部をロックすることができます.
戦略パラメータの設定は柔軟で,異なる市場に対応してパラメータを調整し,戦略の効果を最適化できます.
この戦略にはいくつかのリスクがあります.
振動的なトレンドでは,SAR指数は,頻繁に何度も転向し,取引が頻繁に取引され,取引費用が増加する可能性があります.
3つの均線 Settingsは,必ずしもすべての品種に完全に適さない場合があり,特定の品種の状況に応じて調整する必要がある.
ストップ・ロスは,次のBARのSAR価格が時間遅れで存在し,損失を拡大する可能性があります.
安定傾向中の偽突破がSARを回転させる問題は,パラメータを調整することでSAR曲線を平らげることで緩和することができる.
平均線設定が不適切である場合,トレンドを逃したり,誤ったシグナルを生成したりする可能性があるため,慎重にテストして最適化する必要があります.
リスクに対応するには,次の点から最適化できます.
異なる品種の波動度に応じてSARパラメータを調整し,頻繁な転向の確率を下げます.
3つの均線のパラメータを調整して,異なる品種の特徴に近似させる.
小規模なストップ,移動ストップなどのストップ戦略の最適化
取引頻度の高い市場では,スライドポイントが損失を拡大することを避けるために,制限価格のストップ・ロスを使用します.
平均線とSARパラメータが戦略の効果に与える影響を評価するパラメータ調整テストを行う.
分析の結果,この戦略は以下のような点で最適化できる:
SARパラメータ設定を最適化し,SAR曲線を平坦化し,曲線の回転頻度を低下させ,過剰取引を回避する.
3つの均線の長さを調整し,特定の取引品種の特性に合わせてトレンドフィルタリングの効果を高める.
動的ストップ戦略,例えば移動ストップ,小額ストップなどを採用し,ストップによる損失を減らす.
高周波取引市場では,制限価格単一のストップロスを使用し,ストップロスの滑点損失を低減する.
RSI,KDなどの他の指標をフィルタリングして,信号の質を向上させ,偽突破の確率を減らす.
入場条件を最適化し,SAR回転時に同時にK線形状を検査することを考慮し,低品質の信号を避ける.
再入場条件を追加し,ストップ後の価格が有利な方向に進む場合に再入場する.
移動停止,部分停止,階差停止などの停止戦略を改良し,収益性を向上させる.
返信結果に基づいてパラメータを最適化し,全体の戦略効果に対するパラメータの影響を評価する.
全体として,これはトレンド追跡指標SARと均線を組み合わせたシンプルで実用的突破戦略である.SARを活用してトレンドの転換を判断する感度,均線の波作用を活用し,トレンドの転換点で迅速に入場する.同時に,リスクを制御し,利益をロックするためのストップ・ロスの設定を行う.パラメータのSETTINGSを調整し,入場・出場条件を最適化することで,優れた戦略効果を得ることができる.しかし,トレーダーは過剰取引や偽の突破などの問題を制御するために注意する必要があります.
/*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)