Stratégie Martingale Momentum à double moyenne mobile


Date de création: 2023-12-25 17:01:28 Dernière modification: 2023-12-25 17:01:28
Copier: 0 Nombre de clics: 564
1
Suivre
1623
Abonnés

Stratégie Martingale Momentum à double moyenne mobile

Aperçu

La stratégie combine trois indicateurs techniques différents, génère des signaux de transaction avec un système bi-homogène et utilise la couleur et l’entité des lignes K comme conditions de filtrage supplémentaires, afin de construire une stratégie de négociation en ligne courte relativement stable et efficace.

Principe de stratégie

L’ensemble de la stratégie utilise la combinaison des bandes de Boolean et des canaux KC pour identifier les phases de compression et d’expansion du marché. Plus précisément, les bandes de Boolean sont considérées comme étant de compression lorsqu’elles sont dans le canal KC, et comme étant d’expansion lorsque les bandes de Boolean traversent le canal KC. La compression représente la possibilité d’une intensification de la volatilité et d’un renversement de tendance, utilisant la régression linéaire comme principal indicateur de signal de négociation.

Si l’histogramme de régression linéaire est positif (indiquant une tendance à la hausse) et que la barre est la ligne K rouge (indiquant une tendance à la baisse), et que l’entité de la ligne K est supérieure à 13 de la moyenne des entités des 30 dernières lignes de K, ce signal combiné est plus grand; inversement, si l’histogramme de régression linéaire est négatif, la barre est la ligne K verte et l’entité est plus grande, elle est vide.

La stratégie fournit un contexte visuel de la compression et de l’expansion pour aider à juger des phases du marché.

Analyse des forces stratégiques

  • L’utilisation de plusieurs indicateurs combinés permet de filtrer efficacement les faux signaux
  • La compression représente un point de basculement possible pour augmenter l’efficacité de la stratégie
  • Les filtres d’entités peuvent éviter d’être induits en erreur par les fausses percées des petites bandes
  • Facile à obtenir de meilleurs résultats grâce à l’optimisation des paramètres

Analyse stratégique des risques

  • La régression linéaire est sujette à des signaux erronés et peut entraîner des pertes
  • Le résultat de la compression n’est pas idéal pour la ceinture de Brin et le canal KC.
  • Les conditions de filtrage sont trop sévères, et on risque de rater de meilleurs points d’entrée.
  • La retraite est possible et nécessite une certaine tolérance.

Il est possible de réduire le risque en ajustant les paramètres de l’indicateur et en optimisant les conditions de filtrage.

Orientation de l’optimisation de la stratégie

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

  1. Essayez différentes combinaisons et longueurs de paramètres pour trouver le meilleur
  2. Augmenter ou diminuer les conditions de filtration pour trouver le niveau de filtration optimal
  3. Utilisez l’apprentissage automatique pour trouver les paramètres optimaux
  4. Test de l’efficacité dans des variétés spécifiques, paramètres ajustés en fonction des différentes variétés
  5. Augmentation des stratégies de stop-loss pour contrôler les pertes individuelles

Résumer

Cette stratégie regroupe plusieurs indicateurs, augmente les conditions de filtrage tout en identifiant les opportunités de compression, formant une stratégie de ligne courte plus robuste et plus efficace. De meilleurs résultats peuvent être obtenus en optimisant les paramètres et les conditions de filtrage.

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

//Noro
//2017

//@version=2
strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend background")
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")

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray 

trend = val > 0 ? 1 : val < 0 ? -1 : 0

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

//EMA Body
body = abs(close - open)
emabody = ema(body, 30) / 3

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false)
dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false)

if up
    strategy.entry("Long", strategy.long)

if dn
    strategy.entry("Short", strategy.short)