Stratégie de négociation quantitative basée sur la tendance des vagues

Auteur:ChaoZhang est là., Date: 2023-11-28 16:17:31 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie est conçue sur la base de l'indicateur de tendance de vague. L'indicateur de tendance de vague combine le canal de prix et la moyenne mobile pour identifier efficacement les tendances du marché et générer des signaux de négociation. Cette stratégie entre dans des positions longues ou courtes lorsque la ligne de tendance de vague traverse des niveaux clés représentant un état de surachat ou de survente.

La logique de la stratégie

  1. Calculez la moyenne mobile triangulaire ap du prix, ainsi que la moyenne mobile exponentielle esa de ap.
  2. Calculez la moyenne mobile exponentielle d de la différence absolue entre ap et esa.
  3. Dériver l'indicateur de volatilité ci.
  4. Calculer la moyenne mobile de ci pour une période n2 pour obtenir l'indicateur de tendance de vague wt1.
  5. Définir les seuils de surachat et de survente.
  6. Allez long quand wt1 franchit la ligne de survente, allez court quand wt1 franchit la ligne de surachat.

Analyse des avantages

  1. Les ruptures de tendance des niveaux de surachat/survente attrapent efficacement les points d'inversion de tendance et génèrent des signaux de trading précis.
  2. En combinant les théories du canal de prix et de la moyenne mobile, l'indicateur évite de fréquents faux signaux.
  3. Applicable à tous les délais et à la variété des instruments de négociation.
  4. Les paramètres personnalisables offrent une bonne expérience utilisateur.

Risques et solutions

  1. Des écarts significatifs peuvent causer de mauvais signaux, un risque élevé.
  2. Aucun mécanisme de dimensionnement des positions et de stop loss, aucun risque de pertes.

Directions d'optimisation

  1. Considérez la combinaison avec d'autres indicateurs tels que le KDJ et le MACD pour former des combinaisons stratégiques, améliorant la stabilité.
  2. Concevoir un stop-loss automatique comme les trailing stops, les stops de volatilité pour limiter la perte par transaction.
  3. Utiliser des algorithmes d'apprentissage automatique sur les données historiques pour ajuster automatiquement les paramètres et améliorer les performances de la stratégie.

Conclusion

Cette stratégie identifie les tendances et les niveaux de surachat/survente à l'aide de l'indicateur de tendance de vague, formant une tendance efficace suivant la stratégie. Par rapport aux oscillateurs à court terme, la tendance de vague évite les faux signaux et offre une meilleure stabilité. Avec des méthodes de contrôle des risques appropriées, elle peut réaliser des profits stables. Une amélioration supplémentaire de la performance peut être attendue des paramètres et du réglage du modèle.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@author SoftKill21
//@version=4

strategy(title="WaveTrend strat", shorttitle="WaveTrend strategy")
n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
Overbought = input(70, "Over Bought")
Oversold = input(-30, "Over Sold ")

// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2001, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true //and (london or newyork)

ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)

plot(0, color=color.gray)
plot(Overbought, color=color.red)
plot(Oversold, color=color.green)

plot(wt1, color=color.green)
longButton = input(title="Long", type=input.bool, defval=true)
shortButton = input(title="Short", type=input.bool, defval=true)

if(longButton==true)
    strategy.entry("long",1,when=crossover(wt1,Oversold) and time_cond)
    strategy.close("long",when=crossunder(wt1, Overbought))
    
if(shortButton==true)
    strategy.entry("short",0,when=crossunder(wt1, Overbought) and time_cond)
    strategy.close("short",when=crossover(wt1,Oversold))

//strategy.close_all(when= not (london or newyork),comment="time")
if(dayofweek == dayofweek.friday)
    strategy.close_all(when= timeinrange(timeframe.period, "1300-1400"), comment="friday") 

Plus de