Spaces:
Runtime error
Runtime error
cyberosa
commited on
Commit
·
8704528
1
Parent(s):
7f9e80f
new nr trades and total bet amount per trader and market
Browse files- app.py +27 -10
- tabs/market_plots.py +70 -0
app.py
CHANGED
|
@@ -27,8 +27,8 @@ from tabs.daily_graphs import (
|
|
| 27 |
from scripts.utils import get_traders_family
|
| 28 |
from tabs.market_plots import (
|
| 29 |
plot_kl_div_per_market,
|
| 30 |
-
plot_total_bet_amount,
|
| 31 |
plot_nr_trades_per_trader_per_market,
|
|
|
|
| 32 |
)
|
| 33 |
|
| 34 |
|
|
@@ -151,7 +151,7 @@ with demo:
|
|
| 151 |
)
|
| 152 |
|
| 153 |
with gr.Tabs():
|
| 154 |
-
with gr.TabItem("🔥 Weekly
|
| 155 |
with gr.Row():
|
| 156 |
gr.Markdown("# Weekly metrics of all traders")
|
| 157 |
with gr.Row():
|
|
@@ -389,7 +389,7 @@ with demo:
|
|
| 389 |
# else:
|
| 390 |
# gr.Markdown("Data not available yet")
|
| 391 |
|
| 392 |
-
with gr.TabItem("📉
|
| 393 |
with gr.Row():
|
| 394 |
gr.Markdown(
|
| 395 |
"# Weekly Market Prediction Accuracy for Closed Markets (Kullback-Leibler Divergence)"
|
|
@@ -406,13 +406,7 @@ with demo:
|
|
| 406 |
with gr.Column(scale=1):
|
| 407 |
interpretation = get_interpretation_text()
|
| 408 |
|
| 409 |
-
|
| 410 |
-
gr.Markdown(
|
| 411 |
-
"# Weekly total bet amount by market creator and trader type"
|
| 412 |
-
)
|
| 413 |
-
with gr.Row():
|
| 414 |
-
total_bet_amount = plot_total_bet_amount(trader_agents_data)
|
| 415 |
-
with gr.TabItem("💹 Metrics at the market level"):
|
| 416 |
with gr.Row():
|
| 417 |
gr.Markdown(
|
| 418 |
"# Weekly nr of trades per trader per market for all traders"
|
|
@@ -440,6 +434,29 @@ with demo:
|
|
| 440 |
trades_volume_plot = plot_nr_trades_per_trader_per_market(
|
| 441 |
trader_agents_data, trader_filter="non_agent"
|
| 442 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 443 |
|
| 444 |
with gr.TabItem("🎖️Weekly winning trades % per trader"):
|
| 445 |
with gr.Row():
|
|
|
|
| 27 |
from scripts.utils import get_traders_family
|
| 28 |
from tabs.market_plots import (
|
| 29 |
plot_kl_div_per_market,
|
|
|
|
| 30 |
plot_nr_trades_per_trader_per_market,
|
| 31 |
+
plot_total_bet_amount_per_trader_per_market,
|
| 32 |
)
|
| 33 |
|
| 34 |
|
|
|
|
| 151 |
)
|
| 152 |
|
| 153 |
with gr.Tabs():
|
| 154 |
+
with gr.TabItem("🔥 Weekly metrics"):
|
| 155 |
with gr.Row():
|
| 156 |
gr.Markdown("# Weekly metrics of all traders")
|
| 157 |
with gr.Row():
|
|
|
|
| 389 |
# else:
|
| 390 |
# gr.Markdown("Data not available yet")
|
| 391 |
|
| 392 |
+
with gr.TabItem("📉 Markets Kullback–Leibler divergence"):
|
| 393 |
with gr.Row():
|
| 394 |
gr.Markdown(
|
| 395 |
"# Weekly Market Prediction Accuracy for Closed Markets (Kullback-Leibler Divergence)"
|
|
|
|
| 406 |
with gr.Column(scale=1):
|
| 407 |
interpretation = get_interpretation_text()
|
| 408 |
|
| 409 |
+
with gr.TabItem("📮 Number of trades per market"):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 410 |
with gr.Row():
|
| 411 |
gr.Markdown(
|
| 412 |
"# Weekly nr of trades per trader per market for all traders"
|
|
|
|
| 434 |
trades_volume_plot = plot_nr_trades_per_trader_per_market(
|
| 435 |
trader_agents_data, trader_filter="non_agent"
|
| 436 |
)
|
| 437 |
+
with gr.TabItem("💰 Money invested"):
|
| 438 |
+
with gr.Row():
|
| 439 |
+
gr.Markdown("# Weekly total bet amount by market for all traders")
|
| 440 |
+
with gr.Row():
|
| 441 |
+
total_bet_amount = plot_total_bet_amount_per_trader_per_market(
|
| 442 |
+
trader_agents_data
|
| 443 |
+
)
|
| 444 |
+
|
| 445 |
+
with gr.Row():
|
| 446 |
+
gr.Markdown("# Weekly total bet amount by market for traders Agents 🤖")
|
| 447 |
+
with gr.Row():
|
| 448 |
+
a_trader_total_bet_amount = plot_total_bet_amount_per_trader_per_market(
|
| 449 |
+
trader_agents_data, trader_filter="agent"
|
| 450 |
+
)
|
| 451 |
+
|
| 452 |
+
with gr.Row():
|
| 453 |
+
gr.Markdown("# Weekly total bet amount by market for Non-agent traders")
|
| 454 |
+
with gr.Row():
|
| 455 |
+
na_trader_total_bet_amount = (
|
| 456 |
+
plot_total_bet_amount_per_trader_per_market(
|
| 457 |
+
trader_agents_data, trader_filter="non_agent"
|
| 458 |
+
)
|
| 459 |
+
)
|
| 460 |
|
| 461 |
with gr.TabItem("🎖️Weekly winning trades % per trader"):
|
| 462 |
with gr.Row():
|
tabs/market_plots.py
CHANGED
|
@@ -149,6 +149,76 @@ def plot_total_bet_amount(trades_df: pd.DataFrame) -> gr.Plot:
|
|
| 149 |
)
|
| 150 |
|
| 151 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
def plot_nr_trades_per_trader_per_market(
|
| 153 |
traders_data: pd.DataFrame, trader_filter: str = "all"
|
| 154 |
) -> gr.Plot:
|
|
|
|
| 149 |
)
|
| 150 |
|
| 151 |
|
| 152 |
+
def plot_total_bet_amount_per_trader_per_market(
|
| 153 |
+
trades_df: pd.DataFrame, trader_filter: str = "all"
|
| 154 |
+
) -> gr.Plot:
|
| 155 |
+
"""Plots the total bet amount per trader per market."""
|
| 156 |
+
traders_all = trades_df.copy(deep=True)
|
| 157 |
+
traders_all["market_creator"] = "all"
|
| 158 |
+
|
| 159 |
+
# merging both dataframes
|
| 160 |
+
final_traders = pd.concat([traders_all, trades_df], ignore_index=True)
|
| 161 |
+
final_traders = final_traders.sort_values(by="creation_date", ascending=True)
|
| 162 |
+
|
| 163 |
+
# Create binary staking category
|
| 164 |
+
final_traders["trader_type"] = final_traders["staking"].apply(
|
| 165 |
+
lambda x: "non_agent" if x == "non_agent" else "agent"
|
| 166 |
+
)
|
| 167 |
+
final_traders["trader_market"] = final_traders.apply(
|
| 168 |
+
lambda x: (x["trader_type"], x["market_creator"]), axis=1
|
| 169 |
+
)
|
| 170 |
+
color_discrete_sequence = ["purple", "goldenrod", "darkgreen"]
|
| 171 |
+
if trader_filter == "agent":
|
| 172 |
+
color_discrete_sequence = ["darkviolet", "goldenrod", "green"]
|
| 173 |
+
final_traders = final_traders.loc[final_traders["trader_type"] == "agent"]
|
| 174 |
+
elif trader_filter == "non_agent":
|
| 175 |
+
final_traders = final_traders.loc[final_traders["trader_type"] != "agent"]
|
| 176 |
+
|
| 177 |
+
total_bet_amount = (
|
| 178 |
+
final_traders.groupby(
|
| 179 |
+
["month_year_week", "market_creator", "trader_address", "title"],
|
| 180 |
+
sort=False,
|
| 181 |
+
)["collateral_amount"]
|
| 182 |
+
.sum()
|
| 183 |
+
.reset_index(name="total_bet_amount")
|
| 184 |
+
)
|
| 185 |
+
|
| 186 |
+
fig = px.box(
|
| 187 |
+
total_bet_amount,
|
| 188 |
+
x="month_year_week",
|
| 189 |
+
y="total_bet_amount",
|
| 190 |
+
color="market_creator",
|
| 191 |
+
color_discrete_sequence=color_discrete_sequence,
|
| 192 |
+
category_orders={
|
| 193 |
+
"market_creator": ["pearl", "quickstart", "all"],
|
| 194 |
+
"trader_market": [
|
| 195 |
+
("agent", "pearl"),
|
| 196 |
+
("non_agent", "pearl"),
|
| 197 |
+
("agent", "quickstart"),
|
| 198 |
+
("non_agent", "quickstart"),
|
| 199 |
+
("agent", "all"),
|
| 200 |
+
("non_agent", "all"),
|
| 201 |
+
],
|
| 202 |
+
},
|
| 203 |
+
# facet_col="trader_type",
|
| 204 |
+
)
|
| 205 |
+
|
| 206 |
+
fig.update_layout(
|
| 207 |
+
xaxis_title="Week",
|
| 208 |
+
yaxis_title="Weekly total bet amount per trader per market",
|
| 209 |
+
legend=dict(yanchor="top", y=0.5),
|
| 210 |
+
width=1000, # Adjusted for better fit on laptop screens
|
| 211 |
+
height=600, # Adjusted for better fit on laptop screens
|
| 212 |
+
)
|
| 213 |
+
# for axis in fig.layout:
|
| 214 |
+
# if axis.startswith("xaxis"):
|
| 215 |
+
# fig.layout[axis].update(title="Week")
|
| 216 |
+
fig.update_xaxes(tickformat="%b %d\n%Y")
|
| 217 |
+
return gr.Plot(
|
| 218 |
+
value=fig,
|
| 219 |
+
)
|
| 220 |
+
|
| 221 |
+
|
| 222 |
def plot_nr_trades_per_trader_per_market(
|
| 223 |
traders_data: pd.DataFrame, trader_filter: str = "all"
|
| 224 |
) -> gr.Plot:
|