The "splice" is going to add unnecessary overhead. The synonym for intersection is "or", so something like
($p21h ~= "-1") OR
($p22h ~= "-1") OR
($p3hs ~= "-1") OR
($p51h ~= "-1") OR
($p52h ~= "-1") OR
($p6hs ~= "-1") OR
($p7hs ~= "-1") OR
($p8hs ~= "-1")
is your most most performant answer.
The signal representing the count of overlaps also has a more concise solution:
countOverlaps(1h,
$p21h ~= "-1",
$p22h ~= "-1",
$p3hs ~= "-1",
$p51h ~= "-1",
$p52h ~= "-1",
$p6hs ~= "-1",
$p7hs ~= "-1",
$p8hs ~= "-1")
With the "1h" saying you want a signal with a sample at least every hour to keep the interpolation flowing efficiently. That signal lets you find the condition when a minimum quantity of the conditions are met, eg
$countedConditions > 3