Stratégie de négociation croisée rapide QQE basée sur le filtre de tendance

Auteur:ChaoZhang est là., Date: 2024-01-25 11:34:58 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie de trading de croisement rapide QQE basée sur le filtre de tendance est une stratégie de trading qui utilise des croisements rapides QQE avec des moyennes mobiles pour le filtrage de la direction de tendance.

  • Le signal RSI traverse le zéro (XZERO)
  • Signal RSI traversant la ligne rapide RSIatr (XQQE)
  • Le signal RSI sortant du canal de seuil RSI (acheter/vendre)

Les alertes (achat/vente) peuvent être filtrées en fonction des moyennes mobiles:

  • Pour l'alerte BUY, la clôture doit être supérieure à la MA rapide et à la MA rapide (EMA8) > à la MA moyenne (EMA20) > à la MA lente (SMA50).
  • Pour l'alerte SELL, la clôture doit être inférieure à la MA rapide et à la MA rapide (EMA8) < moyenne MA (EMA20) < lente MA (SMA50).

ou filtre directionnel:

  • Pour l'alerte BUY, la clôture doit être située au-dessus du MA lent (SMA50) et le MA directionnel (EMA20) doit être vert.
  • Pour l'alerte SELL, la clôture doit être en dessous de la MA lente (SMA50) et la MA directionnelle (EMA20) doit être rouge.

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

Cette stratégie devrait fonctionner sur n'importe quelle paire de devises et la plupart des délais de graphique.

Principe de stratégie

L'idée de base de cette stratégie est d'utiliser le croisement directionnel de l'indicateur QQE rapide comme signaux de négociation et de filtrer les signaux de négociation bruyants par la combinaison de moyennes mobiles pour capturer la direction de la tendance.

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

Indicateur de QQE rapide: Il s'agit d'un indicateur basé sur le RSI avec des lissages supplémentaires pour le rendre plus sensible et rapide. L'indicateur se compose de trois lignes: la ligne du milieu est la moyenne mobile exponentielle du RSI, la ligne supérieure est la ligne du milieu + ATR rapide * un facteur, et la ligne inférieure est la ligne du milieu - ATR rapide * un facteur. Lorsque le RSI dépasse la ligne supérieure, c'est un signal de vente. Lorsque le RSI dépasse la ligne inférieure, c'est un signal d'achat.

Le croisement de la ligne zéro: Il génère des signaux lorsque la ligne médiane du RSI traverse la ligne zéro. Le croisement ascendant est un signal d'achat et le croisement descendant est un signal de vente. Ces signaux indiquent le prélude des changements de tendance.

- Une rupture de canal.: Il génère des signaux lorsque la ligne médiane du RSI entre dans le canal de seuil défini.

Combo de moyenne mobile: Utilisez une combinaison de moyennes mobiles rapides (8 périodes), moyennes (20 périodes) et lentes (50 périodes). Lorsque les trois lignes sont disposées comme suit: rapide > moyen > lent, il s'agit d'une tendance à la hausse. Lorsqu'elles sont disposées comme rapide < moyen < lent, il s'agit d'une tendance à la baisse.

Filtre de direction de tendance: Un signal d'achat n'est généré que lorsque le prix de clôture est supérieur à la moyenne mobile lente et que la moyenne mobile moyenne (20 périodes) est à la hausse (prix le plus élevé de la période > prix le plus bas). Un signal de vente n'est généré que lorsque le prix de clôture est inférieur à la moyenne mobile lente et que la moyenne mobile moyenne (20 périodes) est à la baisse.

En combinant l'utilisation de signaux croisés de l'indicateur QQE rapide et le filtrage des tendances à partir des moyennes mobiles, il capte les points d'inversion à court terme sur les principales tendances des délais pour former un système de négociation relativement complet.

En résumé, il s'agit d'une stratégie qui suit les tendances à moyen et à long terme, utilise des indicateurs rapides pour capturer le moment des renversements à court terme pour l'entrée/sortie et utilise le filtrage des moyennes mobiles pour réduire le risque de négociation contre la direction et ainsi maximiser les rendements.

Les avantages de la stratégie

  • Utilise un indicateur QQE rapide et sensible pour capturer rapidement les signaux d'inversion
  • Applique plusieurs moyennes mobiles pour déterminer la direction du cycle et éviter de négocier contre tendance
  • Inclut plusieurs signaux croisés pouvant être utilisés en combinaison pour augmenter les opportunités de profit
  • Paramètres réglables pouvant être optimisés pour différents produits et délais
  • Utilise les propres signaux de rupture de canal de l'indicateur au lieu de dessiner des canaux séparés, évitant la dépendance des paramètres
  • Capte très bien les mouvements d'inversion à court terme dans les grands cycles de tendance
  • Des concepts simples et clairs, faciles à comprendre et à mettre en œuvre

Risques liés à la stratégie

Cette stratégie comporte également des risques potentiels:

  • Les indicateurs rapides ont tendance à produire de faux signaux qui ne peuvent pas être complètement filtrés par les moyennes mobiles, il existe un risque de suivi dans une mauvaise direction.
  • Lorsque l'on observe un grand renversement de tendance cyclique, des signaux commerciaux inversés tendent à se former, ce qui pose des risques.
  • Aucune prise en compte des facteurs de gestion de l'argent, des risques de sur-trading et des pertes n'existe pas
  • Aucun stop loss en place, les risques d'expansion des pertes sont importants
  • Risque d'ajustement des données des tests antérieurs, la performance réelle reste à vérifier

Les contre-mesures et les solutions comprennent:

  • Ajustez les paramètres des moyennes mobiles, utilisez plus de longueurs de cycle pour déterminer les tendances
  • Ajouter d'autres indicateurs comme le MACD, le biais, etc. pour le filtrage des combinaisons
  • Ajouter des stratégies de stop loss pour contrôler la taille des pertes d'une seule transaction
  • Tests en argent réel, optimisation des paramètres

Directions d'optimisation

Cette stratégie peut être encore optimisée:

  1. Optimiser les paramètres de ligne rapide et lente de l'indicateur QQE pour trouver la combinaison optimale de paramètres
  2. Testez plus de combinaisons de moyennes mobiles pour trouver des performances de filtrage optimales
  3. Ajouter d'autres indicateurs comme le MACD pour le filtrage auxiliaire du signal
  4. Appliquer des stratégies de gestion de fonds pour optimiser la taille des positions
  5. Définir une stratégie de stop loss pour contrôler le risque à la baisse par transaction
  6. Optimiser les paramètres en fonction des différents produits
  7. Déterminer la tendance sur des délais encore plus longs pour éviter d'être induit en erreur par des renversements à court terme

Avec l'optimisation des paramètres, la combinaison de plus d'indicateurs et l'aide de pratiques réalisables de gestion de l'argent et du risque, la performance de cette stratégie peut être améliorée pour le trading réel.

Conclusion

Dans l'ensemble, la stratégie de trading croisée rapide QQE basée sur le filtre de tendance est un choix très considérable. Sa force réside dans la capture rapide des opportunités de trading d'inversion tout en utilisant plusieurs moyennes mobiles pour déterminer les tendances majeures et éviter autant que possible de négocier contre elles. Avec l'optimisation des paramètres des indicateurs et des critères de filtrage, couplée à une gestion stricte de l'argent, cette stratégie peut générer des rendements d'investissement relativement stables.

Bien sûr, les risques ne peuvent pas être ignorés. Les tests en argent réel et les ajustements d'optimisation continus sont nécessaires pour assurer la praticité et la fiabilité de la stratégie. En conclusion, il est utile pour les investisseurs d'étudier et de suivre la pratique à long terme. On pense qu'avec l'avancement des technologies de trading algorithmique, ce type de stratégies basées sur des indicateurs rapides et le filtrage des tendances verront de nouvelles améliorations et prolifération.


/*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

Plus de