Variables d’appel dans le code d’un indicateur

Forums ProRealTime forum Français Support plateforme ProRealTime Variables d’appel dans le code d’un indicateur

  • This topic has 28 replies, 4 voices, and was last updated 1 day ago by avatarumrk.
Viewing 14 posts - 16 through 29 (of 29 total)
  • #249889

    note au modérateur : désolé, je pensais faciliter la tâche de mes correspondants, dont certains étaient Britanniques, en leur répondant en français. Je comprends votre commentaire, et j’en tiendrai compte à l’avenir.

    #249892

    note au modérateur : désolé, je pensais faciliter la tâche de mes correspondants, dont certains étaient Britanniques, en leur répondant dans leur langue. Je comprends votre commentaire, et j’en tiendrai compte à l’avenir.

    #249893

    Bon, je remercie tous ceux qui ont pris la peine de me répondre, mon problème est maintenant résolu, même si ce n’est pas de la façon que j’imaginais. Mon besoin étant de calculer un temps écoulé (en jours calendaires ou en jours de bourse) depuis un évènement dont la date m’est connue, j’avais imaginé de passer en argument CurrentDay= Days. Cela ne marche pas,  mais par contre CurrentDay= Date marche. Toutefois faire la différence entre deux dates en format YYYMMDD ne donne pas un nombre de jours. Sur une idée de kingmordecal, j’ai donc créée l’indicateur PSEUDODAYS, qui me permet de faire une soustraction me donnant un résultat qui, s’il introduit de petites bizarreries dans le décompte à cause des années bissextiles, ou des mois dont le nb de jours n’est pas égal à 30, répond quand même à mon besoin.  Bon, pour les puristes, c’est un peu crade comme solution, mais je vais m’en contenter….

    (je fais une parenthèse : j’ai développé une application (en LibreOffice , puis en Excel) de thermique qui calcule la température sur une année dans ma maison (mon grenier, ma cave, mon séjour, les tuiles de mon toit, etc …) en intégrant l’équation de Fourier à l’intérieur de mes murs (pas de deux minutes .. ) en tenant compte de l’effet du rayonnement solaire sur mes tuiles, etc .. en utilisant d’une température extérieure reconstituée par morceaux de sinusoïdes à partir des Min et des Max journaliers sur une année. C’est une plaisanterie qui m’a demandé des milliers d’heures de travail. Et bien le plus dur dans tout ça, ce n’a pas été les problèmes de thermique (pourtant difficiles), mais la gestion des années bissextiles sur des durées d’exécution à cheval sur deux années ! (ainsi que le fait de slalomer entre les bugs d’Excel dans les dates) !!!!

    Indicateur PSEUDODAYS (variable d’appel TheDate)

    TheYear = Floor(TheDate / 10000, 0)
    TempDay = Floor(TheDate / 100, 0)
    TheDay = ((TheDate / 100) – TempDay) * 100

    TempMonth = Floor(TheDate / 100, 0) * 100
    TempMonth2 = TempMonth / 10000
    TheMonth = (TempMonth2 – Floor(TempMonth / 10000, 0)) * 100

    PseudoDays= (TheYear-1900)*365+TheMonth*30+TheDAY

    Return PseudoDays

    #249921
    JS

    Bonjour,
    Ce code est moins sujet aux erreurs d’arrondi…

    1 user thanked author for this post.
    #249923

    Merci beaucoup !

    2 users thanked author for this post.
    #249926

    DAYS restitue le nombre de jours écoulés depuis le 1/1/1970 (en mode similaire à Unix) à la barre indiquée entre le carré des parents.
    Si cette barre est indiquée, vous devez vous assurer du courant par défaut.

    Je ne sais pas à quoi servent vos codes, mais juste pour tester le fonctionnement de CALL, les codes que j’ai postés fonctionnent.

     

    1 user thanked author for this post.
    #249961

    Bon, grâce à JS, je peux même propose une version de PSEUDODAYS qui devrait donner le résultat exact (sauf que mon code plante (“calculation error”), et je ne sais pas pourquoi !)

     

    $JOURS[1]=0
    $JOURS[2]=31
    $JOURS[3]=59
    $JOURS[4]=90
    $JOURS[5]=120
    $JOURS[6]=151
    $JOURS[7]=181
    $JOURS[8]=212
    $JOURS[9]=243
    $JOURS[10]=273
    $JOURS[11]=304
    $JOURS[12]=334
    $JOURS[13]=365

    TheYear = Floor(TheDate / 10000)
    TheMonth = Floor(TheDate / 100) MOD 100
    TheDay = TheDate MOD 100

     

    DaysOfPreviousMonths=$JOURS[TheMonth]

    CorrectBissext=FLOOR((TheYear-1900)/4)

     

    NewPseudoDays = (TheYear – 1900) * 365+CorrectBissext + DaysOfPreviousMonths + TheDay

    RETURN NewPseudoDays

    #249963

    (Il reste à corriger une erreur résiduelle si , das une année bissextile en cours, on est au delà du 28 Février …)

    #249964
    JS

    Salut,

    Ce qui est frappant, c’est que « $Days[ ] » et « $Jours[ ] » sont utilisés de manière interchangeable…

    Le code est adapté au format de date : YYYYMMDD (et non DDMMYYYY)

    Je pense que le code fonctionne bien…

    1 user thanked author for this post.
    #249965
    JS

    Oubliez le point 1, c’était à cause de la traduction…

    1 user thanked author for this post.
    #249966
    JS

    Le code fonctionne bien jusqu’en 2099 car les années du siècle (2100, 2200, 2300,…) ne sont pas des années bissextiles et avec « Floor((TheYear-1900)/4) » après 2100 vous comptez 1 jour de trop…

    1 user thanked author for this post.
    #249969

    Avec ça, le résultat devrait être correct .. (NB : 1) je teste CurrentYearFeb29Issue par rapport à 1, le logiciel a refusé de faire le test par rapport à True. Pourquoi ? 2) mon code plante toujours .. des idées ?)

     

    JOURS[1]=0
    $JOURS[2]=31
    $JOURS[3]=59
    $JOURS[4]=90
    $JOURS[5]=120
    $JOURS[6]=151
    $JOURS[7]=181
    $JOURS[8]=212
    $JOURS[9]=243
    $JOURS[10]=273
    $JOURS[11]=304
    $JOURS[12]=334
    $JOURS[13]=365

    TheYear = Floor(TheDate / 10000)
    TheMonth = Floor(TheDate / 100) MOD 100
    TheDay = TheDate MOD 100

    CurrentYearFeb29Issue=(TheYear MOD 4) =0 AND (TheYear MOD 100) <>0

    IF (CurrentYearFeb29Issue = 1) AND (TheMonth>2) THEN
    Feb29Issue=1
    Else
    Feb29Issue=0
    ENDIF

    DaysOfPreviousMonths=$JOURS[TheMonth]+Feb29Issue

    CorrectBissext=FLOOR((TheYear-1901)/4)-FLOOR((TheYear-1901)/100)

     

    NewPseudoDays = (TheYear – 1901) * 365+CorrectBissext + DaysOfPreviousMonths + TheDay

    RETURN NewPseudoDays

    #249980
    JS

    Salut,

    Je pense que le code est correct maintenant…

    Attention aux traductions de l’anglais vers le français car ce n’est pas toujours cohérent…

    J’ai joint le « itf-file » que vous pouvez importer dans les indicateurs de PRT…

    #249982

    Merci ! Bon cette fois on peut fermer ce fil, problème résolu !

    1 user thanked author for this post.
    avatar JS
Viewing 14 posts - 16 through 29 (of 29 total)

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