Stratégie de suivi de tendance basée sur les zones de friction des prix


Date de création: 2023-09-20 16:46:17 Dernière modification: 2023-09-20 16:46:17
Copier: 2 Nombre de clics: 610
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie consiste à calculer le temps de séjour des prix dans différentes zones, à déterminer si les prix sont entrés dans de nouvelles zones sans résistance et à générer un signal de transaction de suivi de tendance dans les zones sans résistance.

Principe de stratégie

  1. Calculer le pourcentage de prix restant à proximité du niveau actuel au cours des N cycles précédents comme mesure de friction des prix.

  2. Détermine si le prix est entré dans une zone de faible friction où il est resté moins longtemps, une zone sans résistance qui produit un signal.

  3. Utilisez la moyenne mobile à pondération rapide pour déterminer la direction de la tendance la plus récente et négociez la tendance en cas de rupture de la zone sans résistance.

  4. Lorsque le prix est de retour dans la zone de friction élevée, le préjugé inverse la tendance au retrait de l’arrêt.

  5. Les paramètres de transaction peuvent être personnalisés, y compris le cycle de jugement de la zone de friction, la zone d’entrée de rupture, etc.

Analyse des avantages

  1. Les zones de non-résistance sont définies par la friction des prix et les zones de choc sont évitées.

  2. La ligne moyenne rapide suit les tendances récentes et utilise des combinaisons pour juger de la direction.

  3. L’interface visuelle est intuitive et affiche les zones de friction.

  4. Les paramètres par défaut sont optimisés pour les transactions à haute fréquence de crypto-monnaie.

  5. Les règles de stratégie sont simples, claires, faciles à comprendre et à modifier.

Analyse des risques

  1. La friction des prix ne permet pas de prédire parfaitement les mouvements des prix.

  2. Le timing de la moyenne rapide peut ne pas être exact.

  3. L’entrée et la sortie du marché ne peuvent pas être efficaces.

  4. Il peut y avoir un risque de suradaptation lors de l’optimisation.

  5. Les paramètres fixes peuvent ne pas être efficaces lorsque le marché change fortement.

Direction d’optimisation

  1. Test de différents paramètres périodiques pour calculer le frottement des prix.

  2. Évaluer les différents types de moyennes pour juger des tendances récentes.

  3. Optimiser les paramètres de rupture de la zone de non-résistance pour améliorer la stabilité de la stratégie.

  4. Ajouter des stratégies de stop-loss et de gestion des risques de transaction.

  5. Considérer l’adoption de paramètres dynamiques pour s’adapter aux changements du marché.

  6. Les tests de retour sont effectués sur de nombreuses variétés et périodes.

Résumer

Cette stratégie a un certain avantage pour la négociation en trouvant des zones de rupture de tendance à forte probabilité grâce à la friction des prix. Cependant, il existe des limites de paramètres fixes. En renforçant les mécanismes d’optimisation des paramètres dynamiques, de gestion des risques, etc., la stratégie peut être rendue plus stable et plus efficace.

Code source de la stratégie
/*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")