Chiến lược mua và bán chéo chỉ báo trung bình động nhanh


Ngày tạo: 2023-11-22 17:29:04 sửa đổi lần cuối: 2023-11-22 17:29:04
sao chép: 0 Số nhấp chuột: 617
1
tập trung vào
1621
Người theo dõi

Chiến lược mua và bán chéo chỉ báo trung bình động nhanh

Tổng quan

Chiến lược này sử dụng các đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm để tạo ra tín hiệu mua và bán. Chiến lược này kết hợp nhiều chỉ số như MACD, RSI để xác định xu hướng và có khả năng theo dõi xu hướng mạnh mẽ hơn.

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

Chiến lược này được đánh giá dựa trên một số chỉ số:

  1. Đường trung bình di chuyển nhanh và trung bình di chuyển chậm: Đường trung bình di chuyển nhanh trên đường trung bình di chuyển chậm là tín hiệu mua, đường trung bình di chuyển chậm dưới đường trung bình di chuyển nhanh là tín hiệu bán

  2. MACD: Giao thức đa đầu khi đường MACD cao hơn đường Signal và MACD thấp nhất tăng lên.

  3. RSI: RSI cao hơn 50 là tín hiệu đa đầu và thấp hơn 50 là tín hiệu trống đầu.

  4. Đường đo dao động (AO): khi đường 0 trên AO là tín hiệu mua, đường 0 dưới AO là tín hiệu bán.

  5. Ba đường trung bình di chuyển ở cấp độ: Đường trung bình di chuyển có chu kỳ ngắn hơn trên đường trung bình di chuyển có chu kỳ dài hơn là tín hiệu mua.

Chiến lược này tổng hợp nhiều chu kỳ thời gian và nhiều chỉ số, tạo ra logic phán quyết mua và bán. Khi nhiều chỉ số xuất hiện cùng một lúc, nó tạo ra chỉ thị mua và khi nhiều chỉ số xuất hiện cùng một lúc, nó tạo ra chỉ thị bán, để theo dõi xu hướng.

Phân tích lợi thế

Chiến lược này có một số lợi thế:

  1. Xác định kết hợp nhiều chỉ số, tránh tín hiệu sai, tăng độ chính xác phán đoán.

  2. Kết hợp nhiều phân tích theo thời gian, có thể xác định được xu hướng ở cấp độ lớn hơn.

  3. Các tham số chỉ số được tối ưu hóa, Parameters tuning, có lợi nhuận tốt hơn.

  4. Sử dụng lệnh dừng di chuyển để kiểm soát rủi ro và ngăn chặn tổn thất phát triển.

  5. Theo dõi xu hướng tự động hoạt động, không cần can thiệp của con người, giảm chi phí vận hành.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Có thể tạo ra nhiều tín hiệu giao dịch không hiệu quả trong tình huống chấn động. Có thể giảm tín hiệu không hiệu quả bằng cách tối ưu hóa các tham số chỉ số.

  2. Sự kiện bất ngờ có thể dẫn đến rút lui nhanh chóng. Có thể thiết lập dừng di động để kiểm soát tổn thất.

  3. Các quy tắc xác định tín hiệu đa không gian phức tạp hơn, và tối ưu hóa tham số cần có nhiều dữ liệu lịch sử để hỗ trợ.

  4. Cài đặt tracking stop không đúng có thể dẫn đến dừng quá sớm. Cần thử nghiệm lặp lại để xác định các tham số tối ưu.

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

Chiến lược này có thể được tối ưu hóa theo các hướng sau:

  1. Kiểm tra nhiều kết hợp các chỉ số để tìm kiếm tín hiệu giao dịch ổn định và chính xác hơn. Ví dụ: chỉ số tỷ lệ biến động, chỉ số OBV.

  2. Tối ưu hóa tham số chỉ số, giảm số lần giao dịch không hiệu quả. Sử dụng học máy và thuật toán di truyền để tự động tìm tham số ưu tiên.

  3. Tăng kỹ thuật tích hợp mô hình, tích hợp nhiều kết quả phán đoán mô hình độc lập hơn.

  4. Nhập ở tần số cao, thoát ở tần số thấp. Giảm nguy cơ bị mắc kẹt.

  5. Thêm mô-đun kiểm soát gió định lượng, kiểm soát chặt chẽ tỷ lệ dừng một lần, tỷ lệ rút tối đa, v.v.

Tóm tắt

Chiến lược đa không gian chéo hai chỉ số đường trung bình di chuyển nhanh tạo ra tín hiệu giao dịch bằng cách chéo đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm và kết hợp nhiều chỉ số để xác định hướng xu hướng, theo dõi xu hướng tự động. Chiến lược này có nhiều không gian tối ưu hóa, có thể đạt được hiệu quả chiến lược tốt hơn bằng cách giới thiệu nhiều chỉ số, điều chỉnh tham số và tích hợp mô hình.

Mã nguồn chiến lược
/*backtest
start: 2023-10-22 00:00:00
end: 2023-11-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('SteffVans', shorttitle='SteffVans strategy', overlay=true, process_orders_on_close = true)

// Input settings
macd_fast_length = input(12)
macd_slow_length = input(26)
macd_signal_length = input(9)

// Calculate MACD values
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
mg = ta.lowest(signal_line, 30) >= -0

// RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1)
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
RSI = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))


//  AO
AO = ta.sma((high + low) / 2, 5) - ta.sma((high + low) / 2, 34)
crossaosell = AO < AO[1] and AO[1] < AO[2] and AO[2] > AO[3]  and ta.lowest(low,3)

// Uptrend sma
len1 = input.int(5, minval=1)
len2 = input.int(10, minval=1)
len3 = input.int(20, minval=1)
src = input(close)

out1 = ta.sma(src, len1)
out2 = ta.sma(src, len2)
out3 = ta.sma(src, len3)



// Timeframe 
macdl60 = request.security(syminfo.tickerid, "60", signal_line,lookahead = barmerge.lookahead_on)
ao = request.security(syminfo.tickerid, "60", AO,lookahead = barmerge.lookahead_on)
rsi = request.security(syminfo.tickerid, "60", RSI,lookahead = barmerge.lookahead_on)
good = request.security(syminfo.tickerid, "60", mg,lookahead = barmerge.lookahead_on)
bad = request.security(syminfo.tickerid, "60", crossaosell,lookahead = barmerge.lookahead_on)

ma1 = request.security(syminfo.tickerid, "D", out1,lookahead = barmerge.lookahead_on)
ma2 = request.security(syminfo.tickerid, "D", out2, lookahead = barmerge.lookahead_on)
ma3 = request.security(syminfo.tickerid, "D", out3, lookahead = barmerge.lookahead_on)






// Kriteria BUY and SELL
uptrend1 =  request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) > ma1 and ma1 > ma3 and ma2 > ma3
uptrend2 = ta.lowest(ma1,12) > ta.lowest(ma3,12) and ta.lowest(ma2,12) > ta.lowest(ma3,12) 


 

// Triger BUY and SELL 
cross1 = ao > ao[1] and ao[1] < ao[2] and ao > 0 and good and rsi >= 60 and uptrend1
cross2 = ao > 0 and ao[1] < 0 and good and rsi >=50 and uptrend1
cross3 =  ao > 0 and ao[1] < 0 and not good and uptrend2 and uptrend1
cross4 =  ao > ao[1] and ao[1] > ao[2] and ao[2] < ao[3] and ao[3] < ao[4]  and not good and uptrend2 and uptrend1

s1 = ao < ao[1] and ao[1] < ao[2] and ao[2] < ao[3] and ao > 0 and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1
s2 =  ao < 0 and ao < ao[2] and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1 

// Variabel Buy dan Sell
buySignal = false
sellSignal = false

// Syarat masuk Buy
buyCondition =  cross1 or cross2 or cross3 or cross4
if buyCondition
    buySignal := true

// Syarat masuk Sell
sellCondition = s1 or s2
if sellCondition
    sellSignal := true

// Reset sinyal jika ada sinyal berulang
if buySignal and sellSignal
    sellSignal := false
if sellSignal and buySignal
    buySignal := false

// Logika perdagangan
if buySignal
    strategy.entry("Buy", strategy.long, comment = "BUY")
if sellSignal
    strategy.close("Buy")


plotshape(cross1,title = "Stefkuy1", style = shape.labelup, location = location.belowbar, color = color.green,text = "1", textcolor = color.white,size = size.small)
plotshape(cross2,title = "Stefkuy2", style = shape.labelup, location = location.belowbar, color = color.green, text = "2", textcolor= color.white, size = size.small)
plotshape(cross3,title = "StefVan1", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "3", textcolor= color.white,size = size.small)
plotshape(cross4,title = "StefVan2", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "4", textcolor= color.white,size = size.small)