Travail sur plusieurs UT et appel de programmes

Forums ProRealTime forum Français Support ProBuilder Travail sur plusieurs UT et appel de programmes

Viewing 7 posts - 1 through 7 (of 7 total)
  • #236054

    Bonjour,

    Je souhaite transposer ma stratégie de trading dans un programme, mais j’ai quelques difficultés avec la programmation sur plusieurs unités de temps. Une partie de ma stratégie consiste à déterminer la tendance de l’action selon la moyenne mobile exponentielle 200 (EMA200) sur plusieurs unités de temps : 1 min, 15 min, 1 heure. Le code ci-dessous me permet de le faire séparément pour chaque graphique (par commodité, je fais mes tests en créant des indicateurs, mais à terme, j’utiliserai ProOrder pour automatiser mes trades) :

    Ce que j’aimerais, c’est combiner les résultats de ces codes sur mon 1 min de telle sorte que lorsque tous les indicateurs indiquent une tendance haussière, une quatrième variable contienne 1, et -1 pour une tendance baissière. Malheureusement, si j’importe mon code dans un TimeFrame sur le 1 min, le résultat est complètement faussé, car le logiciel ne peut pas calculer la MME200 en 1h faute d’un nombre suffisant de bougies chargées (le logiciel considère chaque bougie du graphique en minute et non chaque bougie du graphique en heure comme je l’espérais).

    Est-ce possible de faire appel aux résultats d’un autre programme dans ProRealTime ? Par exemple que pour chacune des bougies en minute, le programme regarde l’état de la bougie horaire correspondante et renvoie une valeur sans refaire les calculs. Pour les bougies en minute de 14h00 à 14h59, la bougie en heure vaut 1, donc chacune d’elle vaut 1.

    Y a-t-il une meilleure méthode d’entreprendre mon programme ?

    Merci d’avance

    #236057

    Bonjour, vous pouvez utiliser le délai d'instruction pour calculer l'EMA sur différentes périodes. Assurez-vous de charger suffisamment de barres pour le calcul de l'énergie en 1 heure.

    #236066

    Merci pour votre réponse Iván,

    Malheureusement cela ne fonctionne pas. J’ai eu la même idée précédemment, et la partie de code qui vérifie la tendance du 1H renvoie systématiquement 0, alors que la même portion de code appliquée en indicateur sur le graphique 1H fonctionne parfaitement.
    De la même façon, la partie de code qui vérifie la tendance du 15mn a un comportement erratique, en particulier lorsque les bougies du 15mn sont proches de la MME200. Le reste du temps, l’indicateur fonctionne mieux que le 1H, mais sans êtrte fiable pour autant.

    À mon avis, le logiciel ProRealTime prend en compte la dernière bougie de l’intervalle utilisé dans TimeFrame pour faire les calculs, et non les valeurs exprimées dans le graphique en 15mn. Je m’explique :
    La bougie 14h00 (Time vaut donc 140100) en 15mn est constituée de plusieurs bougies en 1mn s’étalant de 134600 (13h45) jusqu’à 140100 (14h00).
    Sur le graphique en 15mn, des fonctions invisibles pour l’utilisateur enregistrent le cours d’ouverture, le cours de clôture, le high et le low de chaque bougie 15mn. Quand un programme s’exécute sur le 15mn il fait appel à ces valeurs.
    Lors de l’utilisation de TimeFrame 15mn sur un graphique en 1mn, le programme prend les valeurs de la dernière bougie 1mn constituant la bougie en 15mn, qui n’a donc pas les mêmes valeurs Close Open High Low que la bougie 15mn.
    De fait, le programma devient faussé.

    Je ne suis pas certain s’il s’agit d’un bug du programme ou s’il a été conçu exprès de cette manière. Et je ne sais pas si une bougie en 15mn chargée via TimeFrame en 1mn s’appuie véritablement sur la dernière bougie en 1mn la constituant ou s’il s’appuie sur la première, des recherches plus approfondies me donneront sûrement la réponse.

    De là, je vois plusieurs solutions, mais je ne sais pas si ProRealTime embarque les fonctions nécessaires pour les rendre concrètes.
    1. Utiliser des variables super globales. En programmation “classique”, ce sont des variables accessibles depuis n’importe quel endroit du code. Ainsi un indicateur dans un graphique 15mn pourrait générer une variable SuperGlobal = x, et je pourrais faire appel à cette variable dans le code d’un autre indicateur sur un autre graphique, par exemple dans le 1mn : IF SuperGlobal > 2 THEN…
    2. Écrire les valeurs de l’indicateur du graphique en 15mn dans un fichier, puis lire ce fichier depuis un autre programme.
    3. Trouver le moyen d’appeler un autre programme depuis mon programme principal ou de faire fonctionner TimeFrame correctement.
    4. Ne travailler que dans le graphique en 1mn, et reconstituer à la main les calculs faits dans les autres graphiques. Cela implique de créer des fonctions pour repérer les Open Close High Low de chaque tranche horaire et de les stocker dans un array, puis de faire pareil pour les 15mn, puis de recalculer les MME200 selon ces tableaux, etc. J’aimerais éviter d’employer cette méthode beaucoup plus chronophage.

    Si vous avez des informations, même partielles, à propos des solutions que j’ai évoquées, je vous serai infiniment reconnaissant de me les partager.

    #236068

    modifier le code comme ceci

    #236070

    Merci pour votre réponse fifi743,

    Il y avait effectivement une coquille dans le code (resultat1Hour = -1 au lieu de resultat1H = -1), cela dit le résultat est toujours le même, resultat1H renvoie systématiquement 0.

    #236130

    Cette solution est basée sur les instructions updateonclose https://www.prorealcode.com/documentation/timeframe-probacktest-proorder/

    1 user thanked author for this post.
    #236389

    Merci beaucoup Iván, ça fonctionne !

Viewing 7 posts - 1 through 7 (of 7 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login