
Cette stratégie est basée sur des indicateurs techniques de la moyenne mobile et du volume des transactions, et est conçue comme une stratégie quantifiée de la poursuite de la chute. Lorsqu’une action atteint la ligne du 20e jour, et que le volume d’achat de la journée est supérieur au volume de vente et supérieur à la moyenne des transactions des n jours précédents, le marché est considéré comme étant en situation de bullish, l’achat est considéré comme étant en situation de bullish; lorsque le prix de la action est descendu, et que le volume de vente de la journée est supérieur au volume d’achat et supérieur à la moyenne des transactions des n jours précédents, le marché est considéré comme étant en situation de bullish, la vente est considérée comme étant en situation de bullish.
La stratégie est basée sur deux critères principaux:
La ligne de 20e jour et la ligne de 60e jour sont considérées comme en hausse lorsque la ligne de 20e jour traverse la ligne de 60e jour et comme en baisse lorsque la ligne de 20e jour traverse la ligne de 60e jour.
Le volume des transactions: Calcule le volume des transactions achetées et vendues par jour. Si le volume des achats est supérieur au volume des ventes et supérieur au volume moyen des transactions des n derniers jours, il est jugé comme une transaction à plusieurs niveaux; si le volume des ventes est supérieur au volume des achats et supérieur au volume moyen des transactions des n derniers jours, il est jugé comme une transaction à vide.
La stratégie et la logique de négociation sont les suivantes:
Entrée à plusieurs têtes: lorsque le prix de clôture est à la ligne du 20e jour et que le volume d’achat du jour est supérieur au volume de vente et au volume d’opérations moyen des n derniers jours, considérez que le marché est dans un état de vue à plusieurs têtes, calculez la bande de Brin en fonction de la volatilité, et entrez si le prix de clôture est entre le milieu et le bas de la bande de Brin.
Entrée à vide: lorsque le prix de clôture tombe en dessous de la trajectoire, et que le volume de ventes du jour est supérieur au volume d’achat et au volume moyen des transactions des n derniers jours, le marché est considéré comme en position de baisse. La zone de Brin est calculée en fonction de la volatilité.
Arrêt et perte: définir des arrêts et pertes raisonnables, fixer les bénéfices ou réduire les pertes. Par exemple, arrêter lorsque le prix de la action augmente de 5% par rapport au prix d’entrée; arrêter lorsque la perte atteint 10%; ou arrêter lorsque le prix de la action recule d’une certaine ampleur après avoir atteint un nouveau sommet récent.
Cette stratégie présente les avantages suivants:
La combinaison de la moyenne binaire et de l’indicateur de volume des transactions évite les zones aveugles d’un seul indicateur technique.
Les bandes de Brin utilisent différents paramètres pour déterminer le prix de transaction spécifique et rendre l’entrée plus précise.
Les stratégies de stop-loss sont raisonnables et permettent de verrouiller les gains et de contrôler les risques.
Les résultats de la rétroaction sont bons, les gains sont stables et peuvent être réellement utilisés pour les transactions quantifiées.
Cette stratégie comporte aussi des risques:
Les stratégies de double équilibre génèrent facilement des signaux erronés et nécessitent un filtrage combiné des indicateurs de puissance.
Une mauvaise configuration des paramètres de la bande de Brin peut entraîner une fréquence ou une rareté des entrées.
Le mauvais réglage du stop loss fixe peut affecter les gains de la stratégie.
Les données historiques doivent être analysées et vérifiées en grande quantité, et il est possible que des pertes imprévues surviennent.
Cette stratégie peut être optimisée dans les domaines suivants:
Optimiser les paramètres d’un système homogène pour trouver la meilleure combinaison homogène.
Optimisation des paramètres de la bande de Bryn pour une entrée plus précise.
Ajustez dynamiquement le point d’arrêt et de perte en fonction de la situation du marché.
Ajout d’autres indicateurs techniques tels que MACD, KD, etc. pour améliorer l’exactitude de la stratégie.
L’utilisation d’une méthode d’apprentissage automatique pour trouver les paramètres optimaux rend les stratégies plus robustes.
Cette stratégie est globalement une stratégie de trading quantitatif très pratique, elle est bien évaluée, facile à mettre en œuvre, ses risques sont contrôlables, elle est une stratégie stable adaptée au marché réel, qui vaut la peine d’être apprise par les traders quantitatifs. Bien sûr, il y a encore beaucoup de place pour l’optimisation de la stratégie, et nous nous attendons à ce que d’autres experts en trading quantitatif l’améliorent.
/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
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
strategy("prototype",initial_capital=0.01,commission_type=strategy.commission.percent,commission_value=0.1, format=format.volume, precision=0,overlay=true)
// SETTING //
length1=input(1)
length3=input(3)
length7=input(7)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
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")
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
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=(close>Supper and BV>SV and BV>Davgvol)
bull2=(close>ma20 and BV>SV and BV>Davgvol)
bux =(close<Supper and close>Slower and volume<Wavgvol)
bear=(close<Slower and close<lower and SV>BV and SV>Wavgvol)
hi=highest(exit,10)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>ma3 and ma20>ma60 and rsi<70)
strategy.entry("Long",strategy.long,0.1)
if (strategy.position_avg_price*1.05<close)
strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.999<close and close>strategy.position_avg_price*1.002)
strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.997<close and close>strategy.position_avg_price*1.002)
strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.995<close and close>strategy.position_avg_price*1.002)
strategy.close("Long",0.1)
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
strategy.close("Long",0.1)
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////