Bonjour,
Je recherche à savoir comment trouver les titres dont le volume sur les 15 premières minutes est supérieur à la moyenne des 15 premières minutes des 4 ou 5 dernières séances.
Merci d’avance pour votre aide.
Bonjour,
si posté dans probuilder, alors voici en version indicateur, sans passer par mot-clé “timeframe” afin de garder éventuellement la flexibilité de changer les horaires de fin et de début si besoin de regarder sur autre durée que 15 minutes. Toutefois le texte laisse penser que tu voudras peut-être en faire en screener, auquel cas tu pourras screener sur la variable “resultat”, et éventuellement trier par variable “vol0”:
heuredebut=090000
heurefin=091500
resultat=0
if opentime=heuredebut then
vol5=vol4
vol4=vol3
vol3=vol2
vol2=vol1
vol1=vol0
vol0=volume
endif
if opentime>heuredebut and opentime<heurefin then
vol0=vol0[1]+volume
endif
if vol5<>0 then
moyennevol=(vol1+vol2+vol3+vol4+vol5)/5
if vol0>moyennevol then
resultat=1
endif
endif
return resultat
Merci pour votre aide, ça correspond à ce que je cherchais.
Par contre quand je créé un screener (création simplifiée), avec des conditions sur plusieurs et différentes unités de temps, j’ai des titres qui ne sortent pas et d’autres qui ne devraient pas sortir.
Comme dans l’exemple ci-dessous l’indicateur “volume 15 minutes” est à 0 alors que j’ai demandé que les titres dont l’indicateur est à 1.
Pouvez vous éclairer mes lanternes sur la bonne démarche à suivre.
Merci d’avance
Je n’ai pas le temps réel du flux actions US pour répliquer le problème, mais je peux jeter un oeil au code du screener
// Le code qui suit fait référence à l'unité de temps:15 minutes
TIMEFRAME(15 minutes)
indicator1 = CALL "volume 15 minutes"
c1 = (indicator1 = 1)
// Le code qui suit fait référence à l'unité de temps:15 minutes
TIMEFRAME(15 minutes)
indicator2 = CALL "Cours vs borne haut range"
c2 = (indicator2 <= 0.5)
// Le code qui suit fait référence à l'unité de temps:daily
TIMEFRAME(daily)
indicator3 = Average[20](close)
c3 = (close > indicator3)
// Le code qui suit fait référence à l'unité de temps:daily
TIMEFRAME(daily)
indicator4 = Average[50](close)
c4 = (close > indicator4)
// Le code qui suit fait référence à l'unité de temps:daily
TIMEFRAME(daily)
indicator5 = Average[20](close)
indicator6 = indicator5
c5 = (indicator5 > indicator6[5])
// Le code qui suit fait référence à l'unité de temps:daily
TIMEFRAME(daily)
indicator7 = Average[50](close)
indicator8 = indicator7
c6 = (indicator7 > indicator8[5])
// Le code qui suit fait référence à l'unité de temps:1 hour
TIMEFRAME(1 hour)
indicator9 = RSI[21](close)
c7 = (indicator9 > 45)
// Le code qui suit fait référence à l'unité de temps:daily
TIMEFRAME(daily)
indicator10 = Average[50](Volume)
c8 = (indicator10 > 500000)
// Le code qui suit fait référence à l'unité de temps:daily
TIMEFRAME(daily)
criteria = CALL "ratio volume"
SCREENER[c1 AND c2 AND c3 AND c4 AND c5 AND c6 AND c7 AND c8] (criteria AS "ratio volume")
Ci-joint mon screener
Du coup, si ici c’est le même ratiovol que dans https://www.prorealcode.com/topic/indicateur-open-range-15-min/#post-186713
on va d’abord voir ce qu’il se passe dans l’autre
Bonjour à tous,
Je cherche à réaliser un indicateur qui se calcule tout au long de la journée, toutes les 5 minutes, et compare le volume intraday actuel cumulé du jour à sa moyenne des 20 jours précédents jusqu’au même moment de la journée.
TIMEFRAME(5 minutes)
// horaires actions américaines
heuredebut=153000
heurefin=220000
Il me semble que le code précédemment exposé dans ce message compare :
le volume intraday actuel du jour cumulé à un instant t
à
la moyenne des volumes cumulés (sur x périodes) mais jusqu’à l’heure de fin, donc jusqu’à 22 h dans mon cas.
Je cherche à calculer toutes les 5 minutes la moyenne des volumes intraday cumulés des 20 derniers jours mais cette moyenne doit se calculer sur les volumes intraday des jours précédents à la même heure que l’heure actuelle.
L’algorithme théorique serait :
EVERY 5 MINUTES DO
‘ Récupération du volume intraday actuel
volume_actuel = VOLUME_INTRADAY()
‘ Récupération de l’heure actuelle
heure_actuelle = HOUR(TIME())
‘ Calcul de la moyenne des volumes intraday des 20 jours précédents à la même heure
volume_moyen_20j = 0
heure_moyenne = heure_actuelle
FOR i = 1 TO 20
volume_moyen_20j = volume_moyen_20j + VOLUME_INTRADAY_HISTORIQUE(i, heure_moyenne)
NEXT i
volume_moyen_20j = volume_moyen_20j / 20
LOOP
Auriez-vous une solution pour traduire cet algorithme dans le langage de programmation du Probuilder ?
Bonjour,
à tester, en UT5 uniquement, pour voir a minima si ça reste cohérent pour un actif sans bougie “vide” (car si peu liquide avec des bougies ut5 vides, on risque des décalages dans les tableaux et une moyenne20 faussée). Choisir une ligne return ou l’autre en mettant // devant celle qu’on ne veut pas, selon qu’on souhaite visualiser l’évolution du volume id cumulé vs sa moyenne à la même heure sur 20j, ou bien juste l’histogramme 0/1 si plus grand que la moyenne:
heuredebut=153000
heurefin=220000
once maxrang=235500
resultat=0
rang=opentime
// reset du tableau 2D 20xN bougies de 5mn, N dépendant des horaires d'ouverture/fermeture
// en l'absence de tableau multi-dimensionnels en v11, tableau 2D émulé par 20 tableaux 1D de N éléments
if rang=heuredebut then
for j=0 to maxrang/500
i=500*j
$vol20[i]=$vol19[i]
$vol19[i]=$vol18[i]
$vol18[i]=$vol17[i]
$vol17[i]=$vol16[i]
$vol16[i]=$vol15[i]
$vol15[i]=$vol14[i]
$vol14[i]=$vol13[i]
$vol13[i]=$vol12[i]
$vol12[i]=$vol11[i]
$vol11[i]=$vol10[i]
$vol10[i]=$vol9[i]
$vol9[i]=$vol8[i]
$vol8[i]=$vol7[i]
$vol7[i]=$vol6[i]
$vol6[i]=$vol5[i]
$vol5[i]=$vol4[i]
$vol4[i]=$vol3[i]
$vol3[i]=$vol2[i]
$vol2[i]=$vol1[i]
$vol1[i]=$vol0[i]
$vol0[i]=volume
inivolu0=volume
next
elsif rang>heuredebut and rang<heurefin then
inivolu0=inivolu0[1]+volume
if rang mod 500 = 0 then
$vol0[rang]=inivolu0
endif
elsif rang<heuredebut or rang>heurefin then
$vol0[rang]=0
//
$vol20[rang]=0
$vol19[rang]=0
$vol18[rang]=0
$vol17[rang]=0
$vol16[rang]=0
$vol15[rang]=0
$vol14[rang]=0
$vol13[rang]=0
$vol12[rang]=0
$vol11[rang]=0
$vol10[rang]=0
$vol9[rang]=0
$vol8[rang]=0
$vol7[rang]=0
$vol6[rang]=0
$vol5[rang]=0
$vol4[rang]=0
$vol3[rang]=0
$vol2[rang]=0
$vol1[rang]=0
endif
if $vol20[rang]<>0 then
moyennevol=($vol1[rang]+$vol2[rang]+$vol3[rang]+$vol4[rang]+$vol5[rang]+$vol6[rang]+$vol7[rang]+$vol8[rang]+$vol9[rang]+$vol10[rang]+$vol11[rang]+$vol12[rang]+$vol13[rang]+$vol14[rang]+$vol15[rang]+$vol16[rang]+$vol17[rang]+$vol18[rang]+$vol19[rang]+$vol20[rang])/20
if $vol0[rang]>moyennevol then
resultat=1
endif
endif
//return resultat
return $vol0[rang], moyennevol