Tendance à la suite d'une stratégie basée sur les zones de frottement des prix

Auteur:ChaoZhang est là., Date: 20 septembre 2023 à 16h46
Les étiquettes:

Résumé

Cette stratégie mesure le temps de séjour des prix dans différentes zones afin d'identifier les zones à faible friction et les écarts de transactions dans ces zones.

La logique de la stratégie

  1. Calculer le ratio de maintien des prix autour des niveaux actuels au cours des N dernières périodes en tant que friction des prix.

  2. Identifier si le prix entre récemment dans des zones de faible friction avec un temps de séjour minimal.

  3. Utilisez une moyenne pondérée rapide pour déterminer la direction de la tendance récente.

  4. Profitez lorsque le prix rentre dans des zones de haute friction en anticipant un renversement de tendance.

  5. Paramètres personnalisables, y compris le retour de frottement, la zone de rupture, etc.

Les avantages

  1. Les frictions de prix évitent les marchés variés et trouvent les zones d'éclatement de la tendance.

  2. Le MA rapide se combine avec le frottement pour déterminer la direction.

  3. Des visuels intuitifs montrant les niveaux de friction des prix.

  4. Paramètres par défaut optimisés pour le trading de crypto haute fréquence.

  5. Une logique simple et claire, facile à comprendre et à personnaliser.

Les risques

  1. La friction des prix est incapable de prédire pleinement les mouvements futurs.

  2. Une MA rapide peut entraîner un timing inexact.

  3. Légalisation inefficace des entrées et des sorties.

  4. L'optimisation risque d'être trop adaptée.

  5. Les paramètres fixes peuvent être moins performants sur les marchés volatils.

Amélioration

  1. Testez différentes périodes pour calculer le frottement des prix.

  2. Évaluer les différents types d'AM pour déterminer la tendance récente.

  3. Optimisez les paramètres de la zone de rupture pour une plus grande stabilité.

  4. Ajoutez le stop loss et le take profit pour la gestion des risques.

  5. Considérer les paramètres dynamiques pour s'adapter à l'évolution des marchés.

  6. Reprise des tests sur plus de symboles et de délais.

Conclusion

Cette stratégie négocie des zones de frottement des prix avec un potentiel de rupture à forte probabilité, avec des avantages et des inconvénients.


/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//made for 30m chart with BTCUSD or other cryptocurrency
strategy("LUBE",overlay=false )
friction=0.0
barsback=input(500,"bars back to measure friction",step=100)
flevel=input(50,"0-100 friction level to stop trade",step=2)
tlevel=input(-10,"pic lower than 0 to number selected above to initiate trade",step=2)
fl=flevel/100
tl=tlevel/100

for i = 1 to barsback
    friction := if high[i] >= close and low[i] <= close 
        friction+(1+barsback)/(i+barsback)
    else
        friction

range=input(100,"bars back to measure lowest friction",step=10)
lowf = lowest(friction,range)
highf = highest(friction,range)
midf = (lowf*(1-fl)+highf*fl)
lowf2 = (lowf*(1-tl)+highf*tl)
plot(friction)
m=plot(midf[5],color=color.red)
l=plot(lowf2[5],color=color.white)
h=plot(highf[5],color=color.white)
fill(l,h,color.white)

src = input(title="Source", type=input.source, defval=close)

//FIR Filter
_fir(src) =>
    (4 * src + 3 * nz(src[1]) + 2 * nz(src[2]) + nz(src[3])) / 10

fir = _fir(src)

trend =  fir > fir[1]? 1:-1

//bgcolor(trend==1?color.lime:color.red,transp=50)

long=friction<lowf2[5] and trend == 1
short=friction<lowf2[5] and trend == -1
end=friction > midf[5]

keeplong=0
keeplong:=long?1:nz(keeplong[1])
keeplong:=short or end?0:keeplong

keepshort=0
keepshort:=short?1:nz(keepshort[1])
keepshort:=long or end?0:keepshort

bgcolor(keeplong==1?color.lime:keepshort==1?color.red:na,transp=50)

leverage=input(2,"leverage",step=.5)
enableshort=input(true,"enable shorts?")

barcount=0
barcount:=nz(barcount[1])+1

contracts=min(max(.000001,(strategy.equity/close)*leverage),50000)
strategy.entry("Long",strategy.long,when=long and barcount>20, qty=contracts)

strategy.close("Long",when=short or end )

strategy.entry("Short",strategy.short,when=short and enableshort==true and barcount>20, qty=contracts)

strategy.close("Short",when=(long or end) and enableshort==true)

alertcondition(keeplong==1 and keeplong[1]==0,"LONG")
alertcondition(keepshort==1 and keepshort[1]==0,"SHORT")
alertcondition((keeplong[1]==1 or keepshort[1]==1) and (keeplong==0 and keepshort==0),"CLOSE TRADE")


Plus de