def calculate_chaikin_money_flow_signal(cmf: pd.Series) -> pd.Series: """ Generates a trend reversal signal from Chaikin Money Flow. A false signal may occur when the trend is weak, barely crossing over zero. Args: :cmf (pd.Series): Chaikin Money Flow series Returns: pd.Series: signal -1, 0 ,1 """ cmf_sign = np.sign(cmf) cmf_shifted_sign = cmf_sign.shift(1) cmf = cmf_sign * (cmf_sign != cmf_shifted_sign) cmf.Name = 'chakin_signal' return cmf