Cette stratégie est basée sur l'indicateur de l'indice de dynamique de renversement double pour le trading. Il calcule un indice de dynamique de renversement sur une certaine période de temps en utilisant le prix le plus élevé, le prix le plus bas et le prix de clôture, et génère des signaux de trading lorsque l'indice revient vers le bas de la zone de surachat ou revient vers le haut de la zone de survente. Il définit également un mécanisme d'arrêt de perte de rupture.
L'indicateur de base de cette stratégie est l'indice de dynamique stochastique (SMI).
$$SMI = \frac{Close-(HH+LL)/2}{AVGDIFF/2}*100$$
Lorsque HH est le prix le plus élevé au cours des N derniers jours, LL est le prix le plus bas au cours des N derniers jours, N est déterminé par le paramètre a; AVGDIFF est la moyenne mobile de M jours de HH-LL, M est déterminé par le paramètre b.
SMI montre la caractéristique d'inversion des prix. Lorsque le prix de l'action s'approche du point le plus élevé au cours des N derniers jours, SMI est proche de 100, ce qui indique un surachat de l'action; lorsqu'il s'approche du point le plus bas au cours des N derniers jours, SMI est proche de -100, ce qui indique une survente. Les signaux d'achat / vente sont générés lorsque SMI s'inverse vers le bas du niveau 100 ou s'inverse vers le haut du niveau -100.
La stratégie utilise la moyenne mobile M-day SMA du SMI comme ligne de signal de trading. Lorsque le SMI s'inverse vers le bas de la zone de surachat et se déplace en dessous du SMA, un signal d'achat est généré. Lorsque le SMI s'inverse vers le haut de la zone de survente et se déplace au-dessus du SMA, un signal de vente est généré.
En outre, la stratégie juge la rupture du corps du chandelier pour le stop loss.
Les avantages de cette stratégie sont les suivants:
En utilisant le principe de l'inversion des prix, il peut générer des signaux de négociation aux points d'inversion et saisir les opportunités d'inversion.
SMI combine le prix le plus élevé, le prix le plus bas et le prix de clôture pour juger des conditions de surachat et de survente, ce qui rend les signaux plus fiables.
Avec le corps de la bougie de rupture stop loss, il peut sortir des positions à temps et contrôler efficacement les risques.
La stratégie comporte peu de paramètres et est facile à mettre en œuvre et à optimiser.
Cette stratégie comporte également certains risques:
Le trading d'inversion a du mal à déterminer le moment exact d'inversions réussies et peut entraîner de multiples pertes avant de capter l'inversion de tendance.
Une mauvaise appréciation des points d'inversion peut entraîner une augmentation des pertes.
L'arrêt de fuite du corps peut être trop sensible avec une forte probabilité d'être piégé.
Les solutions sont les suivantes:
Optimiser les paramètres du SMI pour ajuster la fréquence des opérations de renversement.
Combinez d'autres indicateurs pour déterminer le moment du renversement.
Ajustez la taille du corps pour éviter d'être trop sensible.
La stratégie peut être optimisée dans les aspects suivants:
Optimiser les paramètres a et b de l'IMC pour ajuster la sensibilité de la capture des inversions.
Ajoutez d'autres indicateurs pour le jugement afin d'éviter de manquer les grandes tendances, par exemple les moyennes mobiles, les indicateurs de volatilité, etc.
Ajouter plus de méthodes d'arrêt de perte pour éviter d'être trop sensibles ou insensibles, telles que l'arrêt de perte de suivi, l'arrêt de perte de courbe, etc.
Incorporer des modèles d'apprentissage automatique pour juger de la probabilité de réussite de l'inversion, en évitant les transactions d'inversion ratées.
En conclusion, il s'agit d'une stratégie de trading bidirectionnelle basée sur l'indice de dynamique de renversement SMI. L'avantage réside dans la capture de plus d'opportunités de trading à court terme en utilisant l'inversion des prix et en générant des signaux aux points de renversement. Mais il existe également des risques typiques du trading de renversement.
/*backtest start: 2023-11-01 00:00:00 end: 2023-11-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Stochastic Strategy v1.0", shorttitle = "Stochastic str 1.0", 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") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") a = input(5, "Percent K Length") b = input(3, "Percent D Length") limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit") fromyear = input(2018, defval = 2018, 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") //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 body = abs(close - open) abody = sma(body, 10) //Signals up = SMIsignal < -1 * limit and close < open dn = SMIsignal > limit and close > open exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2 //Trading lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up if strategy.position_size < 0 strategy.close_all() strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot) if dn if strategy.position_size > 0 strategy.close_all() strategy.entry("Top", strategy.short, needshort == false ? 0 : lot) if exit strategy.close_all()