If you take a look at the 'Check three bear' rule you have posted, you will see that there is a contradiction between the second Conditional Element and the third:
not Tick(this after $t...)
$t1 : Tick(this after $t ...)
This is what I've used in the past to get the latest 3 events from a stream:
$t1:Tick() //the newest
not Tick(this after $t1)
$t2:Tick(this before $t1)
not Tick(this before $t1, this after $t2) //no events between $t1 and $t2
$t3:Tick(this before $t2)
not Tick(this before $t2, this after $t3) //no events between $t2 and $t3
Another solution could be to use sliding windows:
List(size == 3) from collect( Tick(...) over window:length(3) )
In this case, the size == 3 condition is to prevent the activation of the rule when there are only 1 or 2 elements in the window.
Hope it helps,