Strategi Perdagangan Penilaian Multi-Indikator


Tanggal Pembuatan: 2023-11-07 16:16:45 Akhirnya memodifikasi: 2023-11-07 16:16:45
menyalin: 0 Jumlah klik: 730
1
fokus pada
1617
Pengikut

Strategi Perdagangan Penilaian Multi-Indikator

Ringkasan

Strategi perdagangan skor multi-indikator memungkinkan perdagangan otomatis dengan mengintegrasikan skor indikator teknis, mengidentifikasi arah dan kekuatan tren. Strategi ini secara komprehensif mempertimbangkan serangkaian indikator, termasuk Awan Ichimoku, HMA, RSI, Stoch, CCI, dan MACD. Berdasarkan hasil dari masing-masing indikator, nilai untuk mereka, dan kemudian menggabungkan nilai dari semua indikator, membentuk skor keseluruhan.

Prinsip Strategi

Strategi ini terdiri dari beberapa bagian:

  1. Sebuah set indikator yang dihitung, termasuk Ichimoku Cloud, Hull Moving Average, Relative Strength Index, Random Indicator, Commodity Channel Index, dan Sensitivitas Moving Average.

  2. Setiap indikator diberi nilai. Jika indikator menunjukkan sinyal multihead, nilai positif diberikan, dan jika sinyal kosong, nilai negatif diberikan.

  3. Dengan menambahkan dan rata-rata semua nilai indikator, Anda mendapatkan nilai komposit.

  4. Perbandingan skor komprehensif dengan nilai ambang yang telah ditetapkan untuk menentukan arah tren keseluruhan. Nilai lebih tinggi jika lebih tinggi dari nilai ambang dan kurang jika lebih rendah dari nilai ambang.

  5. Jika Anda memiliki banyak uang, Anda akan memiliki lebih banyak uang, dan jika Anda memiliki sedikit uang, Anda akan memiliki lebih sedikit uang.

  6. Stop loss ditetapkan melalui indikator ATR.

Strategi ini memanfaatkan keunggulan dari berbagai indikator untuk menilai arah tren pasar secara menyeluruh. Dibandingkan dengan indikator tunggal, dapat memfilter beberapa sinyal palsu dan meningkatkan keandalan sinyal.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Multi-indikator penilaian komprehensif, meningkatkan akurasi sinyal. Indikator tunggal mudah untuk kesalahan penilaian, strategi ini dengan cara menilai rata-rata, dapat secara efektif memfilter sinyal palsu.

  2. Menggunakan keunggulan indikator, mengidentifikasi tren dan kekuatan saat ini. Misalnya, Ichimoku Cloud menilai tren besar, Stoch menilai overbought dan oversold.

  3. Perdagangan otomatis menghindari pengaruh emosi dan menerapkan sinyal strategi secara ketat.

  4. Menggunakan ATR untuk mengatur Stop Loss Advantage, yang membantu dalam pengendalian risiko.

  5. Parameter dapat disesuaikan untuk varietas yang berbeda. Parameter indikator dan threshold penilaian dapat dioptimalkan.

  6. Logika strategi sederhana dan jelas, mudah dipahami dan dimodifikasi.

Analisis risiko

Strategi ini juga memiliki risiko sebagai berikut:

  1. Kombinasi multi-indikator tidak selalu lebih baik dari satu indikator, perlu pengujian berulang untuk menemukan parameter terbaik.

  2. Indikator yang salah juga tidak dapat menghindari kerugian.

  3. ATR bisa terlalu dekat atau terlalu longgar dan perlu disesuaikan dengan karakteristik varietas.

  4. Ada kebutuhan untuk menghindari over-optimisasi yang menyebabkan fit-the-curve. Strategi harus diuji untuk stabilitas pada varietas dan periode waktu yang berbeda.

  5. Frekuensi transaksi mungkin terlalu tinggi, dan biaya transaksi dapat mempengaruhi pendapatan akhir.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Tes lebih banyak kombinasi indikator untuk menemukan pilihan indikator yang optimal untuk varietas tertentu.

  2. Mengatur bobot masing-masing indikator dan mengoptimalkan algoritma penilaian.

  3. Mengubah parameter ATR secara dinamis agar stop loss lebih sesuai dengan fluktuasi pasar

  4. Menambahkan kondisi pemfilteran transaksi untuk mengurangi frekuensi transaksi yang tidak perlu. Misalnya, pemfilteran tren, pemfilteran volume transaksi, dan sebagainya.

  5. Optimalkan langkah demi langkah untuk menemukan interval optimalisasi parameter, lalu optimalkan acak / grid untuk menemukan kombinasi parameter terbaik.

  6. Uji keandalan strategi dalam beberapa varietas dan beberapa frame waktu, hindari optimasi berlebihan.

  7. Menggabungkan strategi perdagangan yang efektif dengan strategi lain untuk membentuk portofolio.

Meringkaskan

Strategi perdagangan dengan skor multi-indikator meningkatkan akurasi dan keandalan penilaian sinyal dengan cara menilai rata-rata. Strategi ini memiliki ruang untuk menyesuaikan parameter dan dapat dioptimalkan untuk varietas yang berbeda. Namun, perlu juga memperhatikan risiko optimasi yang berlebihan, menjaga keilmuan optimasi parameter dan pengujian strategi.

Kode Sumber Strategi
/*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))