Strategi stop loss dan take profit komposit berdasarkan kemasukan rawak


Tarikh penciptaan: 2024-01-24 15:38:49 Akhirnya diubah suai: 2024-01-24 15:38:49
Salin: 5 Bilangan klik: 688
1
fokus pada
1617
Pengikut

Strategi stop loss dan take profit komposit berdasarkan kemasukan rawak

Gambaran keseluruhan

Idea utama strategi ini adalah untuk menentukan titik masuk melalui nombor rawak, menetapkan tiga titik berhenti dan satu titik berhenti untuk menguruskan risiko, untuk mengawal kerugian setiap perdagangan.

Prinsip Strategi

Strategi ini menggunakan nombor rawakrd_number_entry untuk membuat keputusan mengenai berapa banyak titik masuk antara 11 dan 13, dan menggunakanrd_number_exit antara 20 dan 22 untuk membuat keputusan mengenai kedudukan kosong. Setelah melakukan lebih banyak, menetapkan stop loss sebagai harga masuk dikurangkanatr(14) * slx。 Pada masa yang sama, menetapkan tiga titik berhenti, titik berhenti pertama untuk harga masuk ditambahatr(14) * tpx, titik berhenti kedua untuk harga masuk ditambah 2 * tpx, dan titik berhenti ketiga untuk harga masuk ditambah 3 * tpx。 Prinsip yang sama untuk membuat kosong, berbeza dengan keputusan masuk pada 3rd_number_entry mengambil nilai yang berbeza, dan arah stop loss sebaliknya。

Strategi ini boleh mengawal risiko dengan menyesuaikan tpx (faktor stop) dan slx (faktor stop).

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan kemasukan rawak dapat mengurangkan kemungkinan kecocokan
  2. Tetapkan pelbagai titik berhenti dan hentikan untuk mengawal risiko perdagangan tunggal
  3. Attr digunakan untuk menetapkan stop loss, yang boleh digunakan untuk menetapkan titik kerugian berdasarkan turun naik pasaran
  4. Anda boleh mengawal risiko dagangan dengan menyesuaikan faktor.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Masuk secara rawak mungkin terlepas peluang
  2. Titik henti yang terlalu kecil mudah terhalang
  3. Terlalu banyak ruang untuk berhenti dan mungkin kurang keuntungan
  4. Parameter yang tidak betul boleh menyebabkan kerugian yang lebih besar

Risiko boleh dikurangkan dengan menyesuaikan faktor stop loss dan mengoptimumkan logik masuk rawak.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Peningkatan logik masuk secara rawak, digabungkan dengan penilaian indikator trend
  2. Optimumkan Stop Loss Factor untuk Membuat Keuntungan Lebih Rasional
  3. Menambah kawalan kedudukan, menggunakan ruang hentian yang berbeza pada peringkat yang berbeza
  4. Parameter pengoptimuman yang digabungkan dengan algoritma pembelajaran mesin

ringkaskan

Strategi ini adalah berdasarkan kemasukan secara rawak, menetapkan beberapa titik berhenti dan berhenti untuk mengawal risiko perdagangan tunggal, kerana keacakan yang kuat dapat mengurangkan kebarangkalian penyesuaian, risiko perdagangan dapat dikurangkan melalui pengoptimuman parameter. Terdapat banyak ruang untuk pengoptimuman selanjutnya yang patut diteliti lebih lanjut.

Kod sumber strategi
/*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)