Strategi perdagangan penarafan pelbagai penunjuk mengintegrasikan penarafan penunjuk teknikal untuk mengenal pasti arah trend dan kekuatan untuk perdagangan automatik. Ia mempertimbangkan sekumpulan penunjuk termasuk Ichimoku Cloud, HMA, RSI, Stoch, CCI dan MACD. Setiap hasil penunjuk dinilai dan skor keseluruhan dikira dengan menjimatkan semua skor penunjuk. Apabila skor keseluruhan di atas ambang, pergi panjang. Apabila di bawah ambang, pergi pendek.
Strategi ini terdiri daripada beberapa bahagian:
Mengira sekumpulan penunjuk termasuk Ichimoku Cloud, Hull Moving Average, Indeks Kekuatan Relatif, Stochastic, Indeks Saluran Komoditi dan Moving Average Convergence Divergence.
Beri skor positif untuk isyarat bullish dan skor negatif untuk isyarat bearish.
Jumlah dan purata semua penunjuk
Bandingkan skor keseluruhan dengan ambang yang telah ditetapkan untuk menentukan arah trend keseluruhan.
Posisi terbuka berdasarkan penilaian, panjang apabila menaik, pendek apabila menurun.
Tetapkan stop loss dan ambil keuntungan berdasarkan ATR.
Strategi ini memanfaatkan sepenuhnya kelebihan pelbagai penunjuk untuk menentukan trend pasaran. berbanding dengan satu penunjuk, ia membantu menapis beberapa isyarat palsu dan meningkatkan kebolehpercayaan.
Kelebihan strategi ini termasuk:
Banyak penunjuk yang digabungkan meningkatkan ketepatan isyarat. Penunjuk tunggal terdedah kepada isyarat palsu. Skor dan purata membantu menapis isyarat palsu dengan berkesan.
Menggunakan indikator
Perdagangan automatik mengelakkan kesan emosi dan mengikuti isyarat strategi dengan ketat.
Menggunakan ATR untuk menghentikan kerugian dan mengambil keuntungan membantu pengurusan risiko.
Parameter dan ambang skor boleh dioptimumkan untuk produk yang berbeza.
Logik yang mudah dan jelas, mudah difahami dan diubah.
Risiko strategi ini:
Banyak penunjuk digabungkan tidak semestinya lebih baik daripada satu. perlu ujian berulang untuk mencari parameter optimum.
Skor purata tidak dapat sepenuhnya mengelakkan kerugian apabila penunjuk memberikan isyarat yang salah.
Hentian ATR mungkin terlalu dekat atau terlalu longgar. Perlu penyesuaian berdasarkan sifat produk.
Elakkan pemasangan berlebihan dari pengoptimuman yang berlebihan. Uji ketahanan pada produk dan tempoh masa yang berbeza.
Frekuensi perdagangan yang tinggi meningkatkan kos transaksi yang juga mempengaruhi pulangan akhir.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Uji lebih banyak kombinasi penunjuk untuk mencari pilihan optimum untuk produk tertentu.
Sesuaikan berat skor penunjuk, optimumkan algoritma skor.
Parameter ATR dinamik untuk menyesuaikan lebih baik dengan turun naik pasaran.
Tambah penapis perdagangan untuk mengurangkan kekerapan perdagangan yang tidak perlu, seperti penapis trend atau penapis jumlah.
Optimumkan langkah demi langkah untuk mencari julat parameter, kemudian optimumkan rawak / grid untuk set parameter terbaik.
Uji ketahanan pada pelbagai produk dan jangka masa untuk mengelakkan pemasangan berlebihan.
Gabungkan dengan strategi perdagangan lain yang berkesan untuk portfolio.
Strategi penilaian pelbagai penunjuk meningkatkan ketepatan dan kebolehpercayaan isyarat melalui purata skor penunjuk. Dengan ruang pengoptimuman yang besar, ia boleh dioptimumkan untuk hasil yang baik pada produk yang berbeza. Risiko terlalu banyak memerlukan perhatian untuk memastikan pengoptimuman parameter dan ujian strategi saintifik. Sebagai idea strategi dengan arah pengoptimuman yang luas, ia layak penyelidikan dan penerapan 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))