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:
|