Chiến lược giao dịch chấm điểm đa chỉ số


Ngày tạo: 2023-11-07 16:16:45 sửa đổi lần cuối: 2023-11-07 16:16:45
sao chép: 0 Số nhấp chuột: 730
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch chấm điểm đa chỉ số

Tổng quan

Chiến lược giao dịch đánh giá đa chỉ số thực hiện giao dịch tự động bằng cách tích hợp điểm chỉ số kỹ thuật, xác định hướng và cường độ của xu hướng. Chiến lược này xem xét tổng hợp một nhóm chỉ số bao gồm đám mây Ichimoku, HMA, RSI, Stoch, CCI và MACD.

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

Chiến lược này bao gồm nhiều phần:

  1. Một tập hợp các chỉ số được tính, bao gồm đám mây Ichimoku, trung bình di chuyển Hull, chỉ số tương đối mạnh yếu, chỉ số ngẫu nhiên, chỉ số kênh hàng hóa và độ nhạy trung bình di chuyển.

  2. Mỗi chỉ số được đánh giá. Khi chỉ số hiển thị tín hiệu đa đầu, điểm tích cực được đưa ra và khi tín hiệu đầu trống, điểm âm được đưa ra.

  3. Đánh giá toàn bộ các chỉ số được cộng với trung bình để có được một điểm tổng hợp.

  4. So sánh bảng xếp hạng tổng hợp với ngưỡng được thiết lập trước để xác định hướng xu hướng tổng thể. Đánh giá cao hơn ngưỡng và thấp hơn ngưỡng.

  5. Đánh giá các kết quả của việc mở đầu tư.

  6. Lệnh dừng lỗ được thiết lập thông qua chỉ số ATR.

Chiến lược này tận dụng lợi thế của nhiều chỉ số để đánh giá tổng hợp xu hướng của thị trường. So với chỉ số đơn lẻ, nó có thể lọc ra một số tín hiệu sai và tăng độ tin cậy của tín hiệu.

Phân tích lợi thế

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

  1. Xác định tổng hợp nhiều chỉ số, tăng độ chính xác của tín hiệu. Chỉ số đơn dễ bị đánh giá sai, chiến lược này có thể lọc hiệu quả các tín hiệu sai bằng cách xếp hạng trung bình.

  2. Sử dụng lợi thế của chỉ số để xác định xu hướng và sức mạnh hiện tại. Ví dụ, đám mây Ichimoku đánh giá xu hướng lớn, Stoch đánh giá quá mua quá bán.

  3. Giao dịch tự động tránh ảnh hưởng cảm xúc, thực hiện nghiêm ngặt các tín hiệu chiến lược.

  4. Sử dụng ATR để thiết lập lợi thế dừng lỗ, có lợi cho việc kiểm soát rủi ro.

  5. Có thể điều chỉnh tham số cho các giống khác nhau. Các tham số chỉ số và ngưỡng xếp hạng có thể được tối ưu hóa.

  6. Lập luận của chiến lược đơn giản, rõ ràng, dễ hiểu và sửa đổi.

Phân tích rủi ro

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

  1. Sự kết hợp nhiều chỉ số không nhất thiết là tốt hơn chỉ số đơn lẻ, cần thử nghiệm nhiều lần để tìm tham số tối ưu.

  2. Khi chỉ số phát ra tín hiệu sai, điểm trung bình cũng không thể hoàn toàn tránh mất mát.

  3. ATR dừng có thể quá gần hoặc quá thoải mái, cần điều chỉnh theo đặc điểm của giống.

  4. Cần tránh sự phù hợp với đường cong dẫn đến tối ưu hóa quá mức. Sự ổn định của chiến lược nên được thử nghiệm trong các giống và khoảng thời gian khác nhau.

  5. Tỷ lệ giao dịch có thể quá cao và chi phí giao dịch có thể ảnh hưởng đến lợi nhuận cuối cùng.

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. Kiểm tra nhiều kết hợp của các chỉ số để tìm ra lựa chọn tốt nhất cho một giống cụ thể.

  2. Điều chỉnh trọng lượng của mỗi chỉ số, tối ưu hóa thuật toán xếp hạng.

  3. Điều chỉnh động các tham số ATR để làm cho lệnh dừng lỗ phù hợp hơn với biến động của thị trường.

  4. Thêm các điều kiện lọc giao dịch, giảm tần suất giao dịch không cần thiết. Ví dụ như lọc xu hướng, lọc khối lượng giao dịch, v.v.

  5. Tối ưu hóa từng bước để tìm các tham số tối ưu hóa trong khoảng, sau đó tối ưu hóa ngẫu nhiên / lưới để tìm các tham số kết hợp tốt nhất.

  6. Kiểm tra sự ổn định của chiến lược trong nhiều khung thời gian, tránh tối ưu hóa quá mức.

  7. Kết hợp các chiến lược giao dịch hiệu quả khác để tạo ra một danh mục các chiến lược.

Tóm tắt

Chiến lược giao dịch đánh giá đa chỉ số, thông qua tư duy xếp hạng tìm kiếm trung bình, tăng độ chính xác và độ tin cậy của phán đoán tín hiệu. Chiến lược này có nhiều tham số điều chỉnh, có thể được tối ưu hóa cho các giống khác nhau để có hiệu quả tốt hơn. Tuy nhiên, cũng cần phải chú ý đến rủi ro tối ưu hóa, duy trì tính khoa học của tối ưu hóa tham số và thử nghiệm chiến lược.

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

//@version=4
strategy(title="Ichi HMA RSI Stoch CCI MACD Technicals Rating Strategy",shorttitle="TRSv420",overlay=true,default_qty_type=strategy.percent_of_equity,default_qty_value=50,commission_type=strategy.commission.percent,commission_value=0.05)
res = input("", title="Indicator Timeframe", type=input.resolution)
Period = input(defval = 14, title = "Period Length", minval = 2)
MinSignalStrength= input(title="Minimum Signal Strength", type=input.float, defval=1.1, minval=0.00, maxval=2.00, step=0.1)
Price = input(defval=open, title="Price Source", type=input.source)
Use_Only_Buy= input(false, title = "Use ONLY BUY mode",type=input.bool)
Use_Only_Sell= input(false, title = "Use ONLY SELL mode",type=input.bool)
Use_ATR_SL_TP= input(true, title = "Use ATR for TP & SL",type=input.bool)
Use_Ichimoku= input(true, title = "Use Ichimoku",type=input.bool)
Use_HMA= input(true, title = "Use Hull MA",type=input.bool)
Use_RSI= input(true, title = "Use RSI",type=input.bool)
Use_Stoch= input(true, title = "Use Stoch",type=input.bool)
Use_CCI= input(true, title = "Use CCI",type=input.bool)
Use_MACD= input(true, title = "Use MacD",type=input.bool)
// Ichimoku Cloud
donchian(len) => avg(lowest(len), highest(len))
ichimoku_cloud() =>
    conversionLine = donchian(9)
    baseLine = donchian(26)
    leadLine1 = avg(conversionLine, baseLine)
    leadLine2 = donchian(52)
    [conversionLine, baseLine, leadLine1, leadLine2]
[IC_CLine, IC_BLine, IC_Lead1, IC_Lead2] = ichimoku_cloud()    
calcRatingMA(ma, src) => na(ma) or na(src) ? na : (ma == src ? 0 : ( ma < src ? 1 : -1 ))
calcRating(buy, sell) => buy ? 1 : ( sell ? -1 : 0 )
calcRatingAll() =>
    //============== HMA =================
    HMA10 = hma(Price, Period)
    HMA20 = hma(Price, 20)
    HMA30 = hma(Price, 30)
    HMA50 = hma(Price, 50)
    HMA100 = hma(Price, 100)
    HMA200 = hma(Price, 200)
    // Relative Strength Index, RSI
    RSI = rsi(Price,14)
    // Stochastic
    lengthStoch = 14
    smoothKStoch = 3
    smoothDStoch = 3
    kStoch = sma(stoch(Price, high, low, lengthStoch), smoothKStoch)
    dStoch = sma(kStoch, smoothDStoch)
    // Commodity Channel Index, CCI
    CCI = cci(Price, 20)
    // Moving Average Convergence/Divergence, MACD
    [macdMACD, signalMACD, _] = macd(Price, 12, 26, 9)
    // -------------------------------------------
    PriceAvg = hma(Price, Period)
    DownTrend = Price < PriceAvg
    UpTrend = Price > PriceAvg
    float ratingMA = 0
    float ratingMAC = 0
    if(Use_HMA)
        if not na(HMA10)
            ratingMA := ratingMA + calcRatingMA(HMA10, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA20)
            ratingMA := ratingMA + calcRatingMA(HMA20, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA30)
            ratingMA := ratingMA + calcRatingMA(HMA30, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA50)
            ratingMA := ratingMA + calcRatingMA(HMA50, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA100)
            ratingMA := ratingMA + calcRatingMA(HMA100, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA200)
            ratingMA := ratingMA + calcRatingMA(HMA200, Price)
            ratingMAC := ratingMAC + 1
    if(Use_Ichimoku)
        float ratingIC = na
        if not (na(IC_Lead1) or na(IC_Lead2) or na(Price) or na(Price[1]) or na(IC_BLine) or na(IC_CLine))
            ratingIC := calcRating(
             IC_Lead1 > IC_Lead2 and Price > IC_Lead1 and Price < IC_BLine and Price[1] < IC_CLine and Price > IC_CLine,
             IC_Lead2 > IC_Lead1 and Price < IC_Lead2 and Price > IC_BLine and Price[1] > IC_CLine and Price < IC_CLine)
        if not na(ratingIC)
            ratingMA := ratingMA + ratingIC
            ratingMAC := ratingMAC + 1
    ratingMA := ratingMAC > 0 ? ratingMA / ratingMAC : na
    float ratingOther = 0
    float ratingOtherC = 0
    if(Use_RSI)
        ratingRSI = RSI
        if not(na(ratingRSI) or na(ratingRSI[1]))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(ratingRSI < 30 and ratingRSI[1] < ratingRSI, ratingRSI > 70 and ratingRSI[1] > ratingRSI)
    if(Use_Stoch)
        if not(na(kStoch) or na(dStoch) or na(kStoch[1]) or na(dStoch[1]))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(kStoch < 20 and dStoch < 20 and kStoch > dStoch and kStoch[1] < dStoch[1], kStoch > 80 and dStoch > 80 and kStoch < dStoch and kStoch[1] > dStoch[1])
    if(Use_CCI)
        ratingCCI = CCI
        if not(na(ratingCCI) or na(ratingCCI[1]))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(ratingCCI < -100 and ratingCCI > ratingCCI[1], ratingCCI > 100 and ratingCCI < ratingCCI[1])
    if(Use_MACD)
        if not(na(macdMACD) or na(signalMACD))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(macdMACD > signalMACD, macdMACD < signalMACD)
    ratingOther := ratingOtherC > 0 ? ratingOther / ratingOtherC : na
    float ratingTotal = 0
    float ratingTotalC = 0
    if not na(ratingMA)
        ratingTotal := ratingTotal + ratingMA
        ratingTotalC := ratingTotalC + 1
        ratingTotal := ratingTotal + ratingOther
        ratingTotalC := ratingTotalC + 1
    ratingTotal := ratingTotalC > 0 ? ratingTotal / ratingTotalC : na
    [ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC]
[ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC]  = security(syminfo.tickerid, res, calcRatingAll(), lookahead=false)
tradeSignal = ratingTotal+ratingOther+ratingMA
dynSLpoints(factor) => factor * atr(14) / syminfo.mintick
if not (Use_Only_Sell)
    strategy.entry("long", strategy.long, when = tradeSignal > MinSignalStrength)
if not (Use_Only_Buy)    
    strategy.entry("short", strategy.short, when = tradeSignal < -MinSignalStrength)
if(Use_ATR_SL_TP)
    strategy.exit("sl/tp", loss = dynSLpoints(3), trail_points = dynSLpoints(5), trail_offset = dynSLpoints(2))