orderflow: fix ask/bid & buy/sell mixup

This commit is contained in:
Joe Schr
2024-05-31 19:21:41 +02:00
parent 41def8b28b
commit bfb29d3c14
+20 -21
View File
@@ -117,21 +117,21 @@ def populate_dataframe_with_trades(
is_between, "imbalances" is_between, "imbalances"
].apply(lambda x: stacked_imbalance_ask(x, stacked_imbalance_range=_stacked_imb)) ].apply(lambda x: stacked_imbalance_ask(x, stacked_imbalance_range=_stacked_imb))
buy = df.loc[is_between, "bid"].apply( bid = df.loc[is_between, "bid"].apply(
lambda _: np.where(
trades_grouped_df["side"].str.contains("buy"),
0,
trades_grouped_df["amount"],
)
)
sell = df.loc[is_between, "ask"].apply(
lambda _: np.where( lambda _: np.where(
trades_grouped_df["side"].str.contains("sell"), trades_grouped_df["side"].str.contains("sell"),
0,
trades_grouped_df["amount"], trades_grouped_df["amount"],
0,
) )
) )
deltas_per_trade = sell - buy ask = df.loc[is_between, "ask"].apply(
lambda _: np.where(
trades_grouped_df["side"].str.contains("buy"),
trades_grouped_df["amount"],
0,
)
)
deltas_per_trade = ask - bid
min_delta = 0 min_delta = 0
max_delta = 0 max_delta = 0
delta = 0 delta = 0
@@ -146,10 +146,10 @@ def populate_dataframe_with_trades(
df.loc[is_between, "min_delta"] = min_delta df.loc[is_between, "min_delta"] = min_delta
df.loc[is_between, "bid"] = np.where( df.loc[is_between, "bid"] = np.where(
trades_grouped_df["side"].str.contains("buy"), 0, trades_grouped_df["amount"] trades_grouped_df["side"].str.contains("sell"), trades_grouped_df["amount"], 0
).sum() ).sum()
df.loc[is_between, "ask"] = np.where( df.loc[is_between, "ask"] = np.where(
trades_grouped_df["side"].str.contains("sell"), 0, trades_grouped_df["amount"] trades_grouped_df["side"].str.contains("buy"), trades_grouped_df["amount"], 0
).sum() ).sum()
df.loc[is_between, "delta"] = df.loc[is_between, "ask"] - df.loc[is_between, "bid"] df.loc[is_between, "delta"] = df.loc[is_between, "ask"] - df.loc[is_between, "bid"]
df.loc[is_between, "total_trades"] = len(trades_grouped_df) df.loc[is_between, "total_trades"] = len(trades_grouped_df)
@@ -176,11 +176,10 @@ def trades_to_volumeprofile_with_total_delta_bid_ask(trades: pd.DataFrame, scale
""" """
df = pd.DataFrame([], columns=DEFAULT_ORDERFLOW_COLUMNS) df = pd.DataFrame([], columns=DEFAULT_ORDERFLOW_COLUMNS)
# create bid, ask where side is sell or buy # create bid, ask where side is sell or buy
df["bid_amount"] = np.where(trades["side"].str.contains("buy"), 0, trades["amount"]) df["bid_amount"] = np.where(trades["side"].str.contains("sell"), trades["amount"], 0)
df["ask_amount"] = np.where(trades["side"].str.contains("sell"), 0, trades["amount"]) df["ask_amount"] = np.where(trades["side"].str.contains("buy"), trades["amount"], 0)
df["bid"] = np.where(trades["side"].str.contains("buy"), 0, 1) df["bid"] = np.where(trades["side"].str.contains("sell"), 1, 0)
df["ask"] = np.where(trades["side"].str.contains("sell"), 0, 1) df["ask"] = np.where(trades["side"].str.contains("buy"), 1, 0)
# round the prices to the nearest multiple of the scale # round the prices to the nearest multiple of the scale
df["price"] = ((trades["price"] / scale).round() * scale).astype("float64").values df["price"] = ((trades["price"] / scale).round() * scale).astype("float64").values
if df.empty: if df.empty:
@@ -246,9 +245,9 @@ def stacked_imbalance(
return stacked_imbalance_price return stacked_imbalance_price
def stacked_imbalance_bid(df: pd.DataFrame, stacked_imbalance_range: int):
return stacked_imbalance(df, "bid", stacked_imbalance_range, should_reverse=False)
def stacked_imbalance_ask(df: pd.DataFrame, stacked_imbalance_range: int): def stacked_imbalance_ask(df: pd.DataFrame, stacked_imbalance_range: int):
return stacked_imbalance(df, "ask", stacked_imbalance_range, should_reverse=True) return stacked_imbalance(df, "ask", stacked_imbalance_range, should_reverse=True)
def stacked_imbalance_bid(df: pd.DataFrame, stacked_imbalance_range: int):
return stacked_imbalance(df, "bid", stacked_imbalance_range, should_reverse=False)