Strategi Hentian Jejak Gelinciran Terbaik


Tarikh penciptaan: 2023-09-21 20:58:22 Akhirnya diubah suai: 2023-09-21 20:58:22
Salin: 0 Bilangan klik: 741
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggunakan mekanisme penangkapan stop-loss yang bergerak untuk menggerakkan garisan stop-loss, dan mencapai stop-loss yang dinamik mengikut ketinggian turun naik harga. Penangkapan stop-loss yang dimulakan selepas harga mencapai tahap keuntungan yang ditetapkan bertujuan untuk melindungi keuntungan, sambil meminimumkan kemungkinan tercetus terlalu awal.

Prinsip Strategi

Strategi ini berdasarkan kepada dua garis rata untuk menentukan arah trend masuk, isyarat masuk adalah garis rata cepat melalui garis rata perlahan.

Ini adalah satu inovasi dalam reka bentuk mekanisme penangguhan kerugian:

  1. Tetapkan garisan permulaan berhenti. Apabila harga menembusi garisan ini, ia akan mengaktifkan pengesanan berhenti.

  2. Garis berhenti bergerak mengikut Peratusan Slip yang ditetapkan. Jika anda menetapkan 3% Slip, garis berhenti akan berada di bawah 3% daripada harga minimum.

  3. Apabila harga berbalik ke arah yang tidak baik dan menyentuh garis berhenti yang dikesan, hentikan kerugian.

Reka bentuk ini memastikan bahawa garisan berhenti kehilangan akan secara automatik menjejaki keuntungan, dan mengurangkan kemungkinan untuk menghentikan kerugian apabila keuntungan adalah baik.

Kelebihan Strategik

  • Stop loss peratusan slip, stop loss pengesanan automatik
  • Tetapkan talian permulaan untuk mengelakkan pemadaman awal
  • Tracking Stop Loss Line Secara Dinamis, Menjaga Keuntungan
  • Mengelakkan kerugian dengan panggilan balik jangka pendek
  • Garis permulaan dan nisbah titik slider boleh disesuaikan dengan pasaran

Risiko Strategik

  • Penghakiman rata-rata mungkin terlewat dan menghasilkan isyarat palsu
  • Tetapan talian permulaan yang tidak betul akan mengaktifkan stop loss terlalu awal atau terlalu lewat
  • Perkadaran titik geser yang tidak betul, terlalu longgar atau terlalu ketat
  • Tidak dapat mengelakkan sepenuhnya risiko terbabit.
  • Parameter yang perlu dioptimumkan untuk turun naik pasaran

Risiko boleh dikurangkan dengan:

  • Optimumkan kitaran garis purata, meningkatkan ketepatan kemasukan
  • Uji parameter garis permulaan yang berbeza untuk mencari titik terbaik
  • Peratusan slip terbaik diuji berdasarkan penarikan balik sejarah
  • Menimbang peluang masuk semula untuk mengurangkan kehilangan
  • Menambah kesesuaian untuk mengelakkan kejatuhan

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Optimumkan parameter kitaran dua rata-rata

Uji parameter gabungan garisan pantas dan garisan perlahan yang berbeza

  1. Optimumkan atau hapuskan baris permulaan

Secara langsung mengaktifkan Tracking Stop Loss atau menetapkan parameter yang berbeza mengikut jenis yang berbeza

  1. Uji parameter nisbah titik geser yang berbeza

Mencari nisbah paras paras terhad yang optimum untuk pelbagai jenis

  1. Bergabung dengan mekanisme kemasukan semula

Tetapkan syarat untuk kemasukan semula selepas penangguhan kerugian

  1. Mengubah kuasa henti mengikut kadar turun naik

Perlindungan terhad yang sesuai apabila turun naik pasaran meningkat

ringkaskan

Kaedah ini menggunakan kaedah penarikan kerugian yang dijejaki oleh titik geser, menetapkan kedudukan berhenti yang disesuaikan secara dinamik selepas garis permulaan. Kaedah berhenti ini dapat menyesuaikan kekuatan berhenti secara automatik mengikut turun naik pasaran, mencapai keseimbangan antara melindungi keuntungan dan mengurangkan kerugian yang tidak perlu. Tetapi perlu mengoptimumkan parameter untuk ciri-ciri varieti, ditambah dengan penilaian garis rata dan lain-lain petunjuk teknikal untuk meningkatkan ketepatan masuk ke dalam permainan.

Kod sumber strategi
/*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