Il s'agit d'une stratégie de trading personnalisée qui combine des indicateurs de dynamique et le filtrage des entités de chandeliers. Il utilise de manière complète trois indicateurs techniques - indice de dynamique stochastique, RSI rapide et filtrage des entités de chandeliers pour mettre en œuvre une stratégie basée sur la percée de l'élan tout en tenant compte des conditions de surachat et de survente.
La stratégie utilise les trois indicateurs suivants pour le jugement des signaux de négociation:
Indice de dynamique stochastique (SMI): Il combine l'espacement entre les entités de chandelier et la position relative du prix de clôture pour juger de la force ou de la faiblesse de la dynamique des prix. Il génère un signal d'achat lorsque SMI traverse au-dessus de la ligne limite et un signal de vente lorsqu'il traverse en dessous de la ligne limite.
Rapide RSI (ligne de 7 jours): Il juge les conditions de surachat et de survente des prix.
Filtre de l'entité du chandelier: Calcule la taille moyenne de l'entité du chandelier au cours des 10 derniers jours.
La stratégie juge d'abord les signaux du SMI et du RSI. Si l'une ou l'autre des exigences du signal d'indicateur est remplie, il faut combiner le filtre d'entité du chandelier pour déterminer si ce signal est valide et générer un signal de trading s'il est valide.
La stratégie présente les avantages suivants:
Le jugement est plus précis et plus fiable avec la combinaison de plusieurs indicateurs.
L'ajout du filtre d'entité de chandelier évite les signaux non valides.
En combinant les conditions de surachat/survente, il est plus facile de capter les signaux aux points d'inversion de tendance.
Augmentation des opportunités de profit avec des opérations à long/à court à double sens.
La négociation de positions partielles permet d'éviter des pertes uniques excessives.
La stratégie comporte également certains risques:
L'optimisation des paramètres peut réduire les faux signaux.
Le trading de positions partielles ne peut pas exploiter pleinement les opportunités de tendance dans chaque direction.
En tant qu'indicateur principal, le SMI est sensible aux paramètres.
Le commerce fréquent avec une stratégie bidirectionnelle augmente les coûts de transaction.
La stratégie peut être encore optimisée dans les aspects suivants:
Optimiser les paramètres pour le SMI et le RSI afin de trouver les meilleures combinaisons de paramètres.
Améliorer les mécanismes de dimensionnement des positions et de gestion des positions afin d'obtenir des rendements plus élevés pendant les tendances.
Ajouter des stratégies de stop loss pour réduire le risque de perte unique.
Combiner plus d'indicateurs pour juger de la fiabilité du signal et réduire les faux signaux.
Adopter des contrats efficaces pour réduire les coûts de transaction.
La stratégie utilise de manière complète les indicateurs de filtrage des entités SMI, RSI rapide et chandelier pour mettre en œuvre une stratégie de trading personnalisée basée sur l'élan, suracheté / survendu. Elle présente des avantages tels qu'un jugement précis, l'identification de signaux valides, une combinaison de conditions de surachat / survente et de négociation bidirectionnelle, mais aussi des risques tels que la sensibilité des paramètres, l'incapacité de capitaliser pleinement les tendances et les opérations fréquentes. En optimisant continuellement les paramètres, en augmentant la taille des positions et la gestion des pertes d'arrêt, en réduisant les faux signaux, etc., la stratégie peut atteindre de meilleures performances commerciales.
/*backtest start: 2023-10-23 00:00:00 end: 2023-11-22 00:00:00 period: 6h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Stochastic Strategy v1.2", shorttitle = "Stochastic str 1.2", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(false, defval = false, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") usesmi = input(true, defval = true, title = "Use SMI Strategy") usersi = input(true, defval = true, title = "Use RSI Strategy") usebod = input(true, defval = true, title = "Use Body-Filter") a = input(5, "SMI Percent K Length") b = input(3, "SMI Percent D Length") limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit") fromyear = input(2017, defval = 2017, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Fast RSI fastup = rma(max(change(close), 0), 7) fastdown = rma(-min(change(close), 0), 7) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Stochastic Momentum Index ll = lowest (low, a) hh = highest (high, a) diff = hh - ll rdiff = close - (hh+ll)/2 avgrel = ema(ema(rdiff,b),b) avgdiff = ema(ema(diff,b),b) SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0 SMIsignal = ema(SMI,b) //Lines plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index") plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line") plot(limit, color = black, title = "Over Bought") plot(-1 * limit, color = black, title = "Over Sold") plot(0, color = blue, title = "Zero Line") //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 3 or usebod == false //Signals up1 = SMI < -1 * limit and close < open and body and usesmi dn1 = SMI > limit and close > open and body and usesmi up2 = fastrsi < 20 and close < open and body and usersi dn2 = fastrsi > 80 and close > open and body and usersi exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] if up1 or up2 if strategy.position_size < 0 strategy.close_all() strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()