Strategi kegelinciran pengambilan untung langkah demi langkah


Tarikh penciptaan: 2023-11-28 16:05:24 Akhirnya diubah suai: 2023-11-28 16:05:24
Salin: 0 Bilangan klik: 778
1
fokus pada
1619
Pengikut

Strategi kegelinciran pengambilan untung langkah demi langkah

Gambaran keseluruhan

Strategi ini adalah strategi keluar yang menggunakan hentian bertahap yang digabungkan dengan hentian slippage. Ia akan memindahkan hentian ke titik keseimbangan kerugian apabila titik hentian pertama dicapai, dan hentian ke titik hentian pertama apabila titik hentian kedua dicapai, mewujudkan mekanisme hentian slippage bertahap. Ini dapat mengunci sebahagian keuntungan sambil mengekalkan ruang keuntungan yang lebih besar.

Prinsip Strategi

Strategi ini bertujuan untuk mencapai titik berhenti meluncur secara beransur-ansur melalui beberapa bahagian:

  1. Tetapkan titik henti dan 3 titik berhenti.
  2. Fungsi pengiraan yang menentukan bilangan keuntungan semasa dan harga henti kerugian.
  3. Fungsi penghakiman yang menentukan tahap keuntungan.
  4. Pada tahap keuntungan yang berbeza, ubah harga stop loss untuk mencapai titik stop loss.

Khususnya, ia mula-mula menetapkan jarak berhenti 100 dan 3 jarak berhenti 100/200/300. Ia kemudian menentukan fungsi untuk mengira nilai keuntungan berdasarkan harga semasa dan harga pembukaan.curProfitInPts, dan fungsi untuk mengira harga henti rugi berdasarkan jarak titikcalcStopLossPrice

Logiknya ialah:getCurrentStageFungsi, ia menilai sama ada terdapat kedudukan semasa, dan sama ada jumlah keuntungan melebihi titik berhenti tertentu, jika melebihi, ia akan memasuki fasa seterusnya. Sebagai contoh, memasuki fasa kedua setelah mencapai 100 titik berhenti, memasuki fasa ketiga setelah mencapai 200 titik berhenti.

Akhirnya, harga hentian diubah mengikut tahap yang berbeza, sehingga dapat mencapai titik hentian. Hentian tahap pertama mengekalkan tetapan asal, tahap kedua bergerak ke keseimbangan untung rugi, tahap ketiga bergerak ke titik hentian pertama.

Analisis kelebihan

Strategi titik penangguhan bertingkat ini mempunyai beberapa kelebihan:

  1. Anda boleh mengunci sebahagian daripada keuntungan anda dan mengekalkan ruang untuk keuntungan yang lebih besar.
  2. Menggunakan stop loss untuk menjejaki harga, anda boleh mengurangkan kemungkinan untuk menarik balik PRODID atau kerugian.
  3. Lebih baik mengawal risiko dengan melakukan beberapa kali penangguhan berbanding dengan satu kali penangguhan.
  4. Strategi logiknya jelas dan mudah difahami.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Hentian beransur-ansur boleh menyebabkan tidak dapat berhenti tepat pada masanya, lebih baik terlepas titik keluar. Anda boleh mengoptimumkannya dengan menyesuaikan bilangan titik berhenti.
  2. Penetapan lebar slider yang terlalu besar boleh menyebabkan stop loss tercetus terlalu awal. Anda boleh menguji lebar slider yang berbeza.
  3. Tidak boleh berhenti juga membawa risiko kerugian yang lebih besar. Anda boleh mempertimbangkan untuk berhenti dengan cepat dalam keadaan tertentu.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Uji jarak hentian yang berbeza, parameter pengoptimuman.
  2. Dalam kes-kes tertentu, pertimbangkan untuk menggunakan mekanisme hentian kerugian yang cepat.
  3. Penghakiman penangguhan dan penangguhan kerugian digabungkan dengan penunjuk teknikal.
  4. Optimumkan lebar titik geser, keseimbangan penghalang dan hentikan.
Kod sumber strategi
/*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)