ProRealTime
Pour partager sur le trading automatique, nos algorithmes, nos backtests

Bug ou pas bug telle est la question.

par Doudidoudou » 19 avr. 2018 00:20

Bonjour,

Je n'arrivé pas à interpréter certaines prises de position sur mes backtests. Donc, pour prendre en main pro order et bien comprendre les prises de position des backtests, il faut que je revois les bases. J'ai donc crée un indicateur simple et un code basique (par c'que je suis trop c... cf:orelsan)
--------------------------------
A lire sur le rythme de la musique
--------------------------------
UT1min
Indicateur... simple: si le cours baisse de 1% par rapport a la fermeture de la veille alors 1 sinon 0

Code...basique: si indicateur = 1 alors ouverture de position (short)
---------------------------------
Y a pas plus simple, je vais enfin pouvoir comprendre l'incidence des décalages de bougie ...super!

Et la... surprise... je n'y comprends rien!
Regardez le résultat:
image1.jpg
image1.jpg (21.74 Kio) Vu 769 fois
Pour mes 3 premiers indicateurs, pas de problème, on a trois ouvertures de position.
Pour mon quatrième...rien...pourquoi?...Il a la peste?
Je rappelle le code: si signal alors ouverture! C'est quoi le problème!

Et là?
image2.jpg
image2.jpg (25.09 Kio) Vu 769 fois
Ouverture de position sans signal! Soyons positif y a eu une baisse quand même :D

Et encore...
image3.jpg
image3.jpg (42.79 Kio) Vu 769 fois
Ouverture avant signal.. Hourra!!! Un don de voyance, ça peut-être pratique sur les marchés!

Enfin, le meilleur pour la fin
image 4.jpg
image 4.jpg (51.28 Kio) Vu 769 fois
Là, pour voir les 1% de baisse avant l'ouverture de la position, faut s'accrocher! :shock:

Bon, sérieux, si quelqu'un a des explications, des suppositions ou autre, je suis preneur! Mais jusqu’à avoir compris le schmilblick je ne vois comment faire confiance aux résultats de PRT backtest.

Avoir autant bosser pour ce retrouver en face de ça.... :mur:

Qu'en pensez vous?

Re: Bug ou pas bug telle est la question.

par Toto le Héros » 19 avr. 2018 17:06

Bonjour,
Je pense que tu as certainement un bug dans ton code et que si tu le partages dans ton post "on" pourra t'aider.
prt Backtest est extrêmement fiable (en cochant l'option "tick by tick"). Je trade en auto en live! grâce à lui avec une fiabilité remarquable. Merci prt : langage extrêmement simple, fiable et efficace.

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 20 avr. 2018 00:27

Merci Toto le hèros pour ta réponse.

J'ai trois questions dans ce poste...désolé... :D

Ton intervention me rassure sur la fiabilité de pro backtest.
Pour te donner toutes les infos liées au paramétrage de mon compte j'ai rappelé la fenêtre d'hier et surprise... plus aucun problème. La simplicité du code ne laissant que peu de place à une erreur de codage, je ne peux faire qu'une hypothèse.
Ci dessous, le code que j'ai rédigé pour l'exemple précédant:
-------------------------
//Indicateur binaire de prise de position
condvalind2 = CALL "condvalind2"

// ouverture et fermeture en short si signal ok
IF condvalind2=1 THEN
SELLSHORT 1 CONTRACTS AT MARKET

// stop éloigné pour ne pas risquer qu'il se situe dans la même bougie
SET STOP %TRAILING 1
ENDIF

-------------------------

Mon hypothèse est donc que lors de ma précédente cession, j'ai modifié les paramètres d'heure (passé en UTC+2), ce qui a peut-être fait faussé l'analyse.
(1) Possible? Je ne vois pas d'autres explications...

Du coup ma cession est paramétré de la façon suivante:
apercu.jpg
apercu.jpg (87.47 Kio) Vu 717 fois
(2) Je ne suis pas sûr que cela soit correcte (UTC+1 ou +2?) pour afficher les heures d'ouverture du cac40. Je ne comprend pas trop l'unité de temps utilisé sur le graph (de 10:00 à 18:30)

Enfin le seul est unique "bug" qu'il me reste est celui là:
apercu2.jpg
apercu2.jpg (72.11 Kio) Vu 717 fois
Rien graphiquement n'indique que la valeur a chuté de 1% par rapport à la clôture de la veille.
(3) Sachant que cella c'est passé le lundi 24 Avril 2017 je me demande si mon indicateur n'a pas pris en considération la clôture de dimanche (qui du coup n'est pas sur le graph).

Si tu peux éclairer ma lanterne, je t'en serais reconnaissant.

pour info le code de l'indicateur:
--------------------------
condval = DClose(1) * 0.99

IF condval > close[1] then
result=clotveille * 0.99
endif


//res=1 si indicateur change de valeur
IF result[1]<>result THEN
res=1
ELSE
res=0
ENDIF
return res

--------------------------
Merci!

Re: Bug ou pas bug telle est la question.

par Toto le Héros » 20 avr. 2018 09:33

Bonjour,
J'aurais tendance à te conseiller de laisser l'affichage par défaut. (1ère case à cocher fuseau horaire).
Ensuite tout dépent si tu souhaites exécuter ta stratégie sur le close de 17:30/17:35 ou sur le close de PRT CFD à risque limité qui est à 24:00. Et c'est de là que vient ton problème à mon avis. C'est bien une stratégie sur le CAC n'est-ce-pas ?
Je ne vois pas non plus quelle est l'ut de ta stratégie.

Voilà. Précise donc dans un 1er temps ce que tu veux faire EXACTEMENT :
-sur quel instrument
- sur quelle ut
- parles-tu de la clôture de la session cash ?

A partir de là, on pourra coder.

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 20 avr. 2018 11:21

Je n'avais pas renseigné les infos ci dessous car elles étaient disponible sur les images. Haaa... fainéantise quand tu nous tiens... (je parle pour moi bien-sur!)
Donc:
-sur quel instrument: cfd à risque limité 1€ france 40
- sur quelle ut: ut 10min
- parles-tu de la clôture de la session cash ? sur les horaires de marché (9:00 / 17:30)

Objectif:
Créer un code simple (entrainement/compréhension des paramètres)
Peu importe sa logique et sa performance. Partons de l'exemple précédant.
Achat dans les horaires de marché en prenant comme ref le max (9:00/17:30) de la journée précédente.

Avant de te donner du boulot, je vais re-paramétrer les fuseaux comme à l'origine et re-rédiger le code en intégrant les horaires des plages d'achat et en virant le call, mais mes dispos hors boulot sont plutôt de 22h à minuit. Donc j'envois ca cette nuit....

Merci pour ton aide :)

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 21 avr. 2018 00:30

Donc les deux codes:
indicateur binaire:
---------------------------------
clotveille = DClose(1)
condval = clotveille * 0.99

IF condval > low[1] then
result=condval
endif
IF result[1]<>result THEN
res=1
ELSE
res=0
ENDIF
return res AS "res"
---------------------------------


Code:
---------------------------------
DEFPARAM CumulateOrders = true

heureouv = 090000
heureclot = 173000

condvalind2 = call "condvalind2"

IF condvalind2=1 AND time >= heureouv AND time <= heureclot THEN
SELLSHORT 1 CONTRACTS AT MARKET
SET STOP %TRAILING 1
ENDIF
---------------------------------

(1) En reprenant les fuseaux d'origine mon Dclose ne semble pas être celui de 17:30 mais celui de 00:00... comment prendre celui de 17:30?
(2) Mes plages horaires du programme gèrent t'elles les passages des heures d'été aux heures d'hivers et inversement?
(3)Enfin, je n'ai pas réussi à supprimer le call.
(4) je la garde pour plus tard... :D

Re: Bug ou pas bug telle est la question.

par Toto le Héros » 23 avr. 2018 08:42

Bonjour,
L'instruction DClose ne correspond pas à la clôture "cash" de 17h30. Ton problème vient de là. Sur prt, tu as la cotation du cfd à risque limité. DClose te renvoie (quelle que soit l'ut dans laquelle tu es) la clôture de l'ut journalière (à 24h00 sauf le vendredi puisque le cfd à risque limité cote 24/24). DClose(1) te renvoie la clôture de la veille (à 24h00 sauf le vendredi puisque le cfd à risque limité cote 24/24).
Tu n'obtiendras pas sur prt la clôture cash. Tu auras une valeur approchante en faisant extraire la valeur de la clôture autour de 17h30 et à 9h00 pour l'ouverture.
Il y a des instructions du type if HOUR=xx and MINUTE=yy qui peuvent te permettre de faire çà facilement.

Gestion heure été / heure hiver : aucun problème si tu traites des indices/actions cotés dans ton fuseau horaire (CAC, DAX, etc...).
Tes plages horaires de programme ne servent à rien puisque ton objectif est de prendre une position à l'ouverture de toute façon si je comprends bien. En l'occurence si tu es en ut=10min, ta condition sera vérifiée sur la barre de 9:00 qui se clôture à 9:10. Si la condition est réalisée ta position sera prise à 9:10.

Bon courage.

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 23 avr. 2018 15:38

Merci toto,

Ok Pour la prise en compte du Dclose... Je regarde ça ce soir. J’aurai probablement une ou deux questions sur le sujet mais j'attendrai de voir ce qu'il en sera après rectification du code et si j'arrive à les solutionner moi même.

Pour la gestion de l'heure, je me doute qu'il n'y aura pas de problème en réel. Ma question portait plutôt sur le backtest. Puisqu'il prend en référence l'heure de mon ordi, est-ce qu'en remontant dans le temps il fait automatiquement les décalages d'UTC.

Dans cet exemple, je ne souhaite pas qu'il prenne nécessairement position à l'ouverture mais lors du franchissement des -1%. Pour l'instant si le franchissement à lieu en over alors il ne se positionne pas à l'ouverture mais il se positionnera si la condition est remplie en journée.
Dans un deuxième temps je lui demanderai de se positionner aussi à l’ouverture si la condition est rempli en over...Mais ceci est une autre histoire

Prochaine étape, je vais travailler sur les fermetures des positions en positionnant un stop loss (réplique du stop garanti d'ig) en overnight et un stop suiveur en journée. à suivre...

Petite question te concernant: Tu fait du trading auto en intra ou en daily?

Re: Bug ou pas bug telle est la question.

par Toto le Héros » 23 avr. 2018 17:01

Changement d'heure : aucun problème. Le robot trade sur un instrument dont l'heure change en même temps que lui.
Tant que tu sais précisément ce que tu souhaites programmer et que tu gardes à l'esprit que ton robot va effectuer la vérification des conditions à chaque clôture de Bougie (et uniquement à ce moment-là), "tout ira bien".
Je programme des robots de scalping daily et intraday, mais j'ai une règle stricte de coupure systématique le vendredi soir ou les veilles de jour férié.

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 23 avr. 2018 23:58

coucou,

Pour les valeurs de clôture, pas de problème...ca marche. :merci: Par contre j'ai placé le script dans l'indicateur.
Dans le manuel, il recommande de ne pas utiliser "call", mais je n'y arrive pas et il me semble logique que je ne puisse pas. As-tu une solution pour supprimer le "call"?

Pour mes fermetures de position:
Je n'arrive pas à simuler le stop garanti en over (placer à l'équivalent d'une perte totale de couverture) et le stop trailing en journée. Mon stop suiveur ne se désactive pas la nuit. :(
Comment faire?

indicateur:
-----------------------------------------
condval = clotveille * 0.99

IF condval > low[1] then
result=condval
endif
IF result[1]<>result THEN
res=1
ELSE
res=0
ENDIF

IF time=174000 then
clotveille=close
endif

return res AS "res"
-----------------------------------------


Code:
-----------------------------------------
DEFPARAM CumulateOrders = true

heureouv = 090000
heureclot = 173000

condvalind2 = call "condvalind2"

IF condvalind2=1 AND time >= heureouv AND time <= heureclot THEN
SELLSHORT 1 CONTRACTS AT MARKET
endif

IF onmarket AND time >= heureouv AND time <= heureclot THEN
SET STOP %loss 0
SET STOP %TRAILING 1
endif

IF onmarket AND time < heureouv AND time > heureclot THEN
SET STOP %TRAILING 0
SET STOP %loss 1
ENDIF
-----------------------------------------

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 24 avr. 2018 08:43

Bon,
J'ai eu un déclic au réveil... remplacement d'un AND par un OR est mon stop garanti en over fonctionne.

Nouveau code:
-------------------------------------
DEFPARAM CumulateOrders = true

heureouv = 090000
heureclot = 173000

condvalind2 = CALL "condvalind2"

IF condvalind2=1 AND time >= heureouv AND time <= heureclot THEN
SELLSHORT 1 CONTRACTS AT MARKET
endif

IF onmarket AND time >= heureouv AND time <= heureclot THEN
SET STOP %loss 0
SET STOP %TRAILING 1
endif

IF onmarket AND (time < heureouv OR time > heureclot) THEN
SET STOP %TRAILING 0
SET STOP %loss 1
ENDIF
--------------------------------------------


Le problème du stop étant résolu, que me conseilles-tu pour le "CALL"?

Après on passera au pyramidage... :P

Re: Bug ou pas bug telle est la question.

par Toto le Héros » 24 avr. 2018 09:12

Bonjour,
L'instruction call fonctionne parfaitement et elle permet d'alléger le programme et d'accélérer les calculs du robot. Je la recommande.
Dans ton cas qui plus est l'indicateur ne retourne qu'une seule valeur.
Dans un cas multiple, call se code ainsi :
ignored, indicator1, ignored = call "NOM DE L INDICATEUR" // tu appelles ici la 2ème valeur renvoyée par l'indicateur
Dans ton cas çà doit faire :
indicator1 = call "NOM DE L INDICATEUR" // copier/coller du nom de l'indicateur pour être sûr de la "casse".

Pyramidage : ambitieux... On pourra en reparler.
A+

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 24 avr. 2018 09:33

Merci beaucoup!
J'avais justement hier soir un indicateur avec valeurs multiples:
-ma valeur biaire + le close de la veille
J'ai retourné les deux valeurs sur un graph pour vérifier les prises de position mais après je n'étais pas arrivé à extraire les valeurs de manière individuelle pour faire fonctionner mon code. Je teste donc ça ce soir...

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 25 avr. 2018 00:43

Bon... j'avais rédigé un message de trois kilomètres mais le fait d'avoir mis mon code pour l'indicateur ci-dessous ma fait passer pour un robot = suppression du message.
GRRR!
Nouveau Document Microsoft Office Word.jpg
Nouveau Document Microsoft Office Word.jpg (27.8 Kio) Vu 489 fois
rose=over
blanc=heure de cotation du CAC
Noir=cours
Vert=condition des -1% sur clôture veille
trait vertical=prise de position

Merci pour ton explication sur le CALL... C'est trop cool de ne plus devoir avoir un indicateur pour analyser les prises de position et un indicateur pour le code. :merci:

Du coup je te demandais de jeter un coup d’œil sur la rédaction mais on verra ça plus tard... Je suis HS!

Une dernière chose: Est-ce que tu connaîtrais un manuel ou tuto un peu plus poussé que le PDF de prorealtime?

Et encore merci!

Re: Bug ou pas bug telle est la question.

par Toto le Héros » 25 avr. 2018 08:28

Salut Doudidoudou,
Content de voir que çà fonctionne. Le backtest de prt est très efficace, et le langage de programmation très abordable. Seuls bémols en-cours de résolution : l'impossibilité du x-tick, mais surtout l'impossibilité du multi time frame.
Les tutoriels du site prorealcode sont bien faits. Mieux que la doc ? Pas sûr.
Au final le + important reste de garder à l'esprit :
- qu'il te faut toujours savoir exactement ce que tu veux coder,
- que les conditions seront vérifiées à chaque clôture de Bougie et pas ailleurs
(- que les ordres STOP et LIMITE n'ont une durée de vie que d'une Bougie, il faut donc faire en sorte que le code les repasse si pas exécutés : çà te sera utile si tu cherches à programmer du pyramidage...)
Bonne chance.

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 25 avr. 2018 18:27

Nouveau jour, nouveau soucis, code différent.

Avant d'aborder le pyramidage, j'ai voulu tester différentes fermetures de position en fonction de différents facteurs.
Ex: dans le code j'ai une stratégie de sortie si je suis en journée et une autre pour les overs. Pas de problème, ca marche.

Aujourd’hui j'ai voulu tester des sorties différentes sur un autre code et là impossible...

le code simplifié en UT 10min sur france 40:

Code : #

DEFPARAM CumulateOrders = false

moy300 = average[300]

IF  close[1] crosses under moy300  THEN
SELLSHORT 1 CONTRACTS AT MARKET
set stop ptrailing 25
endif
J'obtiens ceci:
1.jpg
1.jpg (45.54 Kio) Vu 472 fois
Jusque là tout vas bien...

Si je rajoute une condition: fermer la position si on repasse au dessus de la moyenne... Mon stop suiveur ne fonctionne plus!

le code donne:

Code : #

DEFPARAM CumulateOrders = false

moy300 = average[300]

IF  close[1] crosses under moy300  THEN
SELLSHORT 1 CONTRACTS AT MARKET
set stop ptrailing 25
endif

IF onmarket AND close > moy300 THEN
set stop ptrailing 0
exitshort 1 CONTRACTS AT MARKET
endif
Et voila:
2.jpg
2.jpg (50.74 Kio) Vu 472 fois
Mes Stops suiveurs ont disparu... J'ai esayé deux milles solution mais rien...

Existe t'il une solution?

Re: Bug ou pas bug telle est la question.

par Toto le Héros » 26 avr. 2018 09:05

Bonjour,
Je ne suis pas sûr de comprendre et je n'ai pas testé le code.
Mais à le lire, çà semble logique que ton trailing stop n'agisse jamais. Ton EXITSHORT s'applique immédiatement si close>moy300 (ta condition Traling Stop à breakeven n'est jamais enclenchée puisque tu EXITSHORT la ligne suivante).
Peut-être as-tu oublié une condition additionnelle qui fait que si close>moy300 et que... alors TrailingStop à breakeven et sinon EXITSHORT. Non ?

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 26 avr. 2018 10:05

Toto :"Ton EXITSHORT s'applique immédiatement si close>moy300 (ta condition Traling Stop à breakeven n'est jamais enclenchée puisque tu EXITSHORT la ligne suivante)."

L'exitshort fonctionne bien puisque je voulais qu'il me protège si close>moy300
par contre le traillingstop devrait agir tant que close<moy300. Non?


Grosso modo, sur ce petit bout de code j'attendais:

1) si le cours descend en dessous de la moyenne alors ouverture de position short
1) si le cours reste en dessous de la moyenne je souhaite être en stop suiveur.
1) Si par malheur le cours remonte jusqu’à la moyenne alors je ferme tout.

J'aimerais une solution "propre" sans appel à un indicateur mais je patauge...

Re: Bug ou pas bug telle est la question.

par Toto le Héros » 26 avr. 2018 10:33

Ok, je comprends le principe.
Peut-être les 25 points nécessaires (en clôture 10') au lancement du trailing stop ne sont jamais ou rarement atteints ?
Essaie avec une valeur + faible dans un premier temps.

Tu peux supprimer la ligne TrailingStop 0 avant la condition EXITSHORT. Elle ne sert à rien.

Re: Bug ou pas bug telle est la question.

par Doudidoudou » 26 avr. 2018 10:50

J'ai justement choisi 25 pts dans l'exemple car le trailingstop peut l’atteindre
Sur l'avant dernière image on peu voir les losanges du déclenchement du trailingstop.

J'ai l'impression que le code doit trancher entre les deux modes de fermeture et qu'il considère l'exit comme prioritaire même si close est encore inférieur à la moyenne.

Sujets similaires
Que penser d'une telle stratégie de couverture sur options ?
Fichier(s) joint(s) par Fiorentina » 23 nov. 2017 10:16 (30 Réponses)
Trade automatique si le cours atteint telle valeur
Fichier(s) joint(s) par tjee » 19 janv. 2022 20:52 (3 Réponses)
Bug?
par Benoist Rousseau » 13 sept. 2011 11:39 (12 Réponses)
Bug IG market - iPhone ?
Fichier(s) joint(s) par Benoist Rousseau » 30 sept. 2011 11:07 (3 Réponses)
bug Demo IG Market?
par GDX23 » 27 févr. 2012 08:03 (3 Réponses)
Bug Prorealtime avec IG MArkets et Dax ?
par DéBé » 27 févr. 2012 10:03 (55 Réponses)
Bug PRT - Temps & Horaires
par GDX23 » 16 juil. 2012 13:45 (4 Réponses)
bug ordinateur
par LVO » 24 juil. 2012 18:19 (6 Réponses)
Petit bug
par Benoist Rousseau » 06 août 2013 09:29 (5 Réponses)
bug plateforme démo, confirmé par IG
par DeXTeR » 09 janv. 2014 09:11 (3 Réponses)