Ehler's work has a Roofing Filter that is a BandPass filter. Below is code for that
def RoofingBandPassFilter (vals):
filt = np.ones (len(vals))*vals
hps = np.ones(len(vals))*vals

for i in range (2, len(vals)):
# Highpass filter cyclic components whose periods are shorter tahn 48 bars
# converted cos and sin arguments from degrees to radians as mentioned in the paper
alpha1 = (np.cos(0.0925) + np.sin(0.0925) - 1) / np.cos(0.0925)
hps[i] = ((1.0-alpha1/2.0)**2)*(vals[i]-2*vals[i-1]+vals[i-2]) + 2*(1-alpha1)*hps[i-1] - ((1-alpha1)** 2)*hps[i-2]

# smooth with a super smoother
a1 = np.exp(-1.414 * 3.14159 / 10)
b1 = 2 * a1 * np.cos(0.436)

c3 = -a1 * a1
c1 = 1 - b1 - c3
filt[i] = c1*(hps[i]+hps[i-1])/2 + b1*filt[i-1] + c3*filt[i-2]
return filt

But it does not have the center and width parameters of zorro