Bonjour,
Je constate un comportement inattendu de CurrentTime utilisé dans un ProScreener (unité de temps journalière, code par programmation, flux temps réel activé).
Objectif : calculer une fraction de séance US écoulée pour ajuster un ratio de volume intraday (volume du jour ÷ volume moyen 20 jours × fraction de séance écoulée).
Code simplifié :
HeureActuelle = CurrentTime
HeureH = Round(HeureActuelle / 10000 - 0.5)
ResteMinSec = HeureActuelle - HeureH * 10000
MinuteM = Round(ResteMinSec / 100 - 0.5)
SecondeS = ResteMinSec - MinuteM * 100
SecondesEcoulees = HeureH * 3600 + MinuteM * 60 + SecondeS
Problème : testé à 11h29 heure de Paris (marché US pas encore ouvert), le résultat du calcul indique une valeur cohérente avec environ 16h00 heure de Paris (soit ~30 minutes après l’ouverture théorique du NYSE), et ce résultat reste identique entre deux exécutions à des heures réelles différentes (11h20 puis 11h29).
Question : dans le contexte spécifique du ProScreener (par opposition à un Indicateur classique sur graphique), CurrentTime reflète-t-il bien l’heure système en temps réel, ou est-il figé/rafraîchi seulement à certains moments (fin de scan complet, dernière clôture connue, etc.) ? Existe-t-il une constante plus fiable pour obtenih l’heure réelle “maintenant” dans un ProScreener ?
Merci d’avance !
Les horaires d’un marché encore fermé sont figés à l’heure de fermeture ; sinon, ils changent constamment, même sur le graphique journalier.
Essayez cet indicateur (j’ai légèrement modifié les calculs pour le détail des horaires) :
DEFPARAM DrawOnLastBarOnly = true
HeureActuelle = CurrentTime
HeureH = floor(HeureActuelle / 10000,0) //Round(HeureActuelle / 10000 - 0.5)
ResteMinSec = HeureActuelle - HeureH * 10000
MinuteM = floor(ResteMinSec / 100,0)
SecondeS = floor(ResteMinSec - MinuteM * 100,9)
SecondesEcoulees = floor(HeureH * 3600 + MinuteM * 60 + SecondeS,0)
DrawText("#HeureH#:#MinuteM#:#SecondeS# (#SecondesEcoulees#)",BarIndex + 5,close)
RETURN
// EMAs on 1 hour timeframe
TIMEFRAME(1 hour)
ema200 = ExponentialAverage[200](close)
ema9 = ExponentialAverage[9](close)
ema18 = ExponentialAverage[18](close)
// Pullback to EMA200 in last 5 bars
touchedEMA200 = 0
for i = 0 to 4 do
if low[i] <= ema200[i] + 2*pointsize and high[i] >= ema200[i] - 2*pointsize then
touchedEMA200 = 1
endif
next
// Bullish: EMA9 crosses over EMA18 after pullback to EMA200
bullSignal = touchedEMA200 and (ema9 crosses over ema18)
// Bearish: EMA9 crosses under EMA18 after pullback to EMA200
bearSignal = touchedEMA200 and (ema9 crosses under ema18)
TIMEFRAME(default)
SCREENER[bullSignal or bearSignal](bullSignal as "Bull Setup", bearSignal as "Bear Setup")