Autre version du filtre, pour référence, ou j’ai ajouté un poids supplémentaire basé sur la différence en points de chaque tendance, marquant ainsi un peu plus les périodes ou le marché bouge peu (filtre range).
Dans cette version, $pricediff est utilisé pour suivre le mouvement des prix pendant chaque tendance. Il est calculé comme la différence absolue entre le prix de clôture au début et à la fin de chaque tendance. Une deuxième pondération (weightPrice), est ensuite calculée pour chaque tendance avec: 1/$pricediff[i]. Cela donne un poids plus important aux tendances dont les mouvements de prix sont plus faibles, car 1/x est plus grand pour les petits x. Le poids total (totalWeight) est calculé en multipliant donc le poids de la durée par celui du prix. Ce poids total est ensuite appliqué à la durée de la tendance lors de l’addition des différences, et le total de tous les poids totaux est également calculé dans le poids total. On applique ensuite par au dessus une moyenne pondérée comme dans la version précédente.
// --- settings
SignalPeriod = 12
ArrowPeriod = 2
xTrendDurationAverage = 10
// --- end of settings
bbup = average[signalperiod]+std[signalperiod]*arrowperiod
bbdn = average[signalperiod]-std[signalperiod]*arrowperiod
if ts=0 then
if close crosses over bbup then
ts=bbdn
trend=1
startPrice = close
elsif close crosses under bbdn then
ts=bbup
trend=-1
startPrice = close
endif
endif
if trend=1 then
ts=max(ts,bbdn)
elsif trend=-1 then
ts=min(ts,bbup)
endif
if trend=1 and close crosses under ts then
trend=-1
ts=bbup
t=t+1 //trend count
$bardiff[t]=barindex-lastbarindex //trend duration in bars
$pricediff[t]=abs(close-startPrice) //price movement
startPrice=close
lastbarindex=barindex
endif
if trend=-1 and close crosses over ts then
trend=1
ts=bbdn
t=t+1 //trend count
$bardiff[t]=barindex-lastbarindex //trend duration in bars
$pricediff[t]=abs(close-startPrice) //price movement
startPrice=close
lastbarindex=barindex
endif
//weighted average of trend duration
if t>xTrendDurationAverage then
diff=0
totalWeight=0
for i = t downto t-xTrendDurationAverage do
weightDuration=xTrendDurationAverage-(t-i)
weightPrice=1/$pricediff[i]
weightTotal=weightDuration*weightPrice
diff=diff+weightTotal*$bardiff[i]
totalWeight=totalWeight+weightTotal
next
trendavg=diff/totalWeight
endif
return trendavg as "weighted average of previous X trend duration"
Bonjour Nicolas,
ton indicateur est vraiment TOP !!!
en revanche quand je backtest la stratégie les points d’entrées courts ou longs ne sont pas les mêmes, y a t il une raison?
Bonjour Nicolas,
Tout d’abord, merci encore pour tes contributions.
En lisant le code dois je comprendre, que l’instruction sellshort permet aussi de fermer la position longue ouverte et que l’instruction Buy ferme la position courte?
Oui ci-dessus est une déclaration correcte.
Cependant, si vous obtenez des “choses étranges”, vous pouvez essayer / utiliser Sell et ExitShort pour voir si les “choses étranges” s’arrêtent.
SELLSHORT ouvre une position de vente à découvert et donc ferme une position d’achat. Un ordre inverse fermera automatiquement l’ordre en cours.
Comme le stipule GraHal, pour fermer une position d’achat on utilise l’instruction SELL (revente).
Hi everyone, this strategy looks good. when i download itf. file from FXtonio in PRT. its says there is an error Endif in the code.
Salut tout le monde, cette stratégie semble bonne. quand je télécharge itf. fichier de FXtonio dans PRT. cela dit qu’il y a une erreur Endif dans le code.
erreur Endif dans le code.
Soit ajouter un Endif à la fin du code, soit mettre // devant un endif à la fin du code.
Faites-nous savoir si l’une des solutions ci-dessus fonctionne ?
Si vous publiez le .itf, je vais l’essayer sur ma plate-forme.
@Alby118
Publiez uniquement dans la langue du forum dans laquelle vous publiez. Par exemple, l’anglais uniquement dans les forums anglophones et le français uniquement dans les forums francophones.
Mertci 🙂
Salut tout le monde,
J’utilise le système en démo depuis quelques semaines et j’ai d’abord été surpris des mauvais résultats compte tenu du bon backtest. Alors aujourd’hui, il m’est apparu que je n’avais pas exécuté le backtest en mode tick-by-tick. Cela a entraîné un résultat bien pire. J’ai donc essayé de jouer avec les temps de trading par exemple et j’ai vu que les heures 12 et 13 n’étaient pas très bonnes. Ensuite, j’ai essayé d’implémenter le filtre Nicolas dans le post #215751 mais je n’arrive pas à le faire fonctionner (je suis assez nouveau dans le codage). Quelqu’un d’autre a-t-il essayé?
Je travaille dessus également. Cet indicateur est super.
En démo les résultats en H4 sont excellents sur le DJ et bons sur le DAX.
En M15 et H1 c’est plus mitigé. Pour le moment, ma conclusion est qu’il faut utiliser la stratégie pour prendre les positions automatiquement aux changements de trends puis l’arrêter pour gérer le trade manuellement, surtout sur les courtes TF.
D’ailleurs je hais les DXS qui limite le nombre de repositionnements des stops.
Je constate aussi que toutes les positions sont gagnantes à un moment donné. Il faut choisir entre sécuriser ses gains ou être prêt à perdre un peu de sous pour attraper les gros trades.
Ne pas oublier que cet indicateur c’est uniquement la cassure de la bande supérieure ou inférieure des Bollinger qui inverse la tendance. Peut être qu’utiliser plusieurs timeframes pour déterminer un sens plus générale (long terme) et trader les rebonds (court terme) est envisageable ?
ne marche toujours pas…..
@Alby118
Qu’est ce qui ne marche pas ? Comment peut on t’aider ?
Bonjour Nicolas,
je n’arrive pas a y intégrer la notion de “trading time” :
j’ai bien le code : TradingTime = time >= 150000 and time <= 160000
mais j’ai essayé de l’intégrer à plusieurs endroit mais ça ne fonctionne pas ???
merci de votre aide
tout trié, fonctionne. merci