Stratégie de suivi de la tendance à la volatilité

Auteur:ChaoZhang est là., Date: 2024-02-18 10:07:29 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie utilise l'indicateur WaveTrend pour déterminer les tendances des prix et les situations de surachat/survente. Elle combine l'indicateur RSI pour filtrer les signaux et adopte une méthode de suivi des tendances pour effectuer des opérations contre tendance aux niveaux de surachat/survente.

La logique de la stratégie

La stratégie utilise l'indicateur WaveTrend pour déterminer la direction de la tendance des prix. L'indicateur WaveTrend est amélioré sur la base de l'indicateur Rainbow. Il juge la direction de la tendance des prix en calculant la différence entre la moyenne mobile Heikin-Ashi et la valeur absolue du prix. Il génère des signaux de trading en combinant l'indicateur RSI pour déterminer les situations de surachat/survente.

Plus précisément, la formule WaveTrend de la stratégie est la suivante:

esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10) 
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

où esa est la moyenne mobile de Heikin-Ashi calculée, d est la moyenne de la différence entre la moyenne mobile de Heikin-Ashi et la valeur absolue du prix. ci est la soi-disant fourchette adaptative, reflétant la volatilité des prix. wt est la moyenne mobile de ci, qui détermine la direction de la tendance des prix et est l'indicateur clé pour le long et le court.

L'indicateur RSI est utilisé pour déterminer les situations de surachat/survente.

rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown)) 

Sa valeur standard est de 0 à 100. Au-dessus de 70 est suracheté et en dessous de 30 est survendu.

Combiné avec ces deux indicateurs, lorsque le RSI est inférieur à 25 et que la tendance de la vague est inférieure à -60, il est survendu pour aller long. Lorsque le RSI est supérieur à 75 et que la tendance de la vague est supérieure à 60, il est suracheté pour aller court.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. L'indicateur WaveTrend peut déterminer avec précision et fiabilité la direction de la tendance des prix.
  2. Les filtres RSI peuvent éviter les transactions inutiles et améliorer le taux de gain.
  3. La méthode de suivi des tendances peut maximiser les bénéfices de la capture des tendances des prix.
  4. L'idée de stratégie est simple et claire, les paramètres sont flexibles pour s'adapter à différents produits et marchés.
  5. Facile à mettre en œuvre et à tester dans le commerce en direct, bon pour une optimisation ultérieure.

Analyse des risques

Il y a aussi des risques:

  1. Tant WaveTrend que RSI ont un certain retard, peuvent manquer les points d'inversion des prix.
  2. Des faux signaux peuvent encore apparaître sur les marchés latéraux malgré les filtres.
  3. Manque d'une méthode de stop loss efficace pour contrôler les pertes uniques.
  4. Un réglage raisonnable des paramètres doit correspondre aux caractéristiques et à la fréquence de négociation.

Les solutions:

  1. Ajouter des indicateurs pour des optimisations combinées pour améliorer la précision du signal.
  2. Ajouter des stratégies de stop loss pour contrôler les pertes uniques.
  3. Trouver des combinaisons optimales de paramètres pour adapter la stratégie.

Directions d'optimisation

La stratégie peut être optimisée dans les directions suivantes:

  1. Modifier ou ajouter des indicateurs de jugement pour améliorer la précision du signal, par exemple MACD, KD, etc.

  2. Optimiser les paramètres afin d'adapter les différents produits, par exemple en ajustant les périodes de fluidité.

  3. L'exposition au risque de défaillance de l'établissement est calculée sur la base de l'exposition au risque de défaillance.

  4. Considérez différentes stratégies de pyramide, par exemple le Martingale au lieu d'une quantité fixe.

  5. Optimiser les paramètres de gamme adaptative pour améliorer la précision du jugement.

Conclusion

L'idée générale de la stratégie est claire, en utilisant des indicateurs de volatilité pour déterminer les tendances des prix et filtrer efficacement le bruit.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//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, %")
showarr = input(true, defval = true, title = "Show Arrows")
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")

//RSI
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))

//WaveTrend
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overs = rsi < 25 and wt < -60
overb = rsi > 75 and wt > 60
up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1
dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1
exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false)

//Arrows
col = exit ? black : up1 or dn1 ? blue : na
needup = up1
needdn = dn1
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//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
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if exit
    strategy.close_all()

Plus de