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


Date de création: 2023-11-28 16:17:31 Dernière modification: 2023-11-28 16:17:31
Copier: 1 Nombre de clics: 715
1
Suivre
1619
Abonnés

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

Aperçu

Cette stratégie est basée sur la conception de l’indicateur de tendance de la vague. L’indicateur de tendance de la vague, combiné avec le canal de prix et la moyenne, permet d’identifier efficacement la tendance du marché et d’émettre des signaux d’achat et de vente.

Principe de stratégie

  1. Calculer la moyenne mobile triangulaire des prix ap, et la moyenne mobile indicielle des prix ap esa。
  2. Calculer la moyenne mobile d de la différence absolue entre ap et esa.
  3. On obtient l’indicateur de fluctuation ci。
  4. Calculer la moyenne des cycles n2 de ci pour obtenir l’indicateur de tendance des vagues wt1 ≠
  5. Il y a une ligne de survente et une ligne de surachat.
  6. Lorsque vous traversez la ligne de survente sur wT1, faites plus; lorsque vous traversez la ligne de survente sous wT1, faites moins.

Analyse des avantages

  1. L’indicateur de tendance des vagues dépasse les lignes de vente et d’achat, ce qui permet de capturer efficacement les points de basculement des tendances du marché et de prendre des décisions précises d’achat et de vente.
  2. En combinaison avec les canaux de prix et la théorie de la ligne moyenne, l’indicateur ne génère pas de signaux fréquents.
  3. Les périodes peuvent être utilisées à tout moment et s’appliquent à de nombreuses variétés de transactions.
  4. Les paramètres de l’indicateur sont réglables et l’expérience utilisateur est bonne.

Risques et solutions

  1. Dans les marchés très volatiles, les indicateurs peuvent générer des signaux erronés, le risque est plus élevé. La période de maintien des positions peut être réduite de manière appropriée ou combinée avec d’autres signaux de filtrage des indicateurs.
  2. Il n’y a pas de mécanisme de gestion de position et de stop-loss. Il existe un risque de perte. La taille de la position et le stop-loss mobile peuvent être configurés pour contrôler le risque.

Direction d’optimisation

  1. L’utilisation d’une combinaison avec d’autres indicateurs, tels que KDJ, MACD, etc., peut être envisagée pour former un portefeuille de transactions et améliorer la stabilité de la stratégie.
  2. Il est possible de concevoir des mécanismes d’arrêt automatiques, tels que l’arrêt de suivi, l’arrêt de la ligne de vitesse, etc., pour contrôler les pertes individuelles.
  3. Il est possible de combiner des algorithmes d’apprentissage en profondeur pour améliorer le taux de réussite des stratégies en optimisant automatiquement les paramètres par le biais de la formation de données de retour.

Résumer

Cette stratégie est basée sur l’indicateur de tendance de la vague, qui détermine les tendances de survente et de survente. C’est une stratégie de suivi de tendance efficace. Par rapport aux indicateurs à court terme, l’indicateur de tendance de la vague réduit les signaux erronés et améliore la stabilité.

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