Bonjour à toute la communauté,
sur la base du code PRT JOINT DU PIVOT HORAIRE INTRADAY, comment peut on l’adapter pour faire un pivot à 30 min?
Le code joint a été réalisé par robertogozzi et fonctionne correctement.
En vous remerciant 😉
christophe
//DEFPARAM DrawOnLastBarOnly = true
Pivot = 1
IF Openhour <> openhour [ 1 ] THEN
//
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + (5900) //YYYYMMDDHHMMSS
MyPP = PP
StartBar = BarIndex
//
myLastHigh = myHigh
myLastLow = myLow
myLastClose = Close [ 1 ]
myHigh = High
myLow = Low
myopen = open
ELSE
myHigh = Max(myHigh, High)
myLow = Min(myLow, Low)
ENDIF
// Formule en fonction de la valeur du paramètre Pivot
IF Pivot = 2 THEN
// Point pivot : PP= (Hveille + Bveille + Cveille + Ojour) / 4
PP = (myLastHigh + myLastLow + myLastClose + myopen) / 4
ELSIF Pivot = 3 THEN
// Point pivot : PP= (Hveille + Bveille + Ojour) / 3
PP = (myLastHigh + myLastLow + myopen) / 3
ELSE
// Point pivot : PP= (Hveille + Bveille + Cveille) / 3
PP = (myLastHigh + myLastLow + myLastClose) / 3
ENDIF
Res1 = 2 * PP - myLastLow
Res2 = PP + myLastHigh - myLastLow
Res3 = myLastHigh + 2 * (PP - myLastLow)
Sup1 = 2 * PP - myLastHigh
Sup2 = PP - myLastHigh + myLastLow
Sup3 = myLastLow - 2 * (myLastHigh - PP)
DrawSegment(StartBar,MyPP,DateToBarIndex(MyEnd),MyPP) coloured(0,255,0,255) style(Line, 1)
Return //pp
Bonjour, a priori, en modifiant les lignes 4 et 6 comme ceci (à tester):
//DEFPARAM DrawOnLastBarOnly = true
Pivot = 1
IF Openhour <> openhour [ 1 ] or openminute=30 THEN
//
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + 3000*(openminute=30) + (2900) //YYYYMMDDHHMMSS
MyPP = PP
StartBar = BarIndex
//
myLastHigh = myHigh
myLastLow = myLow
myLastClose = Close [ 1 ]
myHigh = High
myLow = Low
myopen = open
ELSE
myHigh = Max(myHigh, High)
myLow = Min(myLow, Low)
ENDIF
// Formule en fonction de la valeur du paramètre Pivot
IF Pivot = 2 THEN
// Point pivot : PP= (Hveille + Bveille + Cveille + Ojour) / 4
PP = (myLastHigh + myLastLow + myLastClose + myopen) / 4
ELSIF Pivot = 3 THEN
// Point pivot : PP= (Hveille + Bveille + Ojour) / 3
PP = (myLastHigh + myLastLow + myopen) / 3
ELSE
// Point pivot : PP= (Hveille + Bveille + Cveille) / 3
PP = (myLastHigh + myLastLow + myLastClose) / 3
ENDIF
Res1 = 2 * PP - myLastLow
Res2 = PP + myLastHigh - myLastLow
Res3 = myLastHigh + 2 * (PP - myLastLow)
Sup1 = 2 * PP - myLastHigh
Sup2 = PP - myLastHigh + myLastLow
Sup3 = myLastLow - 2 * (myLastHigh - PP)
DrawSegment(StartBar,MyPP,DateToBarIndex(MyEnd),MyPP) coloured(0,255,0,255) style(Line, 1)
Return //pp
Salut,
Je viens de l’essayer et çà marche nickel. Merci beaucoup 😉
Peut on faire le même système pour un pivot annuel, mensuel et hebdomadaire?
Dans l’attente de te lire.
Christophe.
Re,
Je me posais une autre question,
Si je veux modifier 30 en 10 min, le code peut il être modifié lignes 4 et 6 comme suit:
IF Openhour <> openhour [ 1 ] or openminute=10 THEN
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + 3000*(openminute=10) + (2900) //YYYYMMDDHHMMSS
Si ce n’est pas le cas, comment corriger ces lignes et pour comprendre comment les as tu calculé ?
en te remerciant
Re,
Je me posais une autre question,
Si je veux modifier 30 en 10 min, le code peut il être modifié lignes 4 et 6 comme suit:
IF Openhour <> openhour [ 1 ] or openminute=10 THEN
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + 3000*(openminute=10) + (2900) //YYYYMMDDHHMMSS
Si ce n’est pas le cas, comment corriger ces lignes et pour comprendre comment les as tu calculé ?
en te remerciant
Pour le cas du 10mn, on pourrait faire ainsi par exemple pour ces 2 lignes:
IF Openhour <> openhour[1] or openminute=10 or openminute=20 or openminute=30 or openminute=40 or openminute=50 THEN
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + 100*openminute + (900) //YYYYMMDDHHMMSS
Bonjour et merci pour tes retours,
j’ai également trouvé ces 2 indicateurs.
Je préfère le code de base de robertogozzi parce que les pivots qu’il a codé sont sous forme de segment et non de ligne. Et on peut également paramétrer le segment, ce qui est pratique.
Sauf que je ne n’ai pas réussi à paramétrer les lignes 4, 6 et 40 pour tracer ces pivots en unité hebdo, mensuel et annuel.
Aurais tu une idée à ce sujet?
😉
Re,
Voudrais tu bien m’expliquer comment sont calculés 3000*(openminute=10) + (2900) //YYYYMMDDHHMMSS dans MyEnd ?
christophe
C’était avec =30 (tu as mis =10), ça permettait de multiplier 3000 par 0 ou 1, mais ce n’était pas nécessaire ici, j’étais au milieu d’un autre code où j’avais besoin de faire comme ça pour un autre problème, et parmi toutes les façons de faire ici ça m’a fait penser à celle-ci en premier, mais il suffit de faire plus simple pour le 30mn (à l’image de la version que j’ai mis pour le 10 minutes dans l’autre post):
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + 100*openminute + (2900)
Ok, si tu préfères le graphisme en segments plutôt qu’en lignes renvoyées par return, je comprends que tu préfères ce type de code, mais il faut surtout voir distinctement la façon de calculer d’une part, et le graphisme d’autre part, les codes library étaient surtout cités pour une façon de calculer plus adaptée aux plus grandes unités de temps mensuelles et hebdo que le code ici présent, dont myend sert surtout à un horaire intra et limite le nombre de segments erronés autour du changement de date. Pour plus grande UT, tu devrais donc essayer de mixer “façon de calculer d’autres codes” + “graphismes segments de ton code de départ”.
Bonjour et merci beaucoup pour touts tes retours.
Peut on écrire ce code comme cela?
IF Openhour <> openhour[1] or openminute=15 or openminute=25 or openminute=35 or openminute=45 THEN
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + 100*openminute + (2900)
Au sens “erreur de syntaxe” je n’en vois pas, donc oui…
Par contre, la question posée ainsi, je ne sais pas ce que tu en attends, donc je ne peux pas te dire si ça va faire ce que tu veux. Tout au plus je peux inverser le processus en disant ce que va faire ce qui est écrit et tenter de deviner à quelles attentes ça correspond, et donc te dire qu’écrit comme ceci, tu prends des points de départ irréguliers espacés de soit 15mn soit 10mn partant de l’heure pile, de et quart, de 25mn 35mn 45mn puis heure pile à nouveau, pour des durées de 30mn. Comme ça semble plutôt bizarre ce mélange de départs non réguliers pour des intervalles qui se chevauchent, je vais supposer que ce n’est pas ce que tu voulais.
Oui oui tu as raison, j’aurai du l’écrire comme suit pour avoir un multiple de 15 min:
IF Openhour <> openhour[1] or openminute=15 or openminute=30 or openminute=45 then
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + 100*openminute + (2900)
Est ce plus cohérent dans le fonctionnement du code?
Re,
Je ne veux vraiment pas abuser de ton temps, mais je me rends compte que je ne sais pas lire et pas compris ces lignes de codes que tu m’as écrite ci-dessous.
Voudrais tu bien me les lire comme tu as fait précédemment pour que je comprenne les enchainements de ce code?
IF Openhour <> openhour[1] or openminute=10 or openminute=20 or openminute=30 or openminute=40 or openminute=50 THEN
1
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + 100*openminute + (2900)
Bien à toi christophe
lire : 900 au lieu de 2900 autant pour moi
1
MyEnd = (Opendate * 1000000) + (OpenHour * 10000) + 100*openminute + (900)