Chiến lược dừng lỗ và chốt lời tổng hợp dựa trên mục nhập ngẫu nhiên


Ngày tạo: 2024-01-24 15:38:49 sửa đổi lần cuối: 2024-01-24 15:38:49
sao chép: 5 Số nhấp chuột: 688
1
tập trung vào
1617
Người theo dõi

Chiến lược dừng lỗ và chốt lời tổng hợp dựa trên mục nhập ngẫu nhiên

Tổng quan

Ý tưởng chính của chiến lược này là quyết định điểm vào bằng số ngẫu nhiên, đặt ba điểm dừng và một điểm dừng để quản lý rủi ro để kiểm soát lợi nhuận trên mỗi giao dịch.

Nguyên tắc chiến lược

Chiến lược này sử dụng số ngẫu nhiên rd_number_entry để quyết định nhiều điểm vào giữa 11 và 13, sử dụng rd_number_exit từ 20 đến 22 để quyết định vị trí bằng phẳng. Sau khi làm nhiều, thiết lập stop loss cho giá vào trừatr(14) * slx. Đồng thời thiết lập ba điểm dừng, điểm dừng đầu tiên cho giá vào thêmatr(14) * tpx, điểm dừng thứ hai cho giá vào thêm 2 * tpx, điểm dừng thứ ba cho giá vào thêm 3 * tpx.

Chiến lược này có thể kiểm soát rủi ro bằng cách điều chỉnh tpx (phần số dừng) và slx (phần số dừng).

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Sử dụng nhập cảnh ngẫu nhiên có thể làm giảm khả năng phù hợp
  2. Thiết lập nhiều điểm dừng để kiểm soát rủi ro của một giao dịch
  3. Sử dụngatr để thiết lập điểm dừng lỗ, có thể thiết lập điểm lỗ dựa trên biến động thị trường
  4. Có thể kiểm soát rủi ro giao dịch bằng cách điều chỉnh hệ số

Phân tích rủi ro

Chiến lược này cũng có những rủi ro sau:

  1. Có thể bị bỏ lỡ
  2. Điểm dừng quá nhỏ dễ bị dừng.
  3. Không gian dừng quá lớn, có thể không mang lại lợi nhuận
  4. Các tham số không đúng có thể làm tăng tổn thất

Bạn có thể giảm rủi ro bằng cách điều chỉnh hệ số stop-loss và tối ưu hóa logic nhập cảnh ngẫu nhiên.

Hướng tối ưu hóa

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

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

Tóm tắt

Chiến lược này dựa trên nhập cảnh ngẫu nhiên, thiết lập nhiều điểm dừng để kiểm soát rủi ro giao dịch đơn lẻ. Vì ngẫu nhiên mạnh có thể làm giảm xác suất phù hợp với đường cong, có thể giảm rủi ro giao dịch bằng cách tối ưu hóa tham số.

Mã nguồn chiến lược
/*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)