Stratégie de trading basée sur la moyenne mobile des tendances


Date de création: 2023-09-21 20:34:43 Dernière modification: 2023-09-21 20:34:43
Copier: 0 Nombre de clics: 672
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie utilise une combinaison de moyenne rapide et moyenne lente pour déterminer la direction de la tendance et pour effectuer des transactions de tendance afin de capturer les tendances de la moyenne et de la longue ligne. Faire plus lorsque la moyenne rapide traverse la moyenne lente sur la moyenne rapide et faire moins lorsque la moyenne rapide traverse la moyenne lente en dessous de la moyenne rapide est une stratégie de suivi de tendance typique.

Principe de stratégie

La stratégie repose principalement sur la courbe de la courbe de la courbe de la courbe de la courbe. Plus précisément, la stratégie utilise une courbe rapide de 5 cycles et une courbe lente de 21 cycles.

Lorsque la courbe rapide traverse la courbe lente sur la ligne moyenne rapide, la stratégie est plus active lors de l’ouverture de la ligne K suivante. Lorsque la courbe rapide traverse la courbe moyenne lente en dessous de la courbe moyenne rapide, la stratégie est plus active lors de l’ouverture de la ligne K suivante.

En outre, la stratégie a également défini le paramètre de filtrage des fausses brèches par le paramètre de filtrage des fausses brèches par le paramètre par défaut de 2, c’est-à-dire que la ligne moyenne rapide nécessite 2 lignes K consécutives au-dessus de la ligne moyenne lente pour émettre des signaux multiples et pouvoir filtrer efficacement les fausses brèches.

Pour les crypto-monnaies, la stratégie a également ajouté une logique de jugement des extrêmes. Un signal de transaction n’est émis que lorsque la moyenne rapide et la moyenne lente sont simultanément dans la zone extrême.

La règle de sortie de stratégie est simple et directe: lorsque le prix atteint son point de rupture, la position est abandonnée.

Avantages stratégiques

  • L’utilisation d’un système bi-linéaire permet de suivre efficacement les tendances
  • La courbe moyenne rapide est plus courte pour capturer les changements de tendance en temps opportun.
  • La longueur moyenne lente permet de déterminer la direction principale
  • Les paramètres de la barre de requête permettent de filtrer certaines fausses percées.
  • Le jugement des extrêmes permet d’éviter les fausses percées ponctuelles près des points critiques
  • Le risque est géré par le stop mobile.

Risque stratégique

  • Les stratégies de double équilibre sont sujettes à des pertes à un tournant de tendance
  • Les pertes mobiles peuvent être prématurées
  • Les paramètres de filtrage des barres de choc ne sont pas suffisamment filtrés et risquent de manquer le point de vente.
  • Les jugements de valeur extrême peuvent, dans certains cas, manquer le point d’achat.
  • Cette stratégie est plus adaptée aux marchés en forte tendance qu’aux marchés en forte oscillation.

Le risque peut être réduit par les moyens suivants:

  • Optimiser les paramètres des barres de cuivre pour trouver l’équilibre
  • Essayez de filtrer d’autres indicateurs comme le MACD
  • Ajuster le point d’arrêt pour éviter un arrêt prématuré
  • Considérer la possibilité d’une réintégration

Direction d’optimisation

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

  1. Optimisation des paramètres de ligne moyenne

Il est possible de tester plus de combinaisons pour trouver des paramètres de ligne moyenne plus adaptés au marché actuel. Par exemple, ajuster la ligne rapide à 10 cycles et la ligne lente à 50 cycles.

  1. Ajouter d’autres critères

Il est possible de tester d’autres indicateurs tels que MACD, KDJ, etc. et de définir des conditions plus strictes pour éviter les fausses percées.

  1. Optimisation des mécanismes d’admission

Les entrées actuelles sont trop simples et dépendent de la moyenne, et peuvent être optimisées comme suit:

  • Il faut attendre que le MACDDIFF soit sur le 0 pour entrer.
  • En passant la ligne lente sur la ligne rapide, on peut voir si KDJ est aussi en forme pour entrer.
  1. Optimisation des mécanismes de couverture

Il est possible de tester d’autres méthodes de stop-loss, par exemple en suivant le stop-loss du prix et en évitant que le stop-loss ne soit déclenché trop tôt.

  1. Rejoindre le mécanisme de réintégration

Il est possible de réintégrer une position après qu’elle ait été perdue, ce qui réduit le risque de manquer une tendance en étant en dehors de la zone de négociation.

Résumer

Cette stratégie est une stratégie de suivi de la tendance de base, l’idée centrale est simple et directe, elle utilise une direction de jugement de tendance à double équilibre et un arrêt mobile pour contrôler les risques. L’avantage est qu’elle est facile à comprendre et à mettre en œuvre, il est possible de suivre la tendance et de profiter, le risque peut également être contrôlé.

Code source de la stratégie
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.3", shorttitle = "Trend MAs str 2.3", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
fromyear = input(1900, defval = 1900, 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")

src = close

//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)

//Signals
up1 = trend == 1 and (low < center2 or usefastsma == false) and redbars == 1
dn1 = trend == -1 and (high > center2 or usefastsma == false) and greenbars == 1
up2 = high < center and high < center2 and bar == -1 and needex
dn2 = low > center and low > center2 and bar == 1 and needex
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0

//Lines
plot(center2, color = red, linewidth = 3, transp = 0, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Trading
stoplong = up1 == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn1 == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

if up1 or up2 or up3
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.exit("Stop Long", "Long", stop = stoplong)

if dn1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.exit("Stop Short", "Short", stop = stopshort)
    
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()