Strategi Stop Loss dan Take Profit Kompaun Berdasarkan Masukan Rawak

Penulis:ChaoZhang, Tarikh: 2024-01-24 15:38:49
Tag:

img

Ringkasan

Idea utama strategi ini adalah untuk menentukan titik masuk secara rawak dan menetapkan tiga titik mengambil keuntungan dan satu titik hentian kerugian untuk menguruskan risiko dan mengawal keuntungan dan kerugian setiap perdagangan.

Logika Strategi

Strategi ini menggunakan nombor rawak rd_number_entry antara 11 dan 13 untuk menentukan titik masuk panjang, dan menggunakan rd_number_exit antara 20 dan 22 untuk menentukan penutupan kedudukan.Pada masa yang sama, tiga titik mengambil keuntungan ditetapkan. titik mengambil keuntungan pertama adalah harga kemasukan ditambah atr ((14)tpx, titik keuntungan kedua adalah harga masuk ditambah 2tpx, dan titik keuntungan ketiga adalah harga kemasukan ditambah 3Prinsip pergi pendek adalah sama, kecuali keputusan masuk mengambil nilai rd_number_entry yang berbeza, dan arah mengambil keuntungan dan berhenti kerugian adalah bertentangan.

Risiko boleh dikawal dengan menyesuaikan tpx (pekali mengambil keuntungan) dan slx (pekali hentian kerugian).

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Penggunaan kemasukan rawak boleh mengurangkan kebarangkalian pemasangan lengkung
  2. Menetapkan beberapa titik stop loss dan mengambil keuntungan boleh mengawal risiko perdagangan tunggal
  3. Menggunakan atr untuk menetapkan mengambil keuntungan dan berhenti kerugian membolehkan ia berdasarkan turun naik pasaran
  4. Risiko perdagangan boleh dikawal dengan menyesuaikan pekali

Analisis Risiko

Risiko strategi ini juga termasuk:

  1. Masuk secara rawak mungkin terlepas trend
  2. Jika stop loss terlalu kecil, ia boleh dihentikan dengan mudah
  3. Jika keuntungan mengambil ruang terlalu besar, keuntungan mungkin tidak mencukupi
  4. Parameter yang tidak sesuai boleh membawa kepada kerugian yang lebih besar

Risiko boleh dikurangkan dengan menyesuaikan pekali mengambil keuntungan dan stop loss dan mengoptimumkan logik kemasukan rawak.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Meningkatkan logik kemasukan rawak dan menggabungkan pertimbangan penunjuk trend
  2. Mengoptimumkan pekali mengambil keuntungan dan berhenti kerugian untuk menjadikan nisbah keuntungan lebih munasabah
  3. Meningkatkan kawalan kedudukan untuk menggunakan ruang mengambil keuntungan yang berbeza pada peringkat yang berbeza
  4. Mengoptimumkan parameter dengan algoritma pembelajaran mesin

Kesimpulan

Strategi ini adalah berdasarkan kemasukan rawak dan menetapkan pelbagai mengambil keuntungan dan titik hentian kerugian untuk mengawal risiko perdagangan tunggal. Oleh kerana rawak yang tinggi, kebarangkalian pemasangan kurva dapat dikurangkan. Risiko perdagangan boleh dikurangkan melalui pengoptimuman parameter. Masih ada banyak ruang untuk pengoptimuman dan penyelidikan lanjut.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Random Strategy with 3 TP levels and SL", overlay=true,max_bars_back = 50)

tpx = input(defval = 0.8, title = 'Atr multiplication for TPs?')
slx = input(defval = 1.2, title = 'Atr multiplication for SL?')
isLong = false
isLong := nz(isLong[1])

isShort = false
isShort := nz(isShort[1])

entryPrice = 0.0
entryPrice := nz(entryPrice[1])
tp1 = true
tp1 := nz(tp1[1])
tp2 = true
tp2 := nz(tp2[1])

sl_price = 3213.0
sl_price := nz(sl_price[1])

sl_atr = atr(14)*slx
tp_atr = atr(14)*tpx

rd_number_entry = 1.0
rd_number_entry := (16708 * nz(rd_number_entry[1], 1) % 2147483647)%17

rd_number_exit = 1.0
rd_number_exit := ((16708 * time % 2147483647) %17)


//plot(rd_number_entry)

shortCondition = (rd_number_entry == 13? true:false) and (year >= 2017) and not isLong and not isShort
longCondition = (rd_number_entry == 11 ? true:false) and (year >= 2017) and not isShort and not isShort
//Never exits a trade:
exitLong = (rd_number_exit == 22?true:false) and (year >= 2018) and not isShort
exitShort = (rd_number_exit ==  22?true:false) and (year >= 2018) and not isLong


//shortCondition = crossunder(sma(close, 14), sma(close, 28)) and year >= 2017
//longCondition = crossover(sma(close, 14), sma(close, 28)) and year >= 2017

//exitLong = crossunder(ema(close, 14), ema(close, 28)) and year >= 2017
//exitShort = crossover(ema(close, 14), ema(close, 28)) and year >= 2017

if (longCondition and not isLong)
    strategy.entry('Long1', strategy.long)
    strategy.entry('Long2', strategy.long)
    strategy.entry('Long3', strategy.long)
    isLong := true
    entryPrice := close
    isShort := false
    tp1 := false
    tp2 := false
    sl_price := close-sl_atr

if (shortCondition and not isShort)
    strategy.entry('Short1', strategy.short)
    strategy.entry('Short2', strategy.short)
    strategy.entry('Short3', strategy.short)
    isShort := true
    entryPrice := close
    isLong := false
    tp1 := false
    tp2 := false
    sl_price := close+sl_atr
    
if (exitShort and isShort)
    strategy.close('Short1')
    strategy.close('Short2')
    strategy.close('Short3')
    isShort :=  false

if (exitLong and isLong)
    strategy.close('Long1')
    strategy.close('Long2')
    strategy.close('Long3')
    isLong :=  false

if isLong
    if (close > entryPrice + tp_atr) and not tp1
        strategy.close('Long1')
        tp1 := true
        sl_price := close - tp_atr
    if (close > entryPrice + 2*tp_atr) and not tp2
        strategy.close('Long2')
        tp2 := true
        sl_price := close - tp_atr
    if (close > entryPrice + 3*tp_atr)
        strategy.close('Long3')
        isLong := false
    if (close < sl_price)
        strategy.close('Long1')
        strategy.close('Long2')
        strategy.close('Long3')
        isLong := false

if isShort
    if (close < entryPrice - tp_atr) and not tp1
        strategy.close('Short1')
        sl_price := close + tp_atr
        tp1 := true
    if (close < entryPrice - 2*tp_atr) and not tp2
        strategy.close('Short2')
        sl_price := close + tp_atr
        tp2 := true
    if (close < entryPrice - 3*tp_atr)
        strategy.close('Short3')
        isShort := false
    if (close > sl_price)
        strategy.close('Short1')
        strategy.close('Short2')
        strategy.close('Short3')
        isShort := false
plot(atr(14)*slx)
plot(sl_price)

Lebih lanjut