Cette stratégie construit un canal de prix basé sur l'indicateur Bollinger Bands et l'indicateur Momentum Oscillating Moving Average, générant des signaux de trading lorsque le prix franchit la limite supérieure ou inférieure du canal.
La stratégie construit un canal de prix en utilisant la bande moyenne de Bollinger et la moyenne mobile oscillant de l'élan. La bande moyenne adopte la bande moyenne de Bollinger à 21 périodes. Les bandes supérieure et inférieure s'étirent respectivement vers le haut et vers le bas pour une plage de pourcentage. La moyenne mobile oscillant de l'élan s'étire ou se rétrécit près des niveaux de surachat ou de survente basés sur la bande moyenne. Lorsque le prix franchit la bande supérieure, allez long. Lorsque le prix franchit la bande inférieure, allez court.
Plus précisément, la bande moyenne de Bollinger est calculée comme suit:
Middle Band = Moving Average of N-period closing price
La bande supérieure et la bande inférieure sont calculées comme suit:
Upper Band = Middle Band + WidthDev * N-period Bollinger standard deviation
Lower Band = Middle Band - WidthDev * N-period Bollinger standard deviation
Où WidthDev représente la fourchette de pourcentage étendue vers le haut et vers le bas.
Le momentum oscillant moyenne mobile s'étire ou se rétrécit en fonction de la bande du milieu selon certaines règles. Lorsque le marché devient suracheté ou survendu, il s'étend plus loin de la bande du milieu pour fournir plus d'opportunités de long ou de court. Lorsque le marché se calme, il se contracte vers la bande du milieu.
En résumé, cette stratégie dépeint un canal de prix en utilisant les bandes de Bollinger et détermine le moment d'entrée en utilisant la moyenne mobile oscillant de l'élan, réalisant le trading de rupture.
Réflecte la volatilité du marché Les bandes de Bollinger peuvent refléter la volatilité du marché et l'évolution des tendances en temps réel.
Réduit les faux signaux L'effet d'étirement de la moyenne mobile oscillante de l'élan peut réduire efficacement les faux signaux générés par les bandes de Bollinger.
Retour de tendance en temps opportun Le croisement des bandes supérieures et inférieures de BB et de la moyenne mobile oscillante de l'élan fournit un calendrier et un prix avantageux pour générer des signaux de trading, qui peuvent effectivement capter les principaux ajustements haussiers et baissiers et saisir en temps opportun les renversements de tendance.
Paramètres BB incorrects Les paramètres de BB, tels que la période de calcul et le multiplicateur d'écart type, peuvent être réglés de manière incorrecte, ce qui peut entraîner un espacement trop large ou trop étroit entre les bandes, générant des faux signaux excessifs et compromettant la stabilité de la stratégie.
Amplitude d'oscillation excessive L'amplitude d'oscillation excessivement grande de la moyenne mobile oscillante de l'impulsion peut entraîner des points d'arrêt de perte trop éloignés, ce qui augmente le risque de perte.
Réversion retardée
Lorsque le marché est oscillant ou sans tendance, les signaux de trading de BB et de Momentum Oscillating Moving Average peuvent être retardés, ne reflétant pas les variations de prix dans le temps, ce qui entraîne un risque d'inversion retardée.
Optimiser les paramètres BB Testez différentes périodes, des multiplicateurs d'écart type pour trouver des combinaisons optimales de paramètres qui fournissent une meilleure fréquence de signal et moins de faux signaux.
Optimiser les paramètres de la moyenne mobile oscillante Testez différentes amplitudes et périodes d'oscillation pour trouver des paramètres qui captent mieux les tendances et réduisent le retard du signal.
Ajouter des conditions de filtre Ajouter des filtres tels que les volumes de négociation basés sur des signaux croisés pour exclure les signaux commerciaux inefficaces.
Combinaison de stratégies Combinez cette stratégie avec d'autres stratégies de stop loss ou d'apprentissage automatique pour contrôler davantage les risques et améliorer la stabilité.
Cette stratégie combine les atouts des bandes de Bollinger adaptatives et de la moyenne mobile oscillante de l'élan, permettant d'intégrer le suivi de la tendance et la capture des inversions de tendance. En équilibrant la volatilité du marché et la flexibilité des signaux de trading, elle réalise un trading de rupture stable et efficace. L'optimisation des paramètres et le contrôle des risques sont également essentiels pour tester et régler en fonction des environnements de marché variables.
/*backtest start: 2022-12-29 00:00:00 end: 2024-01-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Hull Cloud v2 by SEASIDE420 strategy("Hull Moving Average Cloud v2", shorttitle="hull_cloud_v2", overlay=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, max_bars_back=200, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0) hullperiod=input(title="HullMA Period",defval=210, minval=1) Width=input(title="Cloud Width",defval=200, minval=2) price=input(ohlc4,title="Price data") FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2017, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => true n2ma=2*wma(price,round(hullperiod/2)) nma=wma(price,hullperiod) diff=n2ma-nma sqn=round(sqrt(hullperiod)) n2ma1=2*wma(price[1],round(hullperiod/2)) nma1=wma(price[1],hullperiod) diff1=n2ma1-nma1 n1=wma(diff,sqn) n2=wma(diff1,sqn) Hull_Line=n1-n1[1]/n2[1] Hull_retracted=if(n1>n2) Hull_retracted=Hull_Line-Width else Hull_retracted=Hull_Line+Width c1=(Hull_retracted*n1)/price[1] c2=(Hull_retracted*n2)/price[1] c4=c1>c2?green:red c2p=plot(c2, color=black, linewidth=1) c3p=plot(price, color=black, linewidth=1) fill(c3p, c2p, color=c4, transp=75) plot(cross(c1, c2) ? c1 : na, style = circles,color=c4, linewidth = 4) if (price<c2) strategy.close("BUY", when=window()) if (price>c2) strategy.close("SELL", when=window()) if (price[1]>c2 and price[1]>c1) strategy.entry("BUY",strategy.long, when=window()) if (price[1]<c1 and price[1]<c2) strategy.entry("SELL",strategy.short, when=window())// /L'-, // ,'-. ` ```` / L '-, // . _,--dMMMM\ ` ` ` '`.. / '-, // : _,--, )MMMMMMMMM),. ` ,<> /_ '-,' // ; ___,--. \MM( `-' )M//MM\ ,',.; .-'* ; .' // | \MMMMMM) \MM\ ,dM//MMM/ ___ < ,; `. )`--' / // | \MM()M MMM)__ /MM(/MP' ___, \ \ ` `. `. /__, ,' // | MMMM/ MMMMMM( /MMMMP'__, \ | / `. `-,_\ / // | MM /MMM---' `--'_ \ |-' |/ `./ .\----.___ // | /MM' `--' __,- \"" |-' |_, `.__) . .F. )-. // | `--' \ \ |-' |_, _,-/ J . . . J-'-. `-., // | __ \`. | | | \ / _ |. . . . \ `-. F // | ___ / \ | `| ' __ \ | /-' F . . . . \ '` // | \ \ \ / | __ / \ | |,-' __,- J . . . . . \ // | | / |/ __,- \ ) \ / |_,- __,--' |. .__.----,' // | |/ ___ \ |'. |/ __,--' `.-;;;;;;;;;\ // | ___ \ \ | | ` __,--' /;;;;;;;;;;;;. // | \ \ |-'\ ' __,--' /;;;;;;;;;;;;;;\ // \ | | / | __,--' `--;;/ \;-'\ // \ | |/ __,--' / / \ \ // \ | __,--' / / \ \ // \|__,--' _,-;M-K, ,;-;\ // <;;;;;;;; '-;;;; // :D