Stratégie de croisement QQE rapide basée sur le filtrage des tendances


Date de création: 2024-01-25 11:34:58 Dernière modification: 2024-01-25 11:34:58
Copier: 1 Nombre de clics: 1235
1
Suivre
1617
Abonnés

Stratégie de croisement QQE rapide basée sur le filtrage des tendances

Aperçu

La stratégie de croisement rapide QQE basée sur un filtrage de tendance est une stratégie de trading qui suit une tendance et qui filtre la direction de la tendance à l’aide d’un croisement rapide QQE et d’une moyenne mobile. Les estimations quantitatives qualitatives ou qualitatives sont basées sur l’indice de force relative, mais utilisent la technique de lissage comme conversion supplémentaire.

  • Le signal RSI se trouve à la ligne zéro (XZERO)
  • Les signaux RSI se croisent rapidement sur les lignes RSIatr ((XQQE)
  • Les signaux RSI sortent du canal de dépréciation du RSI (achat/vente)

Les signaux d’achat/vente peuvent être filtrés optionnellement à l’aide d’une moyenne mobile:

  • Pour un signal d’achat, le prix de clôture doit être supérieur à la moyenne mobile rapide et la moyenne mobile rapide (EMA8) > moyenne moyenne (EMA20) > moyenne mobile lente (SMA50)
  • Pour un signal de vente, le prix de clôture doit être inférieur à la moyenne mobile rapide et la moyenne mobile rapide (EMA8) < moyenne mobile (EMA20) < moyenne mobile lente (SMA50)

et/ou filtre de direction de tendance:

  • Pour un signal d’achat, le prix de clôture doit être supérieur à la moyenne mobile lente (SMA50) et la moyenne mobile directionnelle (EMA20) doit être verte.
  • Pour un signal de vente, le prix de clôture doit être inférieur à la moyenne mobile lente (SMA50) et la moyenne mobile directionnelle (EMA20) doit être rouge.

XZERO et XQQE ne sont pas inclus dans le filtrage, ils sont utilisés pour indiquer les signaux d’achat/vente en attente, en particulier XZERO.

Cette stratégie devrait fonctionner sur n’importe quelle paire de devises et sur la plupart des graphiques de périodes.

Principe de stratégie

L’idée centrale de cette stratégie est d’utiliser la croisée directionnelle de l’indicateur QQE rapide comme signal de négociation et de filtrer le bruit des signaux de négociation par une combinaison de moyennes mobiles afin de capturer la direction de la tendance.

Plus précisément, la stratégie utilise les indicateurs et signaux suivants:

Indicateur QQE rapide: c’est un indicateur basé sur le RSI, avec un traitement de lissage supplémentaire pour le rendre plus sensible et plus rapide. L’indicateur est composé de trois lignes: le milieu de l’orbite est la moyenne mobile du RSI, le haut de l’orbite est le + ATR rapide * un facteur, le bas de l’orbite est le - ATR rapide * un facteur.

Le croisement de la ligne zéro: Lorsque le RSI intersecte la ligne zéro, un signe de croisement vers le haut est un signe d’achat et un signe de croisement vers le bas est un signe de vente. Ces signaux sont les précurseurs d’un changement de tendance.

Une brèche dans le canal: Lorsque l’orbite moyenne du RSI entre dans le canal de seuil défini, un signal est généré, une rupture du canal supérieur est un signal de vente, une rupture du canal inférieur est un signal d’achat. Ce sont des signaux de tendance plus forts.

La combinaison des moyennes mobiles: Utilisation de trois groupes de moyennes mobiles rapides et lentes, les lignes rapides sont de 8 cycles, les lignes moyennes sont de 20 cycles et les lignes lentes sont de 50 cycles. Lorsque les trois lignes sont disposées comme: Rapide> Moyen> Lente pour la tendance à la hausse, quand il est rapide < Moyen < Lente pour la tendance à la baisse. La combinaison est utilisée pour déterminer la direction de la tendance globale.

Filtrage de la tendance: le prix de clôture génère un signal d’achat lorsque le prix est au-dessus de la moyenne mobile lente et au-dessus de la moyenne mobile lente ((le prix le plus élevé> le prix le plus bas de ce cycle); le prix de clôture génère un signal de vente lorsque le prix est au-dessous de la moyenne mobile lente et que la moyenne mobile lente est en baisse. Cela permet de filtrer certains faux signaux inversés.

En combinant l’utilisation de signaux croisés d’indicateurs rapides QQE et le filtrage de tendance des moyennes mobiles, il est possible de capturer des revers à court et moyen terme dans la direction de la tendance sur de plus grandes périodes de temps, formant un système de négociation relativement complet. En même temps, les paramètres de l’indicateur sont plus sensibles et peuvent capturer les revers de tendance le plus tôt possible.

Dans l’ensemble, il s’agit d’une stratégie de suivi des tendances à moyen et long terme, de capture des opportunités d’achat/vente inversées à court terme via des indicateurs rapides et de filtrage des moyennes mobiles pour réduire le risque d’opérations inversées et maximiser les gains.

Avantages stratégiques

  • Utilisation d’un indicateur QQE sensible à la vitesse pour capturer rapidement les signaux de retournement
  • Utiliser des moyennes mobiles à plusieurs groupes pour déterminer la direction du grand cycle et éviter les inversions
  • Il contient plusieurs signaux croisés qui peuvent être combinés pour améliorer les chances de gagner.
  • Les paramètres sont réglables et peuvent être optimisés pour différentes variétés et cycles
  • Utilisation d’un signal de rupture de canal avec l’indicateur lui-même, sans canal indépendant, pour éviter la dépendance des paramètres
  • Il est bon de saisir les retournements à court terme dans la tendance générale de la ligne moyenne et longue.
  • Les concepts sont simples, clairs, faciles à comprendre et à mettre en œuvre

Risque stratégique

Cette stratégie comporte aussi des risques potentiels:

  • Les indicateurs rapides sont susceptibles de générer de faux signaux, les moyennes mobiles ne peuvent pas être complètement filtrées et il existe un risque de suivre la mauvaise direction
  • Les signaux de trading inversés qui sont sujets au risque lors d’un retournement du grand cycle
  • Le risque de pertes en raison d’un volume de transactions excessif sans tenir compte des facteurs liés à la gestion des fonds
  • Aucun paramètre de stop-loss, plus de risque d’augmentation des pertes
  • Résultats de l’analyse des données sur les risques d’adaptation et la validation de l’efficacité sur disque dur

Les mesures et les solutions comprennent:

  • Ajustement des paramètres de la moyenne mobile afin d’utiliser plus de cycles pour juger des tendances
  • Ajouter des filtres de combinaison d’autres indicateurs, tels que MACD, le biais, etc.
  • Adhésion à une stratégie de stop loss pour contrôler les pertes individuelles
  • Paramètres de vérification et d’optimisation

Orientation de l’optimisation de la stratégie

Il y a encore de la place pour optimiser cette stratégie:

  1. Optimisation des paramètres de la ligne rapide et lente de l’indicateur QQE pour trouver la meilleure combinaison de paramètres
  2. Test plus de combinaisons de moyennes mobiles pour trouver le meilleur filtrage
  3. Ajout d’une combinaison d’autres indicateurs, tels que le MACD, pour aider au filtrage des signaux
  4. Appliquer des stratégies de gestion des fonds et optimiser la gestion des positions
  5. Définir une stratégie de stop-loss pour maîtriser le risque de perte individuelle
  6. Optimisation pour différents paramètres de variété
  7. Ne vous laissez pas induire en erreur par les inversions à court terme en jugeant les tendances à des cycles plus élevés

L’optimisation des paramètres, l’intégration de plus d’indicateurs et la mise en place d’outils de gestion des fonds et des risques viables devraient améliorer la performance de la stratégie sur le terrain.

Résumer

Dans l’ensemble, la stratégie de croisement rapide QQE basée sur le filtrage de tendances est une option très intéressante à considérer. Son avantage réside dans la rapidité avec laquelle elle saisit les opportunités de revers, tout en utilisant plusieurs groupes de moyennes mobiles pour juger de la tendance et éviter les erreurs de revers. En optimisant les paramètres de l’indicateur et les conditions de filtrage, et en s’accompagnant d’une gestion rigoureuse des fonds, la stratégie permet d’obtenir des rendements relativement stables sur les investissements.

Bien sûr, les risques ne peuvent pas être ignorés, la vérification en laboratoire et l’ajustement continu de l’optimisation sont nécessaires pour assurer la praticité et la fiabilité des stratégies. En général, les investisseurs méritent d’apprendre et de suivre les pratiques à long terme.

Code source de la stratégie
/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//
// Title:   [STRATEGY][UL]QQE Cross v1.1
// Author:  JustUncleL
// Date:    22-Oct-2016
// Version: v1.1
//
// Description:
//  A trend following trading Strategy that uses fast QQE crosses with Moving Averages
//  for trend direction filtering. QQE or Qualitative Quantitative Estimation is based 
//  on the relative strength index, but uses a smoothing technique as an additional 
//  transformation. Three crosses can be selected (all selected by default): 
//    - RSI signal crossing ZERO (XZERO)
//    - RSI signal crossing Fast RSIatr line (XQQE)
//    - RSI signal exiting the RSI Threshhold Channel (BUY/SELL)
//  The (BUY/SELL) alerts can be optionally filtered by the Moving averages:
//    - For BUY alert the Close must be above the fast MA and 
//        fast MA (EMA8) > medium MA (EMA20) > slow MA (SMA50).
//    - For SELL alert the Close must be below the fast MA and
//        fast MA (EMA8) < medium MA (EMA20) < slow MA (SMA50).
//  and/or directional filter:
//    - For BUY alert the Close must be above the slow MA (SMA50) and the
//      directional MA (EMA20) must be green.
//    - For SELL alert the Close must be below the slow MA (SMA50) and the
//      directional MA (EMA20) must be red.
//. The XZERO and XQQE are not included in the filtering, they are used to indicate
//  pending BUY/SELL alerts, particularly the XZERO. 
//
//  This Strategy should work on any currency pair and most chart timeframes.
//  *** USE AT YOUR OWN RISK ***
//  
// 
//
// Mofidifications:
//  1.1 - Added Target Profit option, cleaned up the risk management code.
//        Changed Trade Close to EMA20 direction change instead of opposite BUY/SELL
//        signal, which will be earlier, this means stop loss setting should not be
//        required when an AutoTrader is available.
//        Modified code to prevent potential repaint issues.
//  1.0 - original
//
// References:
//  Some Code borrowed from:
//  - "Scalp Jockey - MTF MA Cross Visual Strategizer by JayRogers"
//  - "QQE MT4 by glaz"
//  - "Strategy Code Example by JayRogers"  
//  Inspiration from:
//  - http://www.forexstrategiesresources.com/binary-options-strategies-ii/189-aurora-binary-trading/
//  - http://www.forexstrategiesresources.com/metatrader-4-trading-systems-v/652-qqe-smoothed-trading/
//  - http://dewinforex.com/forex-indicators/qqe-indicator-not-quite-grail-but-accurately-defines-trend-and-flat.html
//

strategy(title='[STRATEGY][UL]QQE Cross v1.1', pyramiding=0, overlay=true )


// - INPUTS START
// Fast MA - type, source, length
type1   = input(defval="EMA", title="Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len1    = input(defval=8, title="Fast - Length", minval=1)
// Medium Fast MA - type, source, length
type2   = input(defval="EMA", title="Medium Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA ( case sensitive )")
len2    = input(defval=20, title="Medium Fast - Length", minval=1)
// Slow MA - type, source, length
type3   = input(defval="SMA", title="Slow MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, LSMA, ZEMA ( case sensitive )")
len3    = input(defval=50, title="Slow Length", minval=1)
//
// QQE rsi Length, Smoothing, fast ATR factor, source
RSILen  = input(6,title='RSI Length')
SF      = input(3,title='RSI Smoothing Factor')
QQE     = input(2.618,title='Fast QQE Factor')
threshhold = input(10, title="RSI Threshhold")
//
sQQEx   = input(false,title="Show QQE Signal crosses")
sQQEz   = input(false,title="Show QQE Zero crosses")
//
filter  = input(false,title="Use Moving Average Filter")
dfilter = input(true, title="Use Trend Directional Filter" )
RSIsrc  = input(close,title="Source")
srcclose= RSIsrc

// - INPUTS END

// - FUNCTIONS

// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v3 = wma(src, len)                                                  // Weighted
    v4 = vwma(src, len)                                                 // Volume Weighted
    v5 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len    // Smoothed
    v6 = 2 * v2 - ema(v2, len)                                          // Double Exponential
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)               // Triple Exponential
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))   // Hull
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)                                              // Zero Lag Exponential
    // return variant, defaults to SMA if input invalid.
    type=="EMA"?v2 : type=="WMA"?v3 : type=="VWMA"?v4 : type=="SMMA"?v5 : type=="DEMA"?v6 : type=="TEMA"?v7 : type=="HullMA"?v8 : type=="ZEMA"?v10 : v1

// - FUNCTIONS END

// - Fast ATR QQE
//
Wilders_Period = RSILen * 2 - 1
//
Rsi = rsi(RSIsrc,RSILen)
RSIndex = ema(Rsi, SF)
AtrRsi = abs(RSIndex[1] - RSIndex)
MaAtrRsi = ema(AtrRsi, Wilders_Period)
DeltaFastAtrRsi = ema(MaAtrRsi,Wilders_Period) * QQE
//
newshortband=  RSIndex + DeltaFastAtrRsi
newlongband= RSIndex - DeltaFastAtrRsi
longband=RSIndex[1] > longband[1] and RSIndex > longband[1] ? max(longband[1],newlongband) : newlongband
shortband=RSIndex[1] < shortband[1] and  RSIndex < shortband[1] ? min(shortband[1],newshortband) : newshortband
trend=cross(RSIndex, shortband[1])? 1 : cross(longband[1], RSIndex) ? -1 : nz(trend[1],1)
FastAtrRsiTL = trend==1 ? longband : shortband


// - SERIES VARIABLES
// MA's
ma_fast    = variant(type1, srcclose, len1)
ma_medium  = variant(type2, srcclose, len2)
ma_slow    = variant(type3, srcclose, len3)
// Get Direction From Medium Moving Average
direction = rising(ma_medium,3) ? 1 : falling(ma_medium,3) ? -1 : 0
//
// Find all the QQE Crosses
QQExshort = sQQEx and crossover(FastAtrRsiTL, RSIndex)
QQExlong  = sQQEx and crossunder(FastAtrRsiTL, RSIndex)
// Zero cross
QQEzlong = sQQEz and crossover(RSIndex,50)
QQEzshort  = sQQEz and crossunder(RSIndex,50)
//  
// Thresh Hold channel Crosses give the BUY/SELL alerts.
QQEclong = RSIndex>(50+threshhold) ? na(QQEclong[1]) ? 1 : QQEclong[1]+1 : 0
QQEcshort = RSIndex<(50-threshhold) ? na(QQEcshort[1]) ? 1 : QQEcshort[1]+1 : 0

//
// Check Filtering.
QQEflong = (not filter or (srcclose>ma_fast and ma_medium>ma_slow and ma_fast>ma_medium)) and 
  (not dfilter or (direction>0 and srcclose>ma_slow))
QQEfshort = (not filter or (srcclose<ma_fast and ma_medium<ma_slow and ma_fast<ma_medium)) and
  (not dfilter or (direction<0 and srcclose<ma_slow))
//
// Get final BUY / SELL alert determination
buy = QQEclong>0 and QQEflong ? na(buy[1]) ? 1 : buy[1]+1 : 0
sell= QQEcshort>0 and QQEfshort ? na(sell[1]) ? 1 : sell[1]+1 : 0

// - SERIES VARIABLES END

// - PLOTTING
// Ma's
plot(ma_fast, title="MA Fast", color=olive, linewidth=2, transp=20)
plot(ma_medium, title="MA Medium Fast", color=direction<0?red:green, linewidth=3, transp=0)
plot(ma_slow, title="MA Slow", color=blue, linewidth=2, transp=20)
// QQE crosses
plotshape(QQExlong and buy!=1, title="QQE Cross Over", style=shape.triangleup, location=location.belowbar, text="XQQE", color=blue, transp=20, size=size.tiny)
plotshape(QQExshort and sell!=1, title="QQE Cross Under", style=shape.triangledown, location=location.abovebar, text="XQQE", color=black, transp=20, size=size.tiny)
// Signal crosses zero line
plotshape(QQEzlong and buy!=1 and not QQExlong, title="QQE Zero Cross Over", style=shape.triangleup, location=location.belowbar, text="XZERO", color=aqua, transp=20, size=size.tiny)
plotshape(QQEzshort and sell!=1 and not QQExshort, title="QQE Zero Cross Under", style=shape.triangledown, location=location.abovebar, text="XZERO", color=fuchsia, transp=20, size=size.tiny)

// - PLOTTING END

// Create alert for cross, shunt back 1 if source is not 'open', this should prevent repaint issue.
//shunt = RSIsrc == open ? 0 : 1
shunt = 0
c_alert = (buy[shunt]==1 or sell[shunt]==1)
//alertcondition(c_alert, title="QQECROSS Alert", message="QQECROSS Alert")
// show only when alert condition is met and bar closed.
plotshape(c_alert,title= "Alert Indicator Closed", location=location.bottom, color=sell[shunt]==1?red:green, transp=0, style=shape.circle)


//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry(id = "Buy", long = true, when = buy[shunt]==1 )// use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = direction[shunt]!=direction[shunt+1])// ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry(id = "Sell", long = false, when = sell[shunt]==1)
strategy.close(id = "Sell", when = direction[shunt]!=direction[shunt+1])

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

//eof