
Cette stratégie est une stratégie de négociation utilisant un indice de volume de retournement bidirectionnel. La stratégie construit un indice de volume de retournement en calculant le prix le plus élevé, le prix le plus bas et le prix de clôture sur une période donnée et en calculant sa moyenne mobile pour constituer un signal de négociation.
L’indicateur central de cette stratégie est le Stochastic Momentum Index (SMI). La formule de calcul du SMI est la suivante:
\[SMI = \frac{Close-(HH+LL)/2}{AVGDIFF/2}*100\]
Dans ce cas, HH est le plus haut cours des N derniers jours, LL est le plus bas cours des N derniers jours, N déterminé par le paramètre a; AVGDIFF est la moyenne mobile sur M jours de HH-LL, M déterminée par le paramètre b。
L’indice SMI reflète la caractéristique de l’inversion des prix. Lorsque le prix des actions est proche du plus haut de la dernière journée N, SMI est proche de 100, indiquant que les actions sont surachetées; lorsque le plus bas est proche de la dernière journée N, SMI est proche de 100, indiquant que les actions sont surachetées.
Cette stratégie utilise la moyenne mobile sur les jours M du SMI comme ligne de signal de transaction. Un signal de vente est généré lorsque le SMI revient vers le bas de la zone de surachat pour dépasser le SMA. Un signal de vente est généré lorsque le SMI revient vers le haut de la zone de survente pour dépasser le SMA.
Dans le même temps, la stratégie décide de la rupture de l’entité de la ligne K pour mettre en place un stop loss.
Cette stratégie présente les avantages suivants:
Il utilise le principe de l’inversion des prix pour générer des signaux de transaction et saisir les opportunités de revers.
L’indice SMI combine les prix les plus élevés, les prix les plus bas et les prix de clôture, ce qui permet de juger de manière globale les situations de survente et de survente. Le signal est plus fiable.
En combinant la rupture de l’entité de la ligne K avec un arrêt de perte, il est possible d’arrêter la perte de sortie de la position et de contrôler efficacement le risque.
Les paramètres de stratégie sont moins nombreux et plus faciles à mettre en œuvre et à optimiser.
Cette stratégie présente aussi des risques:
Le trading inverse est difficile à déterminer quand un renversement est réussi, et il peut être difficile d’attraper un renversement de tendance après plusieurs pertes.
Une erreur de jugement au moment de l’inversion peut aggraver les pertes.
Les entités de rupture d’arrêt peuvent être trop sensibles et plus susceptibles d’être enfermées.
La réponse:
Optimiser les paramètres SMI et ajuster la fréquence de renversement des transactions.
Le moment de l’inversion est déterminé en combinaison avec d’autres indicateurs.
Ajustez les paramètres de taille d’arrêt de l’entité pour éviter une sursensibilité.
Cette stratégie peut être optimisée dans les directions suivantes:
Optimiser les paramètres a et b du SMI pour ajuster la sensibilité de la capture par inversion.
Ajoutez d’autres indicateurs pour ne pas rater la direction des tendances majeures, par exemple la ligne moyenne combinée, l’indicateur de volatilité, etc.
Augmenter les modes de stop-loss pour éviter que le stop-loss soit trop sensible ou lent. Vous pouvez envisager de suivre le stop-loss, le stop-loss de la courbe, etc.
Les modèles d’apprentissage automatique sont utilisés pour évaluer la probabilité de réussite d’un renversement et d’éviter des échecs.
Cette stratégie est une stratégie de trading bidirectionnel qui utilise l’indice de revers SMI. L’avantage est qu’elle utilise les caractéristiques de revers des prix pour générer des signaux de transaction au point de revers et capter plus d’opportunités de transaction à court terme. Cependant, il existe des risques typiques de revers de transaction qui nécessitent une optimisation des paramètres et des arrêts pour éviter une augmentation des pertes.
/*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()