Merci Nicolas pour le support,
J’ai bien avancé dans le développement de mon Proscreener et il commence à répondre à mes attentes de détection séquentielle.
Je rappelle mon besoin, détecter cette séquence pour en obtenir un signal :
- C1 se produit en UT1,
- alors seulement dans les 3 périodes suivantes de l’UT1 ; C2 se produit en UT2,
- alors seulement dans les 4 périodes suivantes de l’UT2 ; C3 se produit en UT3.
Malheureusement, je bloque sur l’aspect séquentiel :
//Objectif : Vérifier que la première condition ait eu lieu dans l'UT1 dans les 3 dernières périodes
TIMEFRAME(UT1)
Evenement1 = Indicateur1>Indicateur2
C1 = SUMMATION[3](Evenement1 )>0
//Objectif : Vérifier que la condition suivante ai lieu dans l'UT2
TIMEFRAME(UT2)
Evenement2 = Indicateur3>Indicateur4
C2 = SUMMATION[4](Evenement2)>0
//Objectif : Vérifier que la condition suivante ai lieu dans l'UT3
TIMEFRAME(UT3)
Evenement3 = Indicateur5>Indicateur6
C3 = Evenement3
// Signal = C1 a eu lieu au moins une fois dans les 3 dernières périodes de l'UT1 et C2 a lieu au moins une fois dans les 4 dernières périodes de l'UT2
et C3 a lieu
Signal = C1 AND C2 AND C3
Le problème de cette méthode consiste dans le fait que la séquence va tout de même renvoyer un signal alors que la séquence ne se produit pas :
Par exemple lorsque C2 a lieu avant C1.
Alors comment faire pour vérifier la bonne séquence temporelle ?
J’ai tenté pour cela de stocker le CurrentTime des 3 événements, pour vérifier la bonne séquence temporelle :
IMEFRAME(UT1)
Evenement1 = Indicateur1>Indicateur2
C1 = SUMMATION[3](Evenement1 )>0
//
Once TimeC1 = 000000
IF Evenement1 then
TimeC1 = CurrentTime
ENDIF
TIMEFRAME(UT2)
Evenement2 = Indicateur3>Indicateur4
C2 = SUMMATION[4](Evenement2)>0
//
Once TimeC2 = 000000
IF Evenement2 then
TimeC2 = CurrentTime
ENDIF
TIMEFRAME(UT3)
Evenement3 = Indicateur3>Indicateur4
C3 = Evenement3
//
Once TimeC3 = 000000
IF Evenement3 then
TimeC3 = CurrentTime
ENDIF
// Signal = C1 a eu lieu au moins une fois dans les 3 dernières périodes de l'UT1 et C2 a lieu au moins une fois dans les 4 dernières périodes de l'UT2,
et C3 a lieu, et C2 a lieu après C1, et C3 a lieu après C2
Signal = C1 AND C2 AND C3 AND TimeC2>TimeC1 AND TimeC3>TimeC2
Mais là je bloque car si l’événement Cn survient à nouveau après l’évenement Cn+1, la séquence n’est alors plus reconnue.
Par exemple C1 a lieu, puis C2, puis a nouveau C1 puis C3, le signal est bon mais la séquence n’est pas reconnue car elle a été transformée en cours de formation.
J’ai pensé à tenter de stocker le CurrentTime lorsque l’événement Cn arrive la première fois SEULEMENT mais je ne vois pas comment y arriver tout en conservant la séquence :
- C1 se produit en UT1,
- alors seulement dans les 3 périodes suivantes de l’UT1 ; C2 se produit en UT2,
- alors seulement dans les 4 périodes suivantes de l’UT2 ; C3 se produit en UT3.
Merci de m’avoir lu jusqu’ici et merci par avance pour tes éclaircissements