Stratégie de trading de tendance basée sur la croix d'or

Auteur:ChaoZhang est là., Date: 2023-11-23 14h07 et 11h
Les étiquettes:

img

Résumé

L'indicateur SR est une stratégie de suivi de tendance à moyen et long terme. Il identifie la direction de tendance des cours des actions en calculant l'indicateur SR et l'indicateur de signal SR, et implémente des opérations de suivi de tendance en dessinant un canal de tendance en utilisant des algorithmes de réseau neuronal. Lorsque l'indicateur SR traverse le signal SR, un signal d'achat est généré. Lorsque l'indicateur SR traverse le signal SR, un signal de vente est généré. Cette stratégie utilise également une technique de filtre de régression linéaire adaptative pour optimiser la courbe du canal, ce qui supprime efficacement les faux signaux.

Principaux

L'indicateur SR est une synthèse secondaire de la moyenne mobile WMA et de la moyenne mobile SMA avec une période de 8. L'indicateur SR est l'indicateur SR calculé avec une période de 20.

Cette stratégie utilise un algorithme de réseau neuronal pour tracer automatiquement les limites supérieures et inférieures du prix des actions pour former un canal adaptatif. La limite supérieure prend la valeur maximale historique de l'indicateur SR comme entrée, la limite inférieure prend la valeur minimale historique comme entrée, et les courbes de régression sont calculées comme les limites supérieures et inférieures du canal respectivement.

Lorsque l'indicateur SR traverse le signal SR, un signal d'achat est généré. Lorsque l'indicateur SR traverse le signal SR, un signal de vente est généré. Après l'émission des signaux longs et courts, la relation entre le prix de l'action et les limites supérieure et inférieure du canal détermine les positions stop loss et take profit.

Les avantages

  • Utiliser la technologie de synthèse bilinéaire pour éliminer l'impact des fluctuations des prix et déterminer avec précision la direction de la tendance;
  • Les algorithmes de canaux adaptatifs optimisent les temps d'entrée et de sortie et évitent les fausses fuites;
  • Les courbes de canal utilisent une technologie de filtrage par régression linéaire adaptative pour éviter les distorsions dues aux extrêmes;
  • Les positions Stop Loss et Take Profit changent dynamiquement avec le canal, suivant automatiquement les tendances pour le profit.

Analyse des risques

Les principaux risques de cette stratégie de suivi des tendances sont les suivants:

  • Génère de nombreux faux signaux et des opérations invalides excessives dans les tendances oscillantes;
  • Une rupture rapide en dessous de la limite inférieure du canal causée par des événements soudains entraîne d' énormes pertes;
  • Des paramètres incorrects peuvent facilement entraîner une défaillance de la stratégie.

Pour contrôler les risques, il est recommandé de combiner avec d'autres stratégies au lieu de se fier à une seule stratégie; en même temps, optimiser les paramètres pour s'adapter aux différents environnements du marché.

Directions d'optimisation

Cette stratégie peut être optimisée dans les aspects suivants:

  1. Optimiser les paramètres de l'indicateur SR et de l'indicateur de signal afin d'améliorer la stabilité des signaux croisés;

  2. Optimiser la période de cycle du canal adaptatif pour lisser la courbe du canal;

  3. Ajouter d'autres indicateurs de filtre pour éviter les dysfonctionnements, tels que les indicateurs d'énergie, les indicateurs de volatilité, etc.;

  4. Incorporer des algorithmes d'apprentissage en profondeur pour optimiser les courbes des canaux en temps réel et améliorer l'adaptabilité.

Résumé

La stratégie de trading croisée dorée est une stratégie quantitative efficace pour suivre les tendances à moyen et long terme. Elle a une forte probabilité de déterminer correctement la direction de la tendance et de réduire les risques d'exploitation.


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

//@version=4
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

strategy(title = " Strategy PyramiCover",
         shorttitle = "S-PC",
         overlay = true,
         precision = 8,
         calc_on_order_fills = true,
         calc_on_every_tick = true,
         backtest_fill_limits_assumption = 0,
         default_qty_type = strategy.fixed,
         default_qty_value = 2,
         initial_capital = 10000,
         pyramiding=50,
         currency = currency.USD,
         linktoseries = true)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool)

FromMonth         = input(defval = 1, title = "Month", minval = 1)
FromDay           = input(defval = 1, title = "Day", minval = 1)
FromYear          = input(defval = 2014, title = "Year", minval = 2014)

backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool)
ToMonth           = input(defval = 31, title = "Month", minval = 1)
ToDay             = input(defval = 12, title = "Day", minval = 1)
ToYear            = input(defval = 9999, title = "Year", minval = 2014)

backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

per = input(14,title="🔹 Length")
//
up = 0.0
nup= 0.0
lowl = 0.0
nin = 0.0
//
srl=wma(close,8)
srr = sma(close,8)
sr = 2*srl - srr
//
srsl=wma(close,20)
srsr= sma(close,20)
srsignal = 2*srsl - srsr
//
if sr>srsignal
    up := highest(sr,round(150))
    nup :=highest(srsignal,round(20))
else
    up := highest(srsignal,round(150))
    nup := highest(sr,round(20))
//
if sr<srsignal
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
else
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
//reg alexgrover
f_reg(src,length)=>
    x = bar_index
    y = src
    x_ = sma(x, length)
    y_ = sma(y, length)
    mx = stdev(x, length)
    my = stdev(y, length)
    c = correlation(x, y, length)
    slope = c * (my / mx)
    inter = y_ - slope * x_
    reg = x * slope + inter
    reg
//
up_=f_reg(up,per)
lowl_=f_reg(lowl,per)
nup_=f_reg(nup,per)
nin_=f_reg(nin,per)
//
plot(sr, title='SR', color=color.green, linewidth=2, style=plot.style_line,transp=0)
plot(srsignal, title='SR-Signal', color=color.red, linewidth=2, style=plot.style_line,transp=0)
plot(up_, title='Upper limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
plot(lowl_, title='Lower limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
a=plot(nup_, title='Neuronal Upper', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
b=plot(nin_, title='Neuronal Lower', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
fill(a, b, color=color.gray)
plotshape(crossunder(sr,nup_)? sr+atr(20):na, title="Sell", text="🐻", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.black,transp=0)
plotshape(crossover(sr,nin_)? sr-atr(20):na, title="Buy", text="🐂", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.black,transp=0)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

if backTestPeriod()

    strategy.entry("Buy", true, 1, when = crossover(sr,nin_)) 
    strategy.entry("Short", false, 1, when = crossunder(sr,nup_))

Plus de