Tài nguyên đang được tải lên... tải...

Chiến lược dừng lỗ và lấy lợi nhuận hợp chất dựa trên nhập khẩu ngẫu nhiên

Tác giả:ChaoZhang, Ngày: 2024-01-24 15:38:49
Tags:

img

Tổng quan

Ý 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 logic

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ỗ).

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Việc sử dụng nhập ngẫu nhiên có thể làm giảm xác suất phù hợp đường cong
  2. Thiết lập nhiều điểm dừng lỗ và lấy lợi nhuận có thể kiểm soát rủi ro của một giao dịch duy nhất
  3. Sử dụng atr để thiết lập lợi nhuận và dừng lỗ cho phép nó dựa trên biến động thị trường
  4. Rủi ro giao dịch có thể được kiểm soát bằng cách điều chỉnh các hệ số

Phân tích rủi ro

Các rủi ro của chiến lược này cũng bao gồm:

  1. Nhập ngẫu nhiên có thể bỏ lỡ xu hướng
  2. Nếu stop loss quá nhỏ, nó có thể được dừng ra dễ dàng
  3. Nếu lợi nhuận chiếm không gian quá lớn, lợi nhuận có thể không đủ
  4. Các thông số không phù hợp có thể dẫn đến tổn thất lớn hơn

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.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Cải thiện logic nhập khẩu ngẫu nhiên và kết hợp các đánh giá chỉ số xu hướng
  2. Tối ưu hóa hệ số lấy lợi nhuận và dừng lỗ để làm cho tỷ lệ lợi nhuận hợp lý hơn
  3. Tăng kiểm soát vị trí để sử dụng không gian lợi nhuận khác nhau ở các giai đoạn khác nhau
  4. Tối ưu hóa các tham số bằng các thuật toán học máy

Kết luận

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)

Thêm nữa