Stratégie de suivi de tendance de moyenne mobile avec croisement d'ouverture et de fermeture


Date de création: 2024-01-15 14:24:27 Dernière modification: 2024-01-15 14:24:27
Copier: 0 Nombre de clics: 857
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance de moyenne mobile avec croisement d’ouverture et de fermeture

Aperçu

La stratégie de suivi de la tendance des moyennes mobiles croisées à la clôture ouverte est une stratégie de suivi de la tendance basée sur les moyennes mobiles. La stratégie juge la tendance actuelle du marché en calculant les moyennes mobiles des prix d’ouverture et de clôture; faire plus lorsque la moyenne mobile des prix d’ouverture est traversée par la moyenne mobile des prix d’ouverture; faire moins lorsque la moyenne mobile des prix d’ouverture est traversée par la moyenne mobile des prix d’ouverture.

Principe de stratégie

La logique centrale de cette stratégie est de juger de la tendance actuelle en fonction de la relation entre le prix d’ouverture et le prix de clôture. Le prix d’ouverture reflète la relation entre l’offre et la demande sur le marché actuel et la psychologie des transactions, tandis que le prix de clôture reflète les résultats des transactions du jour.

La stratégie utilise cette logique pour déterminer la direction de la tendance actuelle en calculant des moyennes mobiles des prix d’ouverture et de clôture. Plus précisément, ses règles de décision sont les suivantes:

  1. Lorsque la moyenne mobile de la clôture du cours est surmontée de la moyenne mobile de l’ouverture du cours, faites plus. Cela indique que l’atmosphère de multiplication est en train de s’intensifier et que vous pouvez entrer en multiplication.

  2. Lorsque la moyenne mobile de la clôture est inférieure à la moyenne mobile de l’ouverture, la position est vide. Cela indique que l’atmosphère de vide est en train de se renforcer et que la position est vide.

  3. Lorsque le signal de revers est donné, la position initiale est stoppée.

La stratégie a également mis en place un stop-loss de suivi pour verrouiller les bénéfices. Après l’entrée, le prix d’entrée est calculé en temps réel sur la différence de nombre de points entre le prix actuel. Lorsque le prix dépasse le nombre de points de stop-loss, la ligne de stop-loss monte pour verrouiller une partie des bénéfices.

Dans l’ensemble, la stratégie juge la tendance sur une période de temps de la longueur du cycle de la moyenne mobile; les positions ne sont tenues qu’en un seul sens à la fois; les arrêts de position d’origine sont directement inversés et ne sont pas configurés de la même manière que les arrêts d’ATR; il existe un paramètre de suivi des arrêts pour verrouiller les bénéfices.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Les règles de décision sont claires et simplesIl est facile à comprendre et facile à optimiser les paramètres.

  2. Sélectionnez avec souplesse les types de moyennes mobilesIl y a une douzaine de moyennes mobiles parmi lesquelles choisir et qui peuvent être combinées de manière flexible pour trouver les meilleurs paramètres.

  3. La résolution peut être ajustée de manière flexiblePour rendre les signaux plus sensibles et plus rapides, la résolution de la stratégie peut être réglée à 3 à 4 fois celle du graphique.

  4. Il y a un mécanisme de coupe.│ une stratégie de suivi des stop-loss, permettant de contrôler efficacement les pertes individuelles et les retraits │

  5. Temps de détention personnalisableLa volatilité et la période de détention peuvent être contrôlées en ajustant les paramètres des moyennes mobiles.

  6. Résultats de l’analyseLe niveau de risque peut être contrôlé en ajustant le nombre de points d’arrêt et le décalage.

Analyse des risques

Cette stratégie comporte également des risques, principalement liés aux aspects suivants:

  1. Le point de basculement manquéLes signaux de sortie de cette stratégie peuvent être un peu plus tardifs que la reprise des cours, ce qui entraîne une traînée. Cela peut être atténué en raccourcissant de manière appropriée la période des moyennes mobiles.

  2. Une ville qui ne s’adapte pas aux tremblements de terre❚ Dans des situations de forte volatilité, la stratégie est souvent utilisée pour ouvrir ou fermer des positions, ce qui entraîne un lourd fardeau de frais de transaction. ❚ Dans ce cas, il est possible d’assouplir le nombre de points de perte ou de prolonger le cycle de la moyenne mobile.

  3. Un seul critère❚ La stratégie est basée sur un seul ensemble d’indicateurs et est vulnérable à l’effet de la défaillance. La logique de la stratégie peut être enrichie par l’introduction d’autres indicateurs similaires, tels que le MACD.

  4. Les paramètres sont faciles à optimiserLes paramètres des moyennes mobiles et des paramètres de stop-loss sont susceptibles d’être sur-optimisés, et la performance réelle peut être inférieure à la rétroaction. Le choix des paramètres doit être considéré avec prudence.

Direction d’optimisation

Cette stratégie peut être optimisée dans les directions suivantes:

  1. Composé d’autres indicateursIl est possible d’essayer d’introduire des indicateurs d’augmentation, de volatilité, etc. pour enrichir la logique de la stratégie et améliorer la stabilité.

  2. Modification de paramètres à cyclesIl est possible de combiner le type de marché et l’ajustement dynamique des paramètres des moyennes mobiles pour allonger le cycle en cas de tendance et le raccourcir en cas de choc.

  3. Adaptation dynamique des mesures de risqueLe nombre de points d’arrêt et le décalage peuvent être ajustés dynamiquement en fonction des fluctuations réelles sur une période récente.

  4. Renforcement de la logique de stop loss◦ Les stop-loss existants sont basés uniquement sur le prix et le nombre de points, mais des stop-loss plus riches tels que l’introduction de l’ATR peuvent être envisagés.

Résumer

La stratégie de suivi de la tendance des moyennes mobiles croisées à l’ouverture et à la clôture est une stratégie plus typique pour juger de la direction de la tendance en fonction des relations de clôture et de clôture à l’ouverture. Elle présente des avantages tels que la simplicité des règles de décision, la clarté, la flexibilité et la maîtrise des risques. Elle présente également des problèmes tels que les points de retournement erronés et les chocs violents inappropriés.

Code source de la stratégie
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title = "Open Close Cross Strategy (PineScript=v4)", shorttitle = "OCC Strategy", overlay = true )

// Revision:        1
// Author:          @JayRogers
//
// Description:
//  - Strategy based around Open-Close Crossovers.
// Setup:
//  - I have generally found that setting the strategy resolution to 3-4x that of the chart you are viewing
//    tends to yield the best results, regardless of which MA option you may choose (if any)
//  - Don't aim for perfection. Just aim to get a reasonably snug fit with the O-C band, with good runs of
//    green and red.
//  - Option to either use basic open and close series data, or pick your poison with a wide array of MA types.
//  - Optional trailing stop for damage mitigation if desired (can be toggled on/off)
//  - Positions get taken automagically following a crossover - which is why it's better to set the resolution
//    of the script greater than that of your chart, so that the trades get taken sooner rather than later.
//  - If you make use of the trailing stops, be sure to take your time tweaking the values. Cutting it too fine
//    will cost you profits but keep you safer, while letting them loose could lead to more drawdown than you
//    can handle.

// === INPUTS ===
useRes = input(defval=true, title="Use Alternate Resolution? ( recommended )")
stratRes = input(defval="120", title="Set Resolution ( should not be lower than chart )", type=input.resolution)
useMA = input(defval=true, title="Use MA? ( otherwise use simple Open/Close data )")
basisType = input(defval="DEMA", title="MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )", type=input.string)
basisLen = input(defval=14, title="MA Period", minval=1)
offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0)
offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01)
useStop = input(defval=true, title="Use Trailing Stop?")
slPoints = input(defval=200, title="Stop Loss Trail Points", minval=1)
slOffset = input(defval=400, title="Stop Loss Trail Offset", minval=1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
    v1 = sma(src, len)  // Simple
    v2 = ema(src, len)  // Exponential
    v3 = 2 * v2 - ema(v2, len)  // Double Exponential
    v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)  // Triple Exponential
    v5 = wma(src, len)  // Weighted
    v6 = vwma(src, len)  // Volume Weighted
    sma_1 = sma(src, len)  // Smoothed
    v7 = na(v5[1]) ? sma_1 : (v5[1] * (len - 1) + src) / len
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))  // Hull
    v9 = linreg(src, len, offSig)  // Least Squares
    v10 = alma(src, len, offALMA, offSig)  // Arnaud Legoux
    type == "EMA" ? v2 : type == "DEMA" ? v3 : type == "TEMA" ? v4 : 
       type == "WMA" ? v5 : type == "VWMA" ? v6 : type == "SMMA" ? v7 : 
       type == "HullMA" ? v8 : type == "LSMA" ? v9 : type == "ALMA" ? v10 : v1
// security wrapper for repeat calls
reso(exp, use, res) =>
    security_1 = security(syminfo.tickerid, res, exp)
    use ? security_1 : exp
// === /BASE FUNCTIONS ===

// === SERIES SETUP ===
// open/close
variant__1 = variant(basisType, close, basisLen, offsetSigma, offsetALMA)
reso__1 = reso(variant__1, useRes, stratRes)
reso__2 = reso(close, useRes, stratRes)
closeSeries = useMA ? reso__1 : reso__2
variant__2 = variant(basisType, open, basisLen, offsetSigma, offsetALMA)
reso__3 = reso(variant__2, useRes, stratRes)
reso__4 = reso(open, useRes, stratRes)
openSeries = useMA ? reso__3 : reso__4
trendState = bool(na)
trendState := closeSeries > openSeries ? true : 
   closeSeries < openSeries ? false : trendState[1]
// === /SERIES ===

// === PLOTTING ===
barcolor(color=closeSeries > openSeries ? #006600 : #990000, title="Bar Colours")
// channel outline
closePlot = plot(closeSeries, title="Close Line", color=#009900, linewidth=2, style=plot.style_line, transp=90)
openPlot = plot(openSeries, title="Open Line", color=#CC0000, linewidth=2, style=plot.style_line, transp=90)
// channel fill
closePlotU = plot(trendState ? closeSeries : na, transp=100, editable=false)
openPlotU = plot(trendState ? openSeries : na, transp=100, editable=false)
closePlotD = plot(trendState ? na : closeSeries, transp=100, editable=false)
openPlotD = plot(trendState ? na : openSeries, transp=100, editable=false)
fill(openPlotU, closePlotU, title="Up Trend Fill", color=#009900, transp=40)
fill(openPlotD, closePlotD, title="Down Trend Fill", color=#CC0000, transp=40)
// === /PLOTTING ===

// === STRATEGY ===
// conditions
longCond = crossover(closeSeries, openSeries)
shortCond = crossunder(closeSeries, openSeries)
// entries and base exit
strategy.entry("long", strategy.long, when=longCond)
strategy.entry("short", strategy.short, when=shortCond)
// if we're using the trailing stop
if useStop
    strategy.exit("XL", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    strategy.exit("XS", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
// not sure needed, but just incase..
strategy.exit("XL", from_entry="long", when=shortCond)
strategy.exit("XS", from_entry="short", when=longCond)
// === /STRATEGY ===