Untitled

 avatar
unknown
python
9 months ago
2.6 kB
4
Indexable
#################
# CELL 1
#################
auto_corr_res = {}
z = 1.960



def fisher_transform(r):
    return 0.5 * np.log((1 + r) / (1 - r))


def inv_fisher_transform(x):
    return (np.exp(2 * x) - 1) / (np.exp(2 * x) + 1)


def compute_auto_corr(x, n):
    return x.clip(-1, 1).corr(x.clip(-1, 1).shift(n))

def compute_upper_lower(x, lag):
    auto_corr = compute_auto_corr(x, lag)
    z_r = fisher_transform(auto_corr)

    n = len(x) - lag
    se = 1 / np.sqrt(n - 3)
    se_z = se * z
    u = z_r + se_z
    l = z_r - se_z
    return inv_fisher_transform(l), inv_fisher_transform(u)


for error_col in col_taxon["error"]:
    error_series = trades_preds[error_col].dropna().clip(-1, 1)

    auto_corr = error_series.corr(error_series.shift(1))

    n = error_series.shape[0]
    z_r = fisher_transform(auto_corr)

    se = 1 / np.sqrt(n - 3)
    se_z = se * z
    u = z_r + se_z
    l = z_r - se_z

    auto_corr_res[error_col] = {
        "corr": auto_corr,
        "lower": inv_fisher_transform(l),
        "upper": inv_fisher_transform(u),
    }
auto_corr_df = pd.DataFrame(auto_corr_res).T
auto_corr_df

#################
# CELL 2
#################
error_cols_oi = col_taxon["error"]
multi_autocorr_res = {}

lags = range(1, 2001, 10)

for error_col in tqdm(error_cols_oi):
    error_series = trades_preds[error_col].dropna().clip(-1, 1)
    auto_corrs = []
    for lag in lags:
        auto_corrs.append(compute_auto_corr(error_series, lag))
    multi_autocorr_res[error_col] = auto_corrs

multi_autocorr_re_up = {}
multi_autocorr_re_low = {}

for error_col in tqdm(error_cols_oi):
    error_series = trades_preds[error_col].dropna().clip(-1, 1)
    auto_corrs_up = []
    auto_corrs_low = []
    for lag in lags:
        u, l = compute_upper_lower(error_series, lag)
        auto_corrs_up.append(u)
        auto_corrs_low.append(l)
    multi_autocorr_re_up[f"{error_col}"] = auto_corrs_up
    multi_autocorr_re_low[f"{error_col}"] = auto_corrs_low

multi_autocorr_up = pd.DataFrame(multi_autocorr_re_up, index=lags)
multi_autocorr_low = pd.DataFrame(multi_autocorr_re_low, index=lags)
multi_autocorr = pd.DataFrame(multi_autocorr_res, index=lags)

#################
# CELL 3
##################
plt.figure(figsize=(30, 20))
plt.title("ACF of All Trades, for selected models")
for error_col in error_cols_oi:
    plt.fill_between(
        multi_autocorr.index,
        multi_autocorr_re_low[error_col],
        multi_autocorr_re_up[error_col],
        alpha=0.3,
    )
    plt.plot(multi_autocorr[error_col], label=error_col)
plt.legend()
Editor is loading...
Leave a Comment