Langkah Penghentian dengan Strategi Mengambil Keuntungan Parsial

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

img

Gambaran umum

Ini adalah strategi keluar yang memanfaatkan stop trailing bertahap dengan mengambil keuntungan parsial. Ini memindahkan stop loss ke titik impas setelah mencapai level take profit pertama, dan bergerak ke take profit pertama setelah mencapai level kedua. Ini memungkinkan mengunci beberapa keuntungan sambil mempertahankan potensi keuntungan.

Logika Strategi

Komponen utama dari strategi ini adalah:

  1. Menetapkan stop loss dan 3 mengambil tingkat keuntungan dalam poin.
  2. Mendefinisikan fungsi untuk menghitung keuntungan saat ini dalam poin dan harga stop loss.
  3. Mendefinisikan fungsi untuk menentukan tahap keuntungan saat ini.
  4. Memodifikasi harga stop loss berdasarkan tahap keuntungan ke harga jejak.

Secara khusus, pertama-tama menetapkan stop loss 100 poin dan mengambil keuntungan pada 100/200/300 poin.curProfitInPtsFungsi ini menghitung keuntungan saat ini berdasarkan harga saat ini dan harga masuk.calcStopLossPriceFungsi menghitung harga stop loss berdasarkan jarak titik.

Logika kunci adalah dalamgetCurrentStagefungsi yang memeriksa apakah ada posisi dan jika keuntungan telah melebihi setiap mengambil tingkat keuntungan, memajukan tahap jika benar.

Akhirnya, stop loss dimodifikasi sesuai dengan tahap. Tahap 1 menggunakan stop asli, tahap 2 break-even, dan tahap 3 mengikuti level take profit pertama.

Analisis Keuntungan

Keuntungan dari strategi stop trailing bertahap ini:

  1. Memungkinkan untuk mengunci beberapa keuntungan sambil mempertahankan potensi keuntungan lebih lanjut.
  2. Trailing stop loss mengikuti harga dan mengurangi kemungkinan penarikan.
  3. Multi-langkah mengambil keuntungan mengendalikan risiko lebih baik daripada satu mengambil keuntungan.
  4. Logika yang sederhana dan jelas.

Analisis Risiko

Ada beberapa risiko yang harus dipertimbangkan:

  1. Mengambil keuntungan secara bertahap dapat kehilangan peluang keluar yang lebih baik.
  2. Jika jarak stop trail terlalu tinggi, stop bisa memicu prematur.
  3. Ketidakmampuan untuk mengurangi kerugian juga dapat menyebabkan kerugian yang lebih besar.

Optimalisasi

Beberapa cara strategi ini dapat ditingkatkan:

  1. Uji keuntungan yang berbeda dan berhenti jarak untuk mengoptimalkan parameter.
  2. Pertimbangkan mekanisme stop loss cepat untuk situasi tertentu.
  3. Menggunakan indikator teknis untuk menentukan target keuntungan dan level stop.
  4. Seimbangkan 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 banyak