def ta_z_norm(df: Typing.PatchedPandas, period=200, ddof=1, demean=True, lag=0): # (value - mean) / std s = df.rolling(period).std(ddof=ddof) a = (df - df.rolling(period).mean().shift(lag)) if demean else df return (a / s / 4).rename(df.name)
def ta_z_norm(df: Typing.PatchedPandas, period=200, ddof=1, demean=True, lag=0): if has_indexed_columns(df): return pd.DataFrame( {col: ta_z_norm(df[col], period, ddof, demean) for col in df.columns}, index=df.index ) # (value - mean) / std s = df.rolling(period).std(ddof=ddof) a = (df - df.rolling(period).mean().shift(lag)) if demean else df return (a / s / 4).rename(df.name)
def ta_ncdf_compress(df: Typing.PatchedPandas, period=200, lower_percentile=25, upper_percentile=75) -> Typing.PatchedPandas: if has_indexed_columns(df): return pd.DataFrame( {col: ta_ncdf_compress(df[col], period, lower_percentile, upper_percentile) for col in df.columns}, index=df.index ) f50 = df.rolling(period).mean().rename("f50") fup = df.rolling(period).apply(lambda x: np.percentile(x, upper_percentile)).rename("fup") flo = df.rolling(period).apply(lambda x: np.percentile(x, lower_percentile)).rename("flo") return pd.Series(norm.cdf(0.5 * (df - f50) / (fup - flo)) - 0.5, index=df.index, name=df.name)
def ta_ncdf_compress(df: Typing.PatchedPandas, period=200, lower_percentile=25, upper_percentile=75) -> Typing.PatchedPandas: f50 = df.rolling(period).mean().rename("f50") fup = df.rolling(period).apply( lambda x: np.percentile(x, upper_percentile)).rename("fup") flo = df.rolling(period).apply( lambda x: np.percentile(x, lower_percentile)).rename("flo") return pd.Series(norm.cdf(0.5 * (df - f50) / (fup - flo)) - 0.5, index=df.index, name=df.name)