Strategi Stop Loss dan Take Profit Komponen Berdasarkan Entry Acak

Penulis:ChaoZhangTanggal: 2024-01-24 15:38:49
Tag:

img

Gambaran umum

Ide utama dari strategi ini adalah untuk menentukan titik masuk secara acak dan menetapkan tiga titik mengambil keuntungan dan satu titik stop loss untuk mengelola risiko dan mengontrol keuntungan dan kerugian dari setiap perdagangan.

Logika Strategi

Strategi ini menggunakan angka acak rd_number_entry antara 11 dan 13 untuk menentukan titik masuk panjang, dan menggunakan rd_number_exit antara 20 dan 22 untuk menentukan penutupan posisi.Pada saat yang sama, tiga titik mengambil keuntungan ditetapkan. titik mengambil keuntungan pertama adalah harga masuk ditambah atr ((14)Tpx, titik take profit kedua adalah harga masuk ditambah 2Tpx, dan titik mengambil keuntungan ketiga adalah harga masuk ditambah 3Prinsip untuk short adalah sama, kecuali bahwa keputusan masuk mengambil nilai rd_number_entry yang berbeda, dan arah mengambil keuntungan dan stop loss berlawanan.

Risiko dapat dikendalikan dengan menyesuaikan tpx (koefisien mengambil keuntungan) dan slx (koefisien stop loss).

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Penggunaan entri acak dapat mengurangi kemungkinan penyesuaian kurva
  2. Menetapkan beberapa titik stop loss dan take profit dapat mengendalikan risiko perdagangan tunggal
  3. Menggunakan atr untuk mengatur mengambil keuntungan dan stop loss memungkinkan untuk didasarkan pada volatilitas pasar
  4. Risiko perdagangan dapat dikendalikan dengan menyesuaikan koefisien

Analisis Risiko

Risiko dari strategi ini juga meliputi:

  1. Masuk secara acak mungkin kehilangan tren
  2. Jika stop loss terlalu kecil, dapat dengan mudah dihentikan
  3. Jika keuntungan mengambil ruang terlalu besar, keuntungan mungkin tidak cukup
  4. Parameter yang tidak tepat dapat menyebabkan kerugian yang lebih besar

Risiko dapat dikurangi dengan menyesuaikan koefisien mengambil keuntungan dan stop loss dan mengoptimalkan logika entri acak.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Meningkatkan logika entri acak dan menggabungkan penilaian indikator tren
  2. Mengoptimalkan koefisien mengambil keuntungan dan stop loss untuk membuat rasio keuntungan lebih wajar
  3. Meningkatkan kontrol posisi untuk menggunakan ruang mengambil keuntungan yang berbeda pada tahap yang berbeda
  4. Mengoptimalkan parameter dengan algoritma pembelajaran mesin

Kesimpulan

Strategi ini didasarkan pada entri acak dan menetapkan beberapa titik mengambil keuntungan dan stop loss untuk mengontrol risiko perdagangan tunggal. Karena keacakan yang tinggi, probabilitas penyesuaian kurva dapat dikurangi. Risiko perdagangan dapat dikurangi melalui optimasi parameter. Masih ada banyak ruang untuk optimasi dan penelitian lebih 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 banyak