La stratégie de double poussée définit des bandes supérieures et inférieures en fonction du prix d'ouverture et de la fourchette des jours précédents, en allant long sur les ruptures à la hausse et court sur les ruptures à la baisse.
Calculer le HH le plus élevé et le LL le plus bas sur les barres N récentes.
Calculer la valeur HC la plus élevée et la valeur LC la plus basse de la journée précédente.
L'intervalle du jour précédent est le plus grand des HH-LC et HC-LL.
La gamme supérieure BuyLine est le prix d'ouverture plus k1*Range.
La bande inférieure SellLine est le prix d'ouverture moins k2*Range.
Passez long lorsque la clôture dépasse la BuyLine, et court lorsque la clôture dépasse la SellLine.
Principaux avantages de cette stratégie:
Capture la tendance formée par les écarts autour du prix d'ouverture.
Les bandes sont fixées automatiquement en fonction de la volatilité historique, en évitant la subjectivité.
Les valeurs k personnalisables conviennent aux produits présentant une volatilité différente.
Les signaux de rupture ont une qualité relativement élevée.
Des périodes de rétention flexibles permettant de saisir les tendances sur différentes périodes.
Principaux risques de cette stratégie:
Difficulté à déterminer une plage raisonnable pour les bandes, risques de surentraînement.
Les ruptures peuvent s'avérer être de faux signaux, il faut arrêter la perte.
Une période de détention fixe ne peut pas s'adapter dynamiquement au marché.
Les données insuffisantes des tests antérieurs conduisent à un ajustement de la courbe.
Difficulté à mettre en œuvre des transactions à long terme et à court terme.
Les solutions:
Optimiser les valeurs k sur un ensemble de données plus grand pour éviter le surajustement.
Définir un stop loss approprié pour limiter les pertes par transaction.
Ajouter un filtre de tendance pour éviter les transactions contre tendance.
Envisager de réduire la période de détention à l'intérieur de la journée.
Validation en direct avec dimensionnement progressif de la position.
Quelques façons d'améliorer la stratégie:
Ajustez dynamiquement les valeurs de k pour les bandes.
Ajoutez le filtre de volume pour confirmer les signaux de rupture.
Utilisez le stop loss pour protéger les bénéfices.
Évaluer la force de rupture pour la dimensionnement de la position.
Faites la distinction entre tendance et fourchette pour décomposer la stratégie.
La stratégie de double poussée peut capturer les opportunités de trading de tendance autour du prix d'ouverture. Mais les paramètres et les optimisations de la période de détention ont beaucoup de marge d'amélioration en ce qui concerne le contrôle des risques. Pour le trading en direct, commencez par des paramètres conservateurs et augmentez progressivement la taille des positions.
/*backtest start: 2023-09-11 00:00:00 end: 2023-09-18 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Dual Thrust Strategy",overlay=true,initial_capital=1000) k1=input(0.67,type=float,step=0.01) k2=input(0.62,type=float,step=0.01) TimeFrame=input('240') len=input(20) HH=security(syminfo.tickerid,TimeFrame,highest(high,len),barmerge.lookahead_off) LC=security(syminfo.tickerid,TimeFrame,lowest(close,len),barmerge.lookahead_off) HC=security(syminfo.tickerid,TimeFrame,highest(close,len),barmerge.lookahead_off) LL=security(syminfo.tickerid,TimeFrame,lowest(low,len),barmerge.lookahead_off) Range=max(HH-LC,HC-LL) BuyLine=security(syminfo.tickerid,"D",open,barmerge.lookahead_off)+k1*Range SellLine=security(syminfo.tickerid,"D",open,barmerge.lookahead_off)-k2*Range plot(BuyLine,color=blue,linewidth=2,offset=1,transp=70) plot(SellLine,color=red,linewidth=2,offset=1,transp=70) LongCondition=crossover(close,BuyLine) ShortCondition=crossunder(close,SellLine) strategy.entry("enter long",true,1,when=LongCondition) strategy.entry("enter short",false,1,when=ShortCondition) plotshape(LongCondition and strategy.position_size<0?low:na,style=shape.labelup,location=location.absolute,color=blue,text="Long",textcolor=white,size=size.small) plotshape(ShortCondition and strategy.position_size>0?high:na,style=shape.labeldown,location=location.absolute,color=red,text="Short",textcolor=white,size=size.small) alertcondition(LongCondition and strategy.position_size<0,title='Long_DT') alertcondition(ShortCondition and strategy.position_size>0,title='Short_DT')