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.
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).
Kelebihan strategi ini termasuk:
Risiko strategi ini juga termasuk:
Risiko boleh dikurangkan dengan menyesuaikan pekali mengambil keuntungan dan stop loss dan mengoptimumkan logik kemasukan rawak.
Strategi ini boleh dioptimumkan dalam aspek berikut:
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)