Cette stratégie combine l'indicateur de bande de Bollinger et les indicateurs de volume pour identifier les opportunités de rupture de dynamique forte au-dessus de la bande supérieure de Bollinger lorsque le volume de négociation est élevé et entre dans des positions longues.
Cette stratégie prend principalement en compte trois facteurs: le niveau des prix, l'élan et la tendance. Lorsque le prix dépasse la bande supérieure de Bollinger dans la zone d'achat, une augmentation du volume de négociation indique une forte dynamique et un afflux de capitaux. C'est le bon moment pour entrer dans une position longue.
Des signaux précis, évitant de fausses fuites, combinant un filtre de volume, il n'achète que sur une forte dynamique, réduisant ainsi le risque.
Capable de réduire les pertes dans le temps grâce à la détermination de la tendance des moyennes mobiles, réduisant ainsi les pertes de détention.
Stratégie quantitative mise en œuvre combinant plusieurs indicateurs pour la prise de décision, paramètres flexibles adaptés à différents produits et délais.
Structures de code claires, faciles à lire et à entretenir, conception modulaire du calcul des indicateurs, génération de signaux et gestion de position.
Les bandes de Bollinger pourraient échouer lors de fluctuations de prix extrêmes, manquer de signaux ou générer de faux signaux.
Les signaux d'achat peuvent ne pas être rentables sans un volume de trading suffisant.
La détermination de la tendance des moyennes mobiles pourrait également échouer, ne pouvant pas garantir pleinement un stop loss efficace.
Un mauvais réglage des paramètres affecte également la rentabilité de la stratégie.
Ajouter plus d'indicateurs techniques pour une meilleure analyse de tendance et de support/résistance, améliorant le stop loss, par exemple les modèles de bougies, les canaux, les niveaux de support clés.
Ajouter des modèles d'apprentissage automatique pour juger des possibilités réelles de rupture, réduisant les faux signaux. par exemple, les modèles d'apprentissage profond LSTM.
Optimiser les stratégies de gestion des capitaux telles que la dimensionnement dynamique des positions, le suivi des arrêts de perte pour réduire l'impact des pertes d'un seul commerce.
Testez plus de produits et de délais, ajustez des paramètres comme les bandes de Bollinger, la fenêtre de volume pour améliorer la robustesse de la stratégie.
Cette stratégie intègre les bandes de Bollinger et les indicateurs de volume de négociation pour identifier les opportunités d'achat à forte dynamique, avec des moyennes mobiles garantissant un stop loss efficace.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © KAIST291 //@version=4 initial_capital=1000 strategy("prototype", overlay=true) length1=input(1) length3=input(3) length7=input(7) length9=input(9) length14=input(14) length20=input(20) length60=input(60) length120=input(120) ma1= sma(close,length1) ma3= sma(close,length3) ma7= sma(close,length7) ma9= sma(close,length9) ma14=sma(close,length14) ma20=sma(close,length20) ma60=sma(close,length60) ma120=sma(close,length120) rsi=rsi(close,14) // BUYING VOLUME AND SELLING VOLUME // BV = iff( (high==low), 0, volume*(close-low)/(high-low)) SV = iff( (high==low), 0, volume*(high-close)/(high-low)) vol = iff(volume > 0, volume, 1) dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100) weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100) //----------------------------------------------------------- Davgvol = sma(volume, dailyLength) Wavgvol = sma(volume, weeklyLength) //----------------------------------------------------------- length = input(20, minval=1) src = input(close, title="Source") mult = input(2.0, minval=0.001, maxval=50, title="StdDev") mult2= input(1.5, minval=0.001, maxval=50, title="exp") mult3= input(1.0, minval=0.001, maxval=50, title="exp1") mult4= input(2.5, minval=0.001, maxval=50, title="exp2") basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev dev2= mult2 * stdev(src, length) Supper= basis + dev2 Slower= basis - dev2 dev3= mult3 * stdev(src, length) upper1= basis + dev3 lower1= basis - dev3 dev4= mult4 * stdev(src, length) upper2=basis + dev4 lower2=basis - dev4 offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) //---------------------------------------------------- exit=(close-strategy.position_avg_price / strategy.position_avg_price*100) bull=( BV>SV and BV>Davgvol) bull2=(BV>SV and BV>Davgvol) bux =(close>Supper and close>Slower and volume<Davgvol) bear=(SV>BV and SV>Davgvol) con=(BV>Wavgvol and rsi>80) imInATrade = strategy.position_size != 0 highestPriceAfterEntry = valuewhen(imInATrade, high, 0) // STRATEGY LONG // if (bull and close>upper1 and close>Supper and high>upper and rsi<80) strategy.entry("Long",strategy.long) if (strategy.position_avg_price*1.02<close) strategy.close("Long") else if (low<ma9 and strategy.position_avg_price<close) strategy.close("Long") else if (ma20>close and strategy.position_avg_price<close ) strategy.close("Long") else if (rsi>80 and strategy.position_avg_price<close) strategy.close("Long") else if (strategy.openprofit < strategy.position_avg_price*0.9-close) strategy.close("Long") else if (high<upper and strategy.position_avg_price<close) strategy.close("Long") ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120)) if (close<strategy.position_avg_price*0.98) strategy.close("Short") else if (rsi<20) strategy.close("Short")