Strategi Perdagangan Skor Multi Indikator

Penulis:ChaoZhang, Tanggal: 2023-11-07 16:16:45
Tag:

img

Gambaran umum

Strategi trading multi indicator scoring mengintegrasikan skor indikator teknis untuk mengidentifikasi arah tren dan kekuatan untuk perdagangan otomatis. Ini mempertimbangkan sekelompok indikator termasuk Ichimoku Cloud, HMA, RSI, Stoch, CCI dan MACD. Setiap hasil indikator diberi skor dan skor keseluruhan dihitung dengan rata-rata semua skor indikator. Ketika skor keseluruhan di atas ambang batas, pergi panjang. Ketika di bawah ambang batas, pergi pendek.

Logika Strategi

Strategi ini terdiri dari beberapa bagian:

  1. Menghitung sekelompok indikator termasuk Ichimoku Cloud, Hull Moving Average, Relative Strength Index, Stochastic, Commodity Channel Index dan Moving Average Convergence Divergence.

  2. Beri skor positif untuk sinyal bullish dan skor negatif untuk sinyal bearish.

  3. Jumlah dan rata-rata semua indikator skor untuk mendapatkan skor keseluruhan.

  4. Bandingkan skor keseluruhan dengan ambang batas yang telah ditetapkan untuk menentukan arah tren secara keseluruhan.

  5. Posisi terbuka berdasarkan penilaian. panjang ketika bullish, pendek ketika bearish.

  6. Atur stop loss dan ambil keuntungan berdasarkan ATR.

Strategi ini memanfaatkan sepenuhnya keuntungan dari beberapa indikator untuk menentukan tren pasar. Dibandingkan dengan indikator tunggal, ini membantu menyaring beberapa sinyal palsu dan meningkatkan keandalan.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Beberapa indikator yang dikombinasikan meningkatkan keakuratan sinyal. indikator tunggal rentan terhadap sinyal palsu. skor dan rata-rata membantu menyaring sinyal palsu secara efektif.

  2. Menggunakan indikator kekuatan untuk mengidentifikasi tren dan momentum.

  3. Perdagangan otomatis menghindari dampak emosional dan mengikuti sinyal strategi secara ketat.

  4. Menggunakan ATR untuk stop loss dan mengambil keuntungan membantu manajemen risiko.

  5. Parameter dan ambang skor dapat dioptimalkan untuk produk yang berbeda.

  6. Logika yang sederhana dan jelas, mudah dimengerti dan dimodifikasi.

Analisis Risiko

Risiko dari strategi ini:

  1. Beberapa indikator yang dikombinasikan tidak selalu lebih baik dari satu.

  2. Skor rata-rata tidak dapat sepenuhnya menghindari kerugian ketika indikator memberikan sinyal yang salah.

  3. Stop ATR mungkin terlalu dekat atau terlalu longgar.

  4. Hindari overfit dari optimasi yang berlebihan.

  5. Frekuensi perdagangan yang tinggi meningkatkan biaya transaksi yang juga mempengaruhi pengembalian akhir.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Uji lebih banyak kombinasi indikator untuk menemukan pilihan optimal untuk produk tertentu.

  2. Menyesuaikan indikator skor bobot, mengoptimalkan algoritma skor.

  3. Parameter ATR dinamis untuk menyesuaikan volatilitas pasar.

  4. Tambahkan filter perdagangan untuk mengurangi frekuensi perdagangan yang tidak perlu, seperti filter tren atau filter volume.

  5. Optimalkan langkah demi langkah untuk menemukan rentang parameter, kemudian optimalkan acak / grid untuk set parameter terbaik.

  6. Uji ketahanan pada beberapa produk dan jangka waktu untuk menghindari overfit.

  7. Gabungkan dengan strategi perdagangan yang efektif lainnya untuk portofolio.

Kesimpulan

Strategi multi indicator scoring meningkatkan akurasi sinyal dan keandalan melalui rata-rata skor indikator. Dengan ruang optimasi yang besar, dapat dioptimalkan untuk hasil yang baik pada produk yang berbeda. Risiko overfitting membutuhkan perhatian untuk menjaga optimasi parameter dan pengujian strategi ilmiah. Sebagai ide strategi dengan arah optimasi yang luas, itu layak penelitian dan aplikasi lebih lanjut.


/*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))

Lebih banyak