Les ressources ont été chargées... Je charge...

Stratégie bidirectionnelle de négociation quantitative croisée de l'EMA

Auteur:ChaoZhang est là., Date: 2024-01-24 17h31 et 41 min
Les étiquettes:

img

Résumé

Cette stratégie utilise des indicateurs EMA bidirectionnels pour déterminer la direction principale de la tendance du marché et combine l'indicateur RSI comme le moment de sélection de l'entrée, qui appartient à la tendance suivant la stratégie de trading algorithmique.

Principe de stratégie

  1. Calculer plusieurs groupes d'EMA avec des cycles différents pour identifier la direction principale de la tendance du marché en trois dimensions: à court, moyen et long terme
  2. Lorsque l'EMA à court terme dépasse l'EMA à moyen et long terme, il est établi qu'une tendance haussière s'est formée.
  3. Lorsque l'EMA à court terme dépasse l'EMA à moyen et long terme, il est établi qu'une tendance baissière s'est formée.
  4. Combinez l'indicateur RSI pour trouver le moment d'entrée approprié.
  5. Dans une tendance haussière, allez long lorsque l'indicateur RSI est à des niveaux bas; dans une tendance baissière, allez court lorsque l'indicateur RSI est à des niveaux élevés

La stratégie ci-dessus applique principalement l'indicateur EMA bidirectionnel pour déterminer la direction de la tendance principale et utilise l'indicateur RSI comme sélection de signal d'entrée, qui appartient à une tendance typique suivant une stratégie de trading algorithmique.

Analyse des avantages

Le principal avantage de cette stratégie est qu'elle permet de déterminer clairement la direction de la tendance principale du marché et de choisir un meilleur moment d'entrée en fonction de l'indicateur RSI.

  1. Utiliser plusieurs ensembles d'EMA pour identifier la direction principale de la tendance du marché sous plusieurs dimensions temporelles
  2. Le calcul de l'indicateur EMA est simple avec moins de bruit et il détermine la tendance principale du marché de manière précise et fiable
  3. L'indicateur RSI peut déterminer efficacement les points d'entrée et d'arrêt des pertes pour optimiser considérablement le rendement
  4. La structure de l'algorithme est claire et facile à comprendre et à modifier.
  5. Il peut être combiné de manière flexible avec d'autres indicateurs techniques afin d'améliorer encore le rendement de la stratégie

Analyse des risques

La stratégie comporte également certains risques, principalement en ce qui concerne les aspects suivants:

  1. Lorsque la tendance s'inverse, le point d'arrêt des pertes peut être trop idéalisé, augmentant ainsi les pertes
  2. Incapacité de déterminer efficacement le point d'inversion de tendance, éventuellement manquant l'occasion d'arrêter la perte à temps
  3. Les paramètres EMA et RSI doivent être testés et optimisés à plusieurs reprises, faute de quoi ils peuvent entraîner une instabilité.
  4. Ne peut pas garantir que chaque entrée est le timing parfait, il peut y avoir des répétitions multiples inutiles
  5. Il est difficile d'éviter efficacement les écarts majeurs sous l'influence d'événements soudains

Pour faire face aux risques susmentionnés, des optimisations peuvent être apportées dans les domaines suivants:

  1. Des points d'arrêt des pertes raisonnablement fixés pour éviter des pertes excessives
  2. Augmenter les autres indicateurs pour déterminer l'inversion de tendance afin d'assurer un stop loss rapide
  3. Optimiser les combinaisons de paramètres pour s'adapter à des conditions de marché plus larges
  4. Modifier la logique d'entrée et d'arrêt des pertes pour réduire le nombre de répétitions
  5. Augmenter le jugement des exceptions pour éviter les effets négatifs des lacunes du marché

Directions d'optimisation

D'après les avantages et les risques de cette stratégie, nous pouvons obtenir les orientations d'optimisation suivantes:

  1. Dans le cadre actuel de l'EMA bidirectionnelle, introduire des indicateurs tels que le MACD et le BOLL pour juger des points d'inversion de tendance, optimisant ainsi les stratégies de prise de profit et de stop-loss
  2. Introduire des modèles d'apprentissage automatique pour prédire la probabilité d'inversion de tendance et améliorer encore les performances de la stratégie
  3. Appliquer des filtres avancés pour identifier automatiquement les conditions anormales du marché et prévenir efficacement les pertes
  4. Utiliser des algorithmes génétiques, l'apprentissage par renforcement profond et d'autres méthodes pour optimiser automatiquement les paramètres afin que les stratégies puissent s'adapter à plus de types de marché
  5. Ajouter le module automatique de perte d'arrêt, peut régler dynamiquement les points de perte d'arrêt en fonction de la situation réelle

En introduisant davantage d'indicateurs, de modèles de prévision, d'optimisation des paramètres, de modules de contrôle des risques et d'autres moyens, cette stratégie peut être encore améliorée pour s'adapter à des conditions de marché plus complexes et volatiles.

Conclusion

Cet article a présenté en détail le contenu principal de la stratégie de négociation quantitative transversale bidirectionnelle EMA. Tout d'abord, il a décrit les principales idées et les principes de fonctionnement de la stratégie. Ensuite, les avantages de la stratégie ont été entièrement analysés. En même temps, il a également analysé les principaux risques potentiels de la stratégie. Sur cette base, plusieurs directions d'optimisation clés ont été proposées. En résumé, cette stratégie a l'avantage de déterminer la tendance principale du marché et a également une certaine marge d'optimisation, qui est une stratégie de négociation quantitative typique. Grâce à l'amélioration et à l'optimisation continues, cette stratégie peut devenir un choix important pour les investisseurs trading algorithmique.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Investoz
// Indikatorn är byggd som ett utbildningsyfte och är därför ingen rekommendation för köp/sälj av aktier. Tanken är att skapa en visuell form i en graf
// som visar om det finns någon trend såväl positiv som negativ. En dialogruta med en varning talar om vilken trend som råder. I koden finns en möjlighet
// att ta position eller gå ur position om man vill skapa en startegi kring denna trendindikator. Rekommenderar dock starkt att inte enbart förlita sig på denna
// indikator som beslut för köp/sälj då resultaten blir negativa om man köper på psoitiv trend och säljer på negativ trend. Det måste kombineras med andra idéer
// och därför fungerar denna skript mer som ett komplement till sin egen strategi.
// Det är fritt fram för vem som helst att använda sig av denna indikator.  
//@version=4
//Skapar en strategiskript med 5 % av eget kapital som ett exempel. Detta går att ändra i skriptets inställningar, välj egenskaper och sedan ändra orderstorlek
//till ett annat värde av % på eget kapital.
strategy("© Investoz trendvarningar", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)
//Lägger till inmatningar till skriptindikatorn. Användaren kan se och redigera inmatningar i objektdialogen efter eget val.
ema1 = input(21, minval=1, maxval=500, title="Lila linje")
valema1=input(true, title="Visa lila linje")
ema2 = input(34, minval=1, maxval=500, title="Blå linje")
valema2=input(true, title="Visa blå linje")
ema3 = input(55, minval=1, maxval=500, title="Grön linje")
valema3=input(true, title="Visa grön linje")
ema4 = input(89, minval=1, maxval=500, title="Gul linje")
valema4=input(true, title="Visa gul linje")
ema5 = input(141, minval=1, maxval=500, title="Orange linje")
valema5=input(true, title="Visa orange linje")
ema6 = input(230, minval=1, maxval=500, title="Röd linje")
valema6=input(true, title="Visa röd linje")
ema7 = input(371, minval=1, maxval=500, title="Röd linje")
valema7=input(true, title="Visa röd linje")
//Inmatningar för antal staplar
startbar = input(1, minval=1, maxval=1, title="Första stapeln")
Endbar = bar_index
//Källa input, stängning. Användaren kan själv byta till vilken källa som önskas.
src = input(close, title="Source")
//Antal staplar sedan den längsta ema började och framåt. 
tid=Endbar + startbar - 371
//EMA loop
aema1 = ema(src, ema1)
bema2 = ema(src, ema2)
cema3 = ema(src, ema3)
dema4 = ema(src, ema4)
eema5 = ema(src, ema5)
fema6 = ema(src, ema6)
gema7 = ema(src, ema7)
//Skriver ut linjer i diagrammet om förhållandet är sant, annars falskt.
h=plot(valema1 ? aema1 : na, title="Lila linje", style=plot.style_line, linewidth=1, color=color.purple)
i=plot(valema2 ? bema2 : na, title="Blå linje", style=plot.style_line, linewidth=1, color=color.blue)
j=plot(valema3 ? cema3 : na, title="Grön linje", style=plot.style_line, linewidth=1, color=color.green)
k=plot(valema4 ? dema4 : na, title="Gul linje", style=plot.style_line, linewidth=1, color=color.yellow)
l=plot(valema5 ? eema5 : na, title="Orange linje", style=plot.style_line, linewidth=1, color=color.orange)
m=plot(valema6 ? fema6 : na, title="Röd linje", style=plot.style_line, linewidth=1, color=color.red)
n=plot(valema7 ? gema7 : na, title="Brun linje", style=plot.style_line, linewidth=1, color=color.maroon)
//Fyller bakgrunden mellan två linjer med en viss färg.
fill(h, i, color = color.purple,transp=34)
fill(i, j, color = color.blue,transp=34)
fill(j, k, color = color.green,transp=34)
fill(k, l, color = color.yellow,transp=34)
fill(l, m, color = color.orange,transp=34)
fill(m, n, color = color.red,transp=34)
//Skapa en algoritm för positiv trend
PositivTrend = crossover(aema1,gema7)?1:0
TrendPositiv = ema(close,1) > aema1 and aema1 > bema2?1:0
//Skapa en algoritm för negativ trend
NegativTrend = crossunder(aema1,gema7)?1:0
TrendNegativ = ema(close,1) < aema1 and aema1 < bema2?1:0
//Skapar en textruta med varningstext för positiv trend
varningtextpositiv = "Varning för positiv trend."+"\n" + "Leta efter att ta position!"
// if PositivTrend
//     varningpositiv=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.green,
//      text=varningtextpositiv,
//      style=label.style_label_down,
//      textalign=text.align_left)
//Skapar en textruta med varningstext för negativ trend
varningtextnegativ = "Varning för negativ trend."+"\n" + "Leta efter utgången!"
// if NegativTrend
//     varningnegativ=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.red,
//      text=varningtextnegativ,
//      style=label.style_label_up,
//      textalign=text.align_left)
//Köp om positiv trend
if (PositivTrend) 
    strategy.entry("Ta position", strategy.long, when = PositivTrend)
//Sälj om negativ trend
if (NegativTrend)
    strategy.close("Ta position", when = NegativTrend, comment="Gå ur position")
//Beräkning av positiv trend
vspositiv(positiv)=>valuewhen(Endbar==startbar,positiv,0)
vepositiv(positiv)=>valuewhen(Endbar==Endbar,positiv,0)
positivmean(TrendPositiv)=>
    csumpositiv = cum(TrendPositiv)
//Slut//   
    a = vepositiv(csumpositiv)
//Start//
    b = vspositiv(csumpositiv)
//Slut - Start// 
    (a - b)/(tid)
positivmeanpositiv = positivmean(TrendPositiv) 
//Beräkning av negativ trend
vsnegativ(negativ)=>valuewhen(Endbar==startbar,negativ,0)
venegativ(negativ)=>valuewhen(Endbar==Endbar,negativ,0)
negativmean(TrendNegativ)=>
    csumnegativ = cum(TrendNegativ)
//Slut//   
    a = venegativ(csumnegativ)
//Start//
    b = vsnegativ(csumnegativ)
//Slut - Start// 
    (a - b)/(tid)
negativmeannegativ = negativmean(TrendNegativ) 
//Inmatning av text som ska in i texruta som visar antal staplar i trend
logga = "© Investoz: Trend i tid"+ "\n"
streck = "--------------------------------------------------------"
totalastaplar = "\n" + "Dagar totalt: " + tostring(tid)+ " dagar "+"\n"+ streck + "\n"
totalpositiv = "Dagar totalt i positiv trend "+" 📈 : "  +tostring(positivmeanpositiv*tid, "##.##") +" dagar " + "\n"
totalnegativ = "\n" + "Dagar totalt i negativ trend" + " 📉 : "  +tostring(negativmeannegativ*tid, "##.##") +" dagar " 
//Textruta för antal staplar i trend
// if barstate.ishistory
//     barcountlbl=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.yellow,
//      text=logga+streck+totalastaplar+totalpositiv+streck+totalnegativ,
//      style=label.style_label_lower_left,
//      textalign=text.align_left)
//     label.delete(barcountlbl[1])
////////////////////////////////// 

Plus de