Langkah-langkah berhenti dengan strategi mengambil keuntungan separa

Penulis:ChaoZhang, Tarikh: 2023-11-28 16:05:24
Tag:

img

Ringkasan

Ini adalah strategi keluar yang menggunakan hentian menyusuri bertahap dengan mengambil keuntungan separa. Ia memindahkan hentian kerugian ke impas selepas mencapai tahap keuntungan mengambil pertama, dan bergerak ke mengambil keuntungan pertama selepas mencapai tahap kedua. Ini membolehkan mengunci beberapa keuntungan sambil mengekalkan potensi keuntungan.

Logika Strategi

Komponen utama strategi ini ialah:

  1. Menetapkan stop loss dan 3 mengambil tahap keuntungan dalam mata.
  2. Menentukan fungsi untuk mengira keuntungan semasa dalam mata dan harga stop loss.
  3. Menentukan fungsi untuk menentukan tahap keuntungan semasa.
  4. Mengubah harga stop loss berdasarkan tahap keuntungan kepada harga jejak.

Secara khusus, ia pertama menetapkan 100 mata stop loss dan mengambil keuntungan pada 100/200/300 mata.curProfitInPtsfungsi mengira keuntungan semasa berdasarkan harga semasa dan harga kemasukan.calcStopLossPricefungsi mengira harga stop loss berdasarkan jarak titik.

Logik utama adalah dalamgetCurrentStagefungsi yang memeriksa jika terdapat kedudukan dan jika keuntungan telah melebihi setiap mengambil tahap keuntungan, memajukan peringkat jika benar.

Akhirnya, stop loss dimodifikasi mengikut peringkat. Tahap 1 menggunakan stop asal, peringkat 2 break even, dan peringkat 3 jejak tahap mengambil keuntungan pertama.

Analisis Kelebihan

Kelebihan strategi hentian yang diteruskan ini:

  1. Membolehkan mengunci beberapa keuntungan sambil mengekalkan potensi keuntungan lebih lanjut.
  2. Penghentian kerugian mengikuti harga dan mengurangkan peluang penarikan.
  3. Multi-langkah keuntungan mengambil kawalan risiko lebih baik daripada satu mengambil keuntungan.
  4. Logik yang mudah dan jelas.

Analisis Risiko

Terdapat beberapa risiko yang perlu dipertimbangkan:

  1. Mengambil keuntungan yang ditingkatkan boleh kehilangan peluang keluar yang lebih baik.
  2. Jika jarak berhenti jejak terlalu tinggi, berhenti boleh mencetuskan terlalu awal. boleh menguji jarak yang berbeza.
  3. Kegagalan untuk mengurangkan kerugian juga boleh membawa kepada kerugian yang lebih besar.

Pengoptimuman

Beberapa cara strategi ini boleh ditingkatkan:

  1. Uji keuntungan yang berbeza dan berhenti jarak untuk mengoptimumkan parameter.
  2. Pertimbangkan mekanisme stop loss cepat untuk situasi tertentu.
  3. Menggunakan penunjuk teknikal untuk menentukan sasaran keuntungan dan paras berhenti.
  4. Mengimbangi keluar yang menguntungkan dan berhenti jarak.

/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © adolgov

// @description
// when tp1 is reached, sl is moved to break-even
// when tp2 is reached, sl is moved to tp1
// when tp3 is reached - exit

//@version=4
strategy("Stepped trailing strategy example", overlay=true)

// random entry condition
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

// sl & tp in points
sl = input(100)
tp1 = input(100)
tp2 = input(200)
tp3 = input(300)

curProfitInPts() =>
    if strategy.position_size > 0
        (high - strategy.position_avg_price) / syminfo.mintick
    else if strategy.position_size < 0
        (strategy.position_avg_price - low) / syminfo.mintick
    else
        0
        
calcStopLossPrice(OffsetPts) =>
    if strategy.position_size > 0
        strategy.position_avg_price - OffsetPts * syminfo.mintick
    else if strategy.position_size < 0
        strategy.position_avg_price + OffsetPts * syminfo.mintick
    else
        0
        
calcProfitTrgtPrice(OffsetPts) =>
    calcStopLossPrice(-OffsetPts)

getCurrentStage() =>
    var stage = 0
    if strategy.position_size == 0 
        stage := 0
    if stage == 0 and strategy.position_size != 0
        stage := 1
    else if stage == 1 and curProfitInPts() >= tp1
        stage := 2
    else if stage == 2 and curProfitInPts() >= tp2
        stage := 3
    stage

stopLevel = -1.
profitLevel = calcProfitTrgtPrice(tp3)

// based on current stage set up exit
// note: we use same exit ids ("x") consciously, for MODIFY the exit's parameters
curStage = getCurrentStage()
if curStage == 1
    stopLevel := calcStopLossPrice(sl)
    strategy.exit("x", loss = sl, profit = tp3, comment = "sl or tp3")
else if curStage == 2
    stopLevel := calcStopLossPrice(0)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "breakeven or tp3")
else if curStage == 3
    stopLevel := calcStopLossPrice(-tp1)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "tp1 or tp3")
else
    strategy.cancel("x")
    
// this is debug plots for visulalize TP & SL levels
plot(stopLevel > 0 ? stopLevel : na, style = plot.style_linebr)
plot(profitLevel > 0 ? profitLevel : na, style = plot.style_linebr)

Lebih lanjut