Strategi Perdagangan Pemarkahan Pelbagai Penunjuk


Tarikh penciptaan: 2023-11-07 16:16:45 Akhirnya diubah suai: 2023-11-07 16:16:45
Salin: 0 Bilangan klik: 730
1
fokus pada
1617
Pengikut

Strategi Perdagangan Pemarkahan Pelbagai Penunjuk

Gambaran keseluruhan

Strategi perdagangan berskala multi-indikator mewujudkan perdagangan automatik dengan mengintegrasikan skor indikator teknikal, mengenal pasti arah dan kekuatan trend. Strategi ini mempertimbangkan sekumpulan indikator secara menyeluruh, termasuk Awan Ichimoku, HMA, RSI, Stoch, CCI dan MACD. Berdasarkan hasil setiap indikator, nilai untuknya, dan kemudian menggabungkan penilaian semua indikator, membentuk skor keseluruhan.

Prinsip Strategi

Strategi ini terdiri daripada beberapa bahagian:

  1. Satu set petunjuk dikira, termasuk Awan Ichimoku, Purata Bergerak Hull, Indeks Kekuatan Relatif, Indeks Random, Indeks Saluran Komoditi dan Sensitiviti Purata Bergerak.

  2. Setiap indikator diberi nilai. Apabila indikator menunjukkan isyarat multihead, nilai positif diberikan, dan apabila isyarat kosong, nilai negatif diberikan.

  3. Mengambil semua penunjuk nilai dan rata-rata, anda akan mendapat nilai komposit.

  4. Perbandingan penilaian komprehensif dengan had yang ditetapkan untuk menentukan arah trend keseluruhan. Peringkat lebih tinggi daripada had dan lebih rendah daripada had.

  5. Bergantung kepada keputusan keputusan, anda boleh membuka kedudukan.

  6. Penangguhan kerugian ditetapkan melalui penunjuk ATR.

Strategi ini memanfaatkan kelebihan pelbagai petunjuk untuk menilai arah trend pasaran secara menyeluruh. Ia dapat menyaring beberapa isyarat palsu dan meningkatkan kebolehpercayaan isyarat berbanding dengan satu petunjuk.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Keputusan komprehensif pelbagai petunjuk, meningkatkan ketepatan isyarat. Satu petunjuk mudah membuat kesalahan, strategi ini dapat menyaring isyarat palsu dengan cara menilai rata-rata.

  2. Menggunakan kelebihan indikator, mengenal pasti trend dan kekuatan semasa. Sebagai contoh, Awan Ichimoku menilai trend besar, Stoch menilai overbought dan oversold.

  3. Perdagangan automatik mengelakkan kesan emosi dan mematuhi isyarat strategi.

  4. Menggunakan ATR untuk menetapkan Stop Loss Advantage, yang membantu mengawal risiko.

  5. Parameter boleh disesuaikan untuk pelbagai jenis. Parameter penunjuk dan nilai paras boleh dioptimumkan.

  6. Logik strategi mudah difahami dan diubah suai.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Kombinasi pelbagai indikator tidak semestinya lebih baik daripada satu indikator, perlu diuji berulang kali untuk mencari parameter terbaik.

  2. Penunjuk memberi isyarat yang salah, dan purata penilaian tidak dapat sepenuhnya mengelakkan kerugian.

  3. Hentikan ATR mungkin terlalu dekat atau terlalu longgar, perlu disesuaikan dengan ciri-ciri baka.

  4. Persamaan kurva yang disebabkan oleh pengoptimuman berlebihan perlu dielakkan. Ketahanan strategi harus diuji dalam pelbagai jenis dan tempoh masa.

  5. Frekuensi dagangan mungkin terlalu tinggi, dan kos dagangan akan menjejaskan hasil akhir.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Uji kombinasi lebih banyak penunjuk untuk mencari penunjuk yang paling sesuai untuk jenis tertentu.

  2. Menyesuaikan berat penilaian untuk setiap indikator, mengoptimumkan algoritma penilaian.

  3. Mengubah parameter ATR secara dinamik untuk menjadikan penangguhan kerugian lebih sesuai dengan turun naik pasaran.

  4. Menambah syarat penapisan dagangan untuk mengurangkan frekuensi dagangan yang tidak perlu. Contohnya penapisan trend, penapisan jumlah transaksi, dan sebagainya.

  5. Mengoptimumkan langkah demi langkah untuk mencari julat optimum parameter, kemudian mengoptimumkan secara rawak / grid untuk mencari kombinasi parameter terbaik.

  6. Uji kebolehan strategi dalam pelbagai jenis dan jangka masa, dan elakkan pengoptimuman berlebihan.

  7. Menggabungkan strategi perdagangan lain yang berkesan untuk membentuk strategi portfolio.

ringkaskan

Strategi perdagangan penilaian pelbagai indikator meningkatkan ketepatan dan kebolehpercayaan penilaian isyarat dengan menilai pendekatan rata-rata. Strategi ini mempunyai ruang penyesuaian parameter yang luas dan dapat dioptimumkan untuk varieti yang berbeza. Tetapi juga perlu berhati-hati dengan risiko pengoptimuman berlebihan, menjaga pengoptimuman parameter dan pengujian strategi secara saintifik.

Kod 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))