Cette stratégie utilise l'indicateur de l'oscillateur de prix absolu (APO) pour générer des signaux de négociation et suivre les tendances.
L'APO se compose d'une EMA plus rapide et d'une EMA plus lente, en prenant la différence entre elles.
Lorsque l'APO dépasse la zone d'achat (par défaut 3), passez long.
Option d'inversion des signaux - croisement au-dessus des ventes, croisement au-dessous des achats.
La courbe montre l'élan des prix, peut trouver des renversements sur la divergence.
Il s'agit d'une stratégie de suivi de tendance, utilisant l'APO pour déterminer la direction de la tendance pour les signaux longs / courts soutenus.
Mise en œuvre simple en utilisant une combinaison de moyennes mobiles de base.
L'APO mesure l'élan et la direction des prix.
Les paramètres par défaut génèrent des signaux soutenus à moyen terme, évitant ainsi une survente.
Peut détecter les renversements de tendance basés sur la divergence prix/indicateur.
Prédisposé à de faux signaux et à des fléchissures sur les marchés.
Les signaux de retard peuvent manquer des retours rapides.
Aucun stop loss ou dimensionnement des positions, gestion incomplète des risques.
Les mesures d'atténuation
Optimiser les paramètres et tester différentes combinaisons par instrument.
Ajoutez des filtres pour éviter de négocier dans des conditions instables.
Mettre en œuvre un arrêt des pertes, par exemple un arrêt de trailing.
Optimisation des paramètres pour chaque instrument afin de trouver des paires idéales.
Filtres supplémentaires sur l'action des prix ou le volume pour réduire les faux signaux.
La taille dynamique des positions est basée sur la volatilité ou le pourcentage du compte.
Optimisé pour prendre des bénéfices tels que le trailing stop pour suivre les tendances.
ML pour évaluer la probabilité de succès des signaux de divergence.
Ce système de croisement EMA utilisant APO fournit une base solide pour suivre les tendances. Avec des optimisations dans les paramètres, la gestion des risques et les filtres, il peut devenir une stratégie quantitative efficace. Le concept de base est simple et robuste pour un développement ultérieur.
/*backtest start: 2022-09-14 00:00:00 end: 2023-09-20 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 20/09/2018 // The Absolute Price Oscillator displays the difference between two exponential // moving averages of a security's price and is expressed as an absolute value. // How this indicator works // APO crossing above zero is considered bullish, while crossing below zero is bearish. // A positive indicator value indicates an upward movement, while negative readings // signal a downward trend. // Divergences form when a new high or low in price is not confirmed by the Absolute Price // Oscillator (APO). A bullish divergence forms when price make a lower low, but the APO // forms a higher low. This indicates less downward momentum that could foreshadow a bullish // reversal. A bearish divergence forms when price makes a higher high, but the APO forms a // lower high. This shows less upward momentum that could foreshadow a bearish reversal. // // You can change long to short in the Input Settings // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// strategy(title="Absolute Price Oscillator (APO) Backtest 2.0", shorttitle="APO") LengthShortEMA = input(10, minval=1) LengthLongEMA = input(20, minval=1) BuyZone = input(3, step = 0.01) SellZone = input(-3, step = 0.01) reverse = input(false, title="Trade reverse") hline(BuyZone, color=green, linestyle=line) hline(SellZone, color=red, linestyle=line) hline(0, color=gray, linestyle=line) xPrice = close xShortEMA = ema(xPrice, LengthShortEMA) xLongEMA = ema(xPrice, LengthLongEMA) xAPO = xShortEMA - xLongEMA pos = iff(xAPO > BuyZone, 1, iff(xAPO < SellZone, -1, nz(pos[1], 0))) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)) if (possig == 1) strategy.entry("Long", strategy.long) if (possig == -1) strategy.entry("Short", strategy.short) barcolor(possig == -1 ? red: possig == 1 ? green : blue ) plot(xAPO, color=blue, title="APO")