Strategy Stop Loss yang Dinamik

Penulis:ChaoZhang, Tarikh: 2023-12-21 15:58:54
Tag:

img

Ringkasan

Strategi ini menentukan hala tuju trend berdasarkan lilin harian, dan menggunakan titik tinggi atau rendah baru yang dibentuk oleh lilin 15 minit sebagai harga stop loss atau harga stop loss, untuk menyesuaikan stop loss secara dinamik dan mengunci lebih banyak keuntungan.

Logika Strategi

  1. Bandingkan harga penutupan lilin harian dengan harga tertinggi dan terendah lilin harian sebelumnya untuk menentukan arah trend. Jika harga penutupan lebih tinggi daripada harga tertinggi hari sebelumnya, ia ditakrifkan sebagai trend menaik. Jika harga penutupan lebih rendah daripada harga terendah hari sebelumnya, ia ditakrifkan sebagai trend menurun.

  2. Apabila dalam trend menaik, pergi panjang apabila harga penutupan lilin 15 minit lebih tinggi daripada harga tertinggi lilin 15 minit sebelumnya. Apabila dalam trend menurun, pergi pendek apabila harga penutupan lilin 15 minit lebih rendah daripada harga terendah lilin 15 minit sebelumnya.

  3. Tetapkan harga terendah lilin 15 minit sebelum ini sebagai harga stop loss selepas pergi lama. Tetapkan harga tertinggi lilin 15 minit sebelum ini sebagai harga stop loss selepas pergi pendek.

  4. Apabila lilin 15 minit membuat tinggi atau rendah baru lagi, sesuaikan harga stop loss dengan sewajarnya. Sesuaikan dengan rendah baru selepas pergi lama. Sesuaikan dengan tinggi baru selepas pergi pendek. Ini merealisasikan kehilangan berhenti yang dinamis.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah bahawa ia dapat menyesuaikan harga stop loss secara dinamik. sambil memastikan kawalan risiko, ia memaksimumkan pengambilan keuntungan dan mengurangkan kebarangkalian stop loss dipukul.

Khususnya kelebihan termasuk:

  1. Penghakiman berdasarkan operasi trend boleh menentukan trend pasaran tepat pada masanya dan memilih arah perdagangan yang betul.

  2. Perdagangan jangka masa 15 minit membolehkan kemasukan dan keluar yang kerap untuk menangkap lebih banyak peluang.

  3. Penyesuaian stop loss dinamik berdasarkan paras tertinggi atau paras terendah baru mengurangkan risiko stop loss yang dipukul.

  4. Penempatan stop loss yang munasabah sebahagian besarnya mengelakkan kerugian yang tidak perlu.

Analisis Risiko

Risiko utama strategi ini berasal dari kesilapan dalam penilaian trend.

  1. Penghakiman trend harian yang salah boleh membawa kepada arah perdagangan yang salah.

  2. Harga boleh turun naik secara ganas dalam jangka pendek, meningkatkan kebarangkalian kerugian berhenti 15 minit.

  3. Penentuan titik pembalikan trend yang tidak betul boleh menyebabkan kerugian.

Penyelesaian yang sepadan:

  1. Tambahkan penunjuk dari jangka masa lain untuk penilaian komprehensif untuk mengelakkan bergantung pada satu jangka masa sahaja.

  2. Mengkaji turun naik pasaran dan melapangkan julat stop loss dengan sewajarnya semasa turun naik yang tinggi.

  3. Tambah mekanisme pengenalan titik pembalikan trend untuk menutup kedudukan tepat pada masanya sebelum pembalikan.

Arahan pengoptimuman

Masih ada ruang untuk pengoptimuman lanjut:

  1. Tambah penunjuk jangka masa lain untuk mengoptimumkan penangkapan trend.

  2. Uji tetapan nisbah stop loss yang berbeza untuk mencari parameter optimum.

  3. Tambah penunjuk jumlah untuk mengelakkan kesilapan daripada perbezaan jumlah.

  4. Tambah mekanisme pembalikan trend untuk mengoptimumkan titik keluar.

  5. Mengkaji meluaskan selang harga Trailing Stop untuk mengurangkan lagi risiko kerugian berhenti.

Ringkasan

Performa keseluruhan strategi ini adalah baik. Logiknya jelas dan mudah difahami. Ia mempunyai kelebihan seperti penyesuaian stop loss dinamik, perdagangan yang kerap, dan perdagangan mengikut trend. Ia dapat mengawal risiko dengan berkesan dan mengunci keuntungan, dan bernilai pengujian dan pengoptimuman lanjut. Tetapi masih ada ruang untuk penambahbaikan. Disyorkan untuk meningkatkan dari aspek seperti penghakiman komprehensif dari pelbagai sudut, pengoptimuman parameter, menambah mekanisme pengenalan pembalikan trend, dan lain-lain, untuk lebih memperkukuhkan kestabilan dan keuntungan strategi.


/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-15 02:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Anand's Strategy", overlay=true)

// Get the high and low of the previous day's candle
prev_high = request.security(syminfo.tickerid, "D", high[2])
prev_low = request.security(syminfo.tickerid, "D", low[2])

// var float prev_high = na
// var float prev_low = na

prev_close = request.security(syminfo.tickerid, "D", close[1])


getDayIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "D", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "D", low[_bar])
    [_indexed_high, _indexed_low]

var index = 2

while index >= 0
    [indexed_high_D, indexed_low_D] =  getDayIndexedHighLow(index)
  
    if prev_close > indexed_high_D or prev_close < indexed_low_D
        prev_high := indexed_high_D
        prev_low := indexed_low_D
        break
    // Decrease the index to move to the previous 15-minute candle
    index := index - 1


// Determine the trade direction based on the candle criterion
trade_direction = prev_close > prev_high ? 1 : (prev_close < prev_low ? -1 : 0)

// Get the current close from 15-minute timeframe
current_close = request.security(syminfo.tickerid, "15", close[1])
prev_high_15m = request.security(syminfo.tickerid, "15", high[2])
prev_low_15m = request.security(syminfo.tickerid, "15", low[2])

// var float prev_high_15m = na
// var float prev_low_15m = na

getIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "15", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "15", low[_bar])
    [_indexed_high, _indexed_low]


// Loop through previous 15-minute candles until the condition is met
var  i = 2

while i >= 2
    [indexed_high_15m, indexed_low_15m] =  getIndexedHighLow(i)
  
    if current_close > indexed_high_15m or current_close < indexed_low_15m
        prev_high_15m := indexed_high_15m
        prev_low_15m := indexed_low_15m
        break
    // Decrease the index to move to the previous 15-minute candle
    i := i - 1



buy_condition = trade_direction == 1 and current_close > prev_high_15m
stop_loss_buy = prev_low_15m

// Sell Trade Criteria in Negative Trend
sell_condition = trade_direction == -1 and current_close < prev_low_15m
stop_loss_sell = prev_high_15m


// Trailing Stop Loss for Buy Trade
// Custom Trailing Stop Function for Buy Trade
var float trail_stop_buy = na
trailing_buy_condition = buy_condition and current_close > trail_stop_buy
if trailing_buy_condition
    trail_stop_buy := current_close

// Custom Trailing Stop Function for Sell Trade
var float trail_stop_sell = na
trailing_sell_condition = sell_condition and current_close < trail_stop_sell
if trailing_sell_condition
    trail_stop_sell := current_close

// Take Buy Trade with Stop Loss
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Stop Loss", "Buy", stop=stop_loss_buy)

// Take Sell Trade with Stop Loss
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Stop Loss", "Sell", stop=stop_loss_sell)

// Set the background color based on the trade direction
bgcolor(trade_direction == 1 ? color.new(color.green, 90) : trade_direction == -1 ? color.new(color.red, 90) : na)

Lebih lanjut