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.
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).
Keuntungan dari strategi ini meliputi:
Risiko dari strategi ini juga meliputi:
Risiko dapat dikurangi dengan menyesuaikan koefisien mengambil keuntungan dan stop loss dan mengoptimalkan logika entri acak.
Strategi dapat dioptimalkan dalam aspek berikut:
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)