Strategi ini menggunakan mekanisme stop loss tracking slippage, yang bergerak garis stop loss sesuai dengan amplitudo fluktuasi harga, untuk mencapai stop loss dinamis. Stop loss tracking dimulai setelah harga mencapai tingkat keuntungan yang ditentukan, untuk melindungi keuntungan, sambil meminimalkan kemungkinan terjadinya stop loss yang terlalu dini.
Strategi ini didasarkan pada dua garis rata yang menentukan arah tren masuk, dengan sinyal masuk yang melewati garis rata lambat di atas garis rata cepat.
Hal yang inovatif adalah desain dari mekanisme stop loss:
Setting Stop Loss Launch Line. Stop Loss Tracking mulai diaktifkan saat harga menembus garis ini.
Stop loss line akan bergerak mengikuti setelan slippage Percentage. Jika setelan slippage 3% maka stop loss line akan berada di bawah 3% dari harga minimum.
Ketika harga berbalik ke arah yang tidak menguntungkan dan menyentuh garis tracking stop loss, maka stop loss akan terjadi.
Desain ini memastikan bahwa stop-loss line akan secara otomatis melacak keuntungan dan mengurangi kemungkinan stop-loss dilakukan ketika keuntungan masih bagus.
Risiko dapat dikurangi dengan:
Strategi ini dapat dioptimalkan dalam beberapa hal:
Uji kombinasi parameter fast line dan slow line yang berbeda
Secara langsung mengaktifkan tracking stop loss atau mengatur parameter yang berbeda untuk varietas yang berbeda
Mencari rasio titik terdegradasi yang optimal untuk berbagai varietas
Setting the conditions for re-entry after a stop loss exit (Menetapkan kondisi untuk masuk kembali setelah stop loss exit)
Stop loss margin dapat dilonggarkan secara tepat jika pasar bergejolak
Strategi ini menggunakan stop loss tracking slider, mengatur posisi stop loss secara dinamis setelah garis awal. Metode stop loss ini dapat menyesuaikan kekuatan stop loss secara otomatis sesuai dengan fluktuasi pasar, mencapai keseimbangan antara melindungi keuntungan dan mengurangi kerugian yang tidak perlu. Namun, perlu untuk mengoptimalkan parameter untuk karakteristik varietas, dan didukung dengan penilaian garis sejajar dan indikator teknis lainnya untuk meningkatkan akurasi masuk.
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//@author=Daveatt
SystemName = "BEST Trailing Stop Strategy"
TradeId = "BEST"
InitCapital = 100000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true
// strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay,
// pyramiding=InitPyramidMax, initial_capital=InitCapital, default_qty_type=DefaultQtyType, default_qty_value=InitPosition, commission_type=strategy.commission.percent,
// commission_value=InitCommission, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick, precision=2)
src = close
// Calculate moving averages
fastSMA = sma(close, 15)
slowSMA = sma(close, 45)
// Calculate trading conditions
enterLong = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)
// trend states
since_buy = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend = since_sell > since_buy
sell_trend = since_sell < since_buy
change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1])
//plot(buy_trend ? 1 : 0, title='buy_trend', transp=100)
//plot(sell_trend ? 1 : 0, title='sell_trend', transp=100)
// get the entry price
entry_price = valuewhen(enterLong or enterShort, close, 0)
// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)
// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)
///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////
// use SL?
useSL = input(true, "Use stop Loss")
// Configure trail stop level with input
StopTrailPerc = input(title="Trail Loss (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
// Will trigger the take profit trailing once reached
use_SL_Trigger = input(true, "Use stop Loss Trigger")
StopTrailTrigger = input(2.0, "SL Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01
StopLossPriceTrigger = 0.0
StopLossPriceTrigger := if (use_SL_Trigger)
if buy_trend
entry_price * (1 + StopTrailTrigger)
else
entry_price * (1 - StopTrailTrigger)
else
-1
var SL_Trigger_Long_HIT = false
SL_Trigger_Long_HIT := useSL and use_SL_Trigger and buy_trend and high >= StopLossPriceTrigger
? true : SL_Trigger_Long_HIT[1]
var SL_Trigger_Short_HIT = false
SL_Trigger_Short_HIT := useSL and use_SL_Trigger and sell_trend and low <= StopLossPriceTrigger
? true : SL_Trigger_Short_HIT[1]
display_long_SL_trigger = useSL and buy_trend and use_SL_Trigger
and SL_Trigger_Long_HIT == false and StopLossPriceTrigger != -1
display_short_SL_trigger = useSL and sell_trend and use_SL_Trigger
and SL_Trigger_Short_HIT == false and StopLossPriceTrigger != -1
display_SL_trigger = display_long_SL_trigger or display_short_SL_trigger
plot(display_SL_trigger ? StopLossPriceTrigger : na, title='SLPriceTrigger', transp=0,
color=color.maroon, style=plot.style_circles, linewidth=3)
// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if useSL and buy_trend
stopValue = low * (1 - StopTrailPerc)
max(stopValue, longStopPrice[1])
else
0
shortStopPrice := if useSL and sell_trend
stopValue = high * (1 + StopTrailPerc)
min(stopValue, shortStopPrice[1])
else
999999
//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS ***//
//////////////////////////////////////////////////////////////////////////////////////////
cond_long_stop_loss_hit = useSL and buy_trend and crossunder(low, longStopPrice[1])
and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1])
and (SL_Trigger_Short_HIT or use_SL_Trigger == false)
// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice
and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
? longStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Long Trail Stop")
plot(series=useSL and sell_trend and high <= shortStopPrice
and (SL_Trigger_Short_HIT or use_SL_Trigger == false)
? shortStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Short Trail Stop")
close_long = cond_long_stop_loss_hit
close_short = cond_short_stop_loss_hit
// Submit entry orders
strategy.entry(TradeId + " L", long=true, when=enterLong)
strategy.close(TradeId + " L", when=close_long)
//if (enterShort)
strategy.entry(TradeId + " S", long=false, when=enterShort)
strategy.close(TradeId + " S", when=close_short)
if change_trend
SL_Trigger_Long_HIT := false
SL_Trigger_Short_HIT := false