Basé sur une stratégie de suivi des tendances de volatilité


Date de création: 2024-02-18 10:07:29 Dernière modification: 2024-02-18 10:07:29
Copier: 0 Nombre de clics: 538
1
Suivre
1617
Abonnés

Basé sur une stratégie de suivi des tendances de volatilité

Aperçu

La stratégie utilise l’indicateur WaveTrend pour déterminer les tendances de prix et les surachats et les surventeurs, en combinaison avec les signaux de filtrage de l’indicateur RSI, et utilise le suivi de tendance pour effectuer des opérations inverses sur les surachats et les surventeurs.

Principe de stratégie

La stratégie utilise l’indicateur WaveTrend pour déterminer la direction de la tendance des prix. L’indicateur WaveTrend est basé sur l’amélioration de l’indicateur Rainbow pour déterminer la direction de la tendance des prix en calculant la différence entre la moyenne Heikin-Ashi et la valeur absolue des prix.

La formule de WaveTrend dans 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)

Dans ce cas, esa est la moyenne calculée de Heikin-Ashi, d est la moyenne de la différence entre la moyenne de Heikin-Ashi et la valeur absolue du prix.

L’indicateur RSI est utilisé pour juger si une personne est sur-achetée ou sur-vendue. La formule de calcul du RSI dans le code est:

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))

Les zones de plus de 70 sont des zones d’achat et les zones de moins de 30 sont des zones de vente.

La combinaison de ces deux indicateurs signifie que lorsque le RSI est inférieur à 25, WaveTrend est inférieur à 60 pour la zone de survente et un signal de survente; lorsque le RSI est supérieur à 75, WaveTrend est supérieur à 60 pour la zone de survente et un signal de survente.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’indicateur WaveTrend est utilisé pour déterminer la direction de la tendance des prix avec précision et fiabilité.
  2. Le filtrage du RSI permet d’éviter les transactions inutiles et d’améliorer le taux de victoire.
  3. Le suivi des tendances permet de maximiser le profit généré par les tendances des prix.
  4. La stratégie est claire et compréhensible, les paramètres sont flexibles et peuvent être ajustés en fonction des variétés et des marchés.
  5. La stratégie est simple à mettre en œuvre, facile à vérifier en temps réel et facile à optimiser.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Les indicateurs WaveTrend et RSI sont tous deux en retard et risquent de manquer le point de basculement.
  2. Bien que les conditions de filtrage soient réunies, il est possible que des signaux erronés soient générés lors d’une secousse.
  3. Les stratégies de suivi des pertes restent à perfectionner et ne permettent pas de contrôler efficacement les pertes individuelles.
  4. Il est essentiel de faire en sorte que les paramètres correspondent raisonnablement aux caractéristiques de la variété et à la fréquence des transactions.

La réponse:

  1. L’optimisation des signaux, combinée à des indicateurs de jugement supplémentaires, améliore la précision des signaux.
  2. Adopter une stratégie de stop-loss pour contrôler les pertes individuelles.
  3. La recherche de la meilleure combinaison de paramètres et l’adaptation de la stratégie à la variété du marché.

Direction d’optimisation

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

  1. Remplacer ou augmenter les indices de jugement pour optimiser la précision du signal. Par exemple, ajouter des indices de jugement tels que MACD, KD.

  2. Optimiser les paramètres pour les différentes variétés de transactions. Par exemple, ajuster le cycle de lissage pour trouver la meilleure combinaison de paramètres.

  3. Adhérer à une stratégie de suivi des arrêts de perte pour contrôler efficacement les pertes individuelles, telles que les arrêts de pourcentage de solde, les arrêts mobiles, etc.

  4. Considérez différentes stratégies de mise en position. Par exemple, utilisez la mise en position de Martingale au lieu de la quantité fixe de mise en position.

  5. Optimiser les paramètres de la plage d’adaptabilité, trouver les meilleurs paramètres pour améliorer l’exactitude des jugements.

Résumer

La stratégie a une conception globale claire, utilise des indicateurs de dynamisme pour déterminer les tendances des prix et filtre efficacement les signaux de négociation de bruit. La stratégie a une grande marge d’optimisation et peut être améliorée sous plusieurs angles, ce qui rend la stratégie plus stable et plus fiable. L’optimisation peut être adaptée à différentes variétés de transactions en ajustant les paramètres.

Code source de la stratégie
/*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()