Bonjour.
Depuis quelques semaines je fais tourner de temps en temps, et après quelques améliorations, un programme auto sur le F40 en UT2mn.
Jusqu’alors, aucun problème d’exécution, que ce soit le “IN”, spread ou stop loss, tout était respecté au 1/10 de point près.
Les positions pro order et celles du backtest étaient également totalement similaires.
Ce matin, je relance le pro order auto, et à ma grande surprise, une position short a été initiée alors que le backtest qui tourne en // sur le graphique n’a lui rien fait.
La position est gagnante, mais je m’interroge sur les causes potentielles. Il va de soi que les conditions du pro order et du backtest sont rigoureusement identiques.
Merci pour vos retours si vous avez déjà rencontré ce problème et isolé la cause de ce dernier.
Quand tu dis “backtest qui tourne en parallèle”, tu veux dire la même stratégie qui tourne sur un compte démo ? Pas un backtest après coup sur l’historique ?
Il est difficile de savoir pourquoi, même si auparavant les trades étaient parfaitement synchronisés entre les 2 comptes, il a existé aujourd’hui une différence. De plus en général c’est plutôt l’inverse qui se produit, un trade en démo et pas en réel (cause diverses dut au spread, slippage, stoploss trop proche, etc.).
Si le test démo est en live, que dit l’historique des trades de la plateforme ? (CTRL+O).
Bonjour Nicolas et merci pour ta réponse rapide.
J’ai donc mon pro backtest qui tourne sur mon graphique, et je démarre ensuite le pro order à partir de la fenêtre de programmation, donc directement à partir du programme du pro backtest (v2). Il me semble donc que ça ne peut pas être une coquille de programmation dans l’un ou l’autre, puisque j’utilise la même fenêtre de programmation . (“clé”>modifier>probacktest et pro order)
Ce n’est pas un compte demo, back et order tournent sur le même graphique et sous le même compte réel .J’ai donc les différents signaux du back( flèches, croix, etc), et les lignes de positions réelles du order sur un seul et même graphique.
Jusqu’alors l’un et l’autre étaient strictement similaires , sauf ce matin ou pro order a décidé de prendre quelque libertés. Certes pour un gain de 15 pips que le backtest n’a lui pas réalisé, mais ça a perturbé la confiance en mon système et j’ai préféré le suspendre en attendant de comprendre.
ah oui je comprends mieux maintenant 🙂
Là, désolé je ne peux rien faire, peut être qu’avec le code je pourrai essayer de t’aider, mais non sinon je ne vois pas.
Merci tout de même pour ta disponibilité
Je vais remettre le pro order en route, voir si ça se reproduit, ou si c’était juste un accident isolé (mais qui reste mystérieux).
Et au passage, merci également pour ton indicateur sur les cycles de volatilité, je l’ai modifié en rajoutant 3 périodes supplémentaires; c’est un redoutable instrument visuel pour du scalping sur des échelles en ticks très courtes (21 ticks pour moi), ou comme filtre dans une programmation. Le fait qu’il soit borné -1/0 facilite grandement son utilisation.
Bonne soirée.
Quel indicateur de cycle de volatilité ? Je code tellement de choses… 🙂 c’est toujours intéressant de discuter de la pratique d’un indicateur, cela permet de donner des idées pour d’autres développements.
//PRC_Volatility Cycle | indicator
//02.12.2016
//Nicolas @ http://www.prorealcode.com
Voilà que ça recommence….
Une position vendeuse à 4789,1 pour le pro-order, et rien pour le backtest (flèches blanches).
cf graph en pièce jointe
Il est possible que la version du robot dans ProOrder différe, celle ci ne changera plus une fois lancée. Donc si tu as fait des modifications par la suite, ce ne sont plus les mêmes versions que tu compares.
J’ai en effet fait des modifications ce WE, sauvegardées, mais rien depuis hier
J’imagine donc que back et order tournaient sur la même base à l’ouverture de la plateforme ce matin.
Bien, comme il m’a offert 15 pips imprévus ce matin, je l’autorise à en perdre 20 ce soir ! Je laisse tourner et on verra demain.
Si il m’en offre 15 de plus, je ne vais pas râler non plus ! ;o)
Bonne soirée et merci.
Il semblerait qu’à l’activation de pro order, seule la 1ere position n’est pas forcément conforme au backtest; à priori tout rentre dans l’ordre par la suite.
C’est une question de “preload bars” dans ce cas. Soit il y en a trop ou pas assez, ça dépend des calculs que tu opère dans ton code.
C’est exactement ça; il y en avait de trop, j’avais mis ça un peu à la louche !
@Victorio.
Le 21 ticks est idéal pour la scalping sur un indice (certains indices). Je combine pour ma part une vision de tendance sur du 70ticks et fait des prises de positions rapides en 21t.
J’utilise mon indicateur “trendline” qui visible dans le forum “Question générale sur le trading” du site.
Trendline : Une approche du trading
Concernant le Volatility Cycle, tu l’exploite visuellement avec plusieurs périodes (“InpBandsPeriod”), une rapide et un lente en filtre ?
Bonsoir Sofitech
Tout à fait, une rapide et une lente.x2 puisque j’ai poussé le vice jusqu’à utiliser 4 périodes.
Le tout en histogramme.
Le code en pièce jointe, facile, mais ça mâche le travail. sig/sig2, des tentatives de signaux, pas très concluantes dans l’immédiat. “l”, juste pour pouvoir colorier une zone à partir du “-1”
InpBandsPeriod=55 // Period
Smooth=3 // Smoothness
StdDev = std[InpBandsPeriod](close)
highindex = highest[InpBandsPeriod](StdDev)[1]
lowindex = lowest[InpBandsPeriod](StdDev)[1]
if barindex>InpBandsPeriod then
VolDer = (StdDev-highindex)/(highindex-lowindex)
VolSmooth = average[Smooth](VolDer)
if VolSmooth>0 then
VolSmooth = 0
elsif VolSmooth<-1.0 then
VolSmooth = -1.0
endif
endif
//////////////////////////////////////////////
InpBandsPeriod2=144 // Period
Smooth2=3 // Smoothness
StdDev2 = std[InpBandsPeriod2](close)
highindex2 = highest[InpBandsPeriod2](StdDev2)[1]
lowindex2 = lowest[InpBandsPeriod2](StdDev2)[1]
if barindex>InpBandsPeriod2 then
VolDer2 = (StdDev2-highindex2)/(highindex2-lowindex2)
VolSmooth2 = average[Smooth2](VolDer2)
if VolSmooth2>0 then
VolSmooth2 = 0
elsif VolSmooth2<-1.0 then
VolSmooth2 = -1.0
endif
endif
s=0
if highest[2](volsmooth>=0)=1 and volsmooth<0 and volsmooth2>=0 then
s=-1
endif
s2=0
if volsmooth>=0 and volsmooth2>-1 and volsmooth2<0 then
s2=-1
endif
/////////////////////////////////////////
InpBandsPeriod3=13 // Period
Smooth3=3 // Smoothness
StdDev3 = std[InpBandsPeriod3](close)
highindex3 = highest[InpBandsPeriod3](StdDev3)[1]
lowindex3 = lowest[InpBandsPeriod3](StdDev3)[1]
if barindex>InpBandsPeriod3 then
VolDer3 = (StdDev3-highindex3)/(highindex3-lowindex3)
VolSmooth3 = average[Smooth3](VolDer3)
if VolSmooth3>0 then
VolSmooth3 = 0
elsif VolSmooth3<-1.0 then
VolSmooth3 = -1.0
endif
endif
//////////////////////////////////////////////
InpBandsPeriod4=34 // Period
Smooth4=1 // Smoothness
StdDev4 = std[InpBandsPeriod4](close)
highindex4 = highest[InpBandsPeriod4](StdDev4)[1]
lowindex4 = lowest[InpBandsPeriod4](StdDev4)[1]
if barindex>InpBandsPeriod4 then
VolDer4 = (StdDev4-highindex4)/(highindex4-lowindex4)
VolSmooth4 = average[Smooth4](VolDer4)
if VolSmooth4>0 then
VolSmooth4 = 0
elsif VolSmooth4<-1.0 then
VolSmooth4 = -1.0
endif
endif
l=-1
RETURN VolSmooth3 as "Volatility Cycle3",volsmooth4 as "vcycle4",VolSmooth as "Volatility Cycle",volsmooth2 as "vcycle2",s as "sig", s2 as "sig2", l as "l"
Pour information, tant qu’à choisir arbitrairement des périodes (10, 20, 50, 100 etc), je ne prends que des chiffres&nombres issus de la suite de Fibonacci (1 , 2, 3, 5, 8, 13, 21 etc). Au moins ça se raccroche à quelque chose de tangible.