def z(df):
high_jugg=(
(df['high']>df['high'].shift(1))&(df['high']>df['high'].shift(2))&(df['high']>df['high'].shift(3))&(df['high']>df['high'].shift(4))&
(df['high']>df['high'].shift(-1))&(df['high']>df['high'].shift(-2))&(df['high']>df['high'].shift(-3))&(df['high']>df['high'].shift(-4))
)
low_jugg=(
(df['low']<df['low'].shift(1))&(df['low']<df['low'].shift(2))&(df['low']<df['low'].shift(3))&(df['low']<df['low'].shift(4))&
(df['low']<df['low'].shift(-1))&(df['low']<df['low'].shift(-2))&(df['low']<df['low'].shift(-3))&(df['low']<df['low'].shift(-4))
)
hp=df[high_jugg]
lp=df[low_jugg]
if len(hp)<2 or len(lp)<2:
return False
point_max=max(len(hp),len(lp))
point_min=min(len(hp),len(lp))
for i in range(point_min-1):
h_index=hp.index[i]
l_index=lp.index[i]
if abs(hp.iloc[i+1]['high']-hp.iloc[i]['high'])/hp.iloc[i]['high']>0.03:
return False
if abs(lp.iloc[i+1]['low']-lp.iloc[i]['low'])/lp.iloc[i]['low']>0.03:
return False
if (hp.iloc[i]['high']-lp.iloc[i]['low'])/lp.iloc[i]['low']>0.15 or (hp.iloc[i]['high']-lp.iloc[i]['low'])/lp.iloc[i]['low']<0.08:
return False
if 1.8*df['vol_ma20'].shift(1).loc[h_index]>hp.iloc[i]['volume']:
return False
if 1.8*df['vol_ma20'].shift(1).loc[l_index]>lp.iloc[i]['volume']:
return False
return [hp,lp]