Ý tưởng chính của chiến lược này là xác định điểm vào ngẫu nhiên và thiết lập ba điểm lấy lợi nhuận và một điểm dừng lỗ để quản lý rủi ro và kiểm soát lợi nhuận và lỗ của mỗi giao dịch.
Chiến lược này sử dụng số ngẫu nhiên rd_number_entry giữa 11 và 13 để xác định điểm vào dài, và sử dụng rd_number_exit giữa 20 và 22 để xác định việc đóng các vị trí. Sau khi mua dài, mức dừng lỗ được đặt thành giá nhập trừ atr ((14)Đồng thời, ba điểm lấy lợi nhuận được thiết lập. điểm lấy lợi nhuận đầu tiên là giá nhập cảnh cộng với atr ((14)tpx, điểm lợi nhuận thứ hai là giá nhập cảnh cộng với 2tpx, và điểm lợi nhuận thứ ba là giá nhập cảnh cộng với 3Nguyên tắc đi ngắn là tương tự, ngoại trừ việc quyết định vào có giá trị rd_number_entry khác nhau, và hướng lấy lợi nhuận và dừng lỗ là ngược lại.
Rủi ro có thể được kiểm soát bằng cách điều chỉnh tpx (tỷ lệ lợi nhuận) và slx (tỷ lệ dừng lỗ).
Những lợi thế của chiến lược này bao gồm:
Các rủi ro của chiến lược này cũng bao gồm:
Các rủi ro có thể được giảm bằng cách điều chỉnh hệ số lấy lợi nhuận và dừng lỗ và tối ưu hóa logic nhập vào ngẫu nhiên.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Chiến lược này dựa trên mục nhập ngẫu nhiên và thiết lập nhiều điểm lấy lợi nhuận và dừng lỗ để kiểm soát rủi ro của một giao dịch duy nhất. Do sự ngẫu nhiên cao, xác suất phù hợp đường cong có thể được giảm. Rủi ro giao dịch có thể được giảm thông qua tối ưu hóa tham số. Vẫn còn nhiều chỗ cho tối ưu hóa và nghiên cứu thêm.
/*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)