cyberosa
commited on
Commit
Β·
5b74576
1
Parent(s):
18ab144
new daily data and new labels for traders
Browse files- app.py +51 -98
- scripts/metrics.py +20 -22
app.py
CHANGED
@@ -95,64 +95,58 @@ def prepare_data():
|
|
95 |
.reset_index(name="nr_trades_per_market")
|
96 |
)
|
97 |
|
98 |
-
|
99 |
all_trades, volume_trades_per_trader_and_market, on=["trader_address", "title"]
|
100 |
)
|
101 |
daily_info["creation_date"] = daily_info["creation_timestamp"].dt.date
|
102 |
# adding the trader family column
|
103 |
-
|
104 |
lambda x: get_traders_family(x), axis=1
|
105 |
)
|
106 |
-
print(
|
107 |
|
108 |
-
|
109 |
-
by="creation_timestamp", ascending=True
|
110 |
-
)
|
111 |
|
112 |
-
|
113 |
-
|
114 |
)
|
115 |
|
116 |
closed_markets["month_year_week"] = (
|
117 |
closed_markets["opening_datetime"].dt.to_period("W").dt.strftime("%b-%d")
|
118 |
)
|
119 |
-
return
|
120 |
|
121 |
|
122 |
-
|
123 |
|
124 |
demo = gr.Blocks()
|
125 |
# get weekly metrics by market creator: qs, pearl or all.
|
126 |
weekly_metrics_by_market_creator = compute_weekly_metrics_by_market_creator(
|
127 |
-
|
128 |
)
|
129 |
print(
|
130 |
weekly_metrics_by_market_creator.loc[
|
131 |
weekly_metrics_by_market_creator["market_creator"] == "all"
|
132 |
].roi_diff_perc.describe()
|
133 |
)
|
134 |
-
|
135 |
-
|
136 |
)
|
137 |
-
|
138 |
-
|
139 |
)
|
140 |
|
141 |
-
weekly_winning_metrics = compute_winning_metrics_by_trader(
|
142 |
-
|
143 |
-
|
144 |
-
weekly_agent_winning_metrics = compute_winning_metrics_by_trader(
|
145 |
-
trader_agents_data=trader_agents_data, trader_filter="agent"
|
146 |
)
|
147 |
-
|
148 |
-
|
149 |
)
|
150 |
|
151 |
with demo:
|
152 |
-
gr.HTML("<h1>
|
153 |
-
gr.Markdown(
|
154 |
-
"This app shows the weekly performance of the trader agents in Olas Predict."
|
155 |
-
)
|
156 |
|
157 |
with gr.Tabs():
|
158 |
with gr.TabItem("π₯ Weekly metrics"):
|
@@ -185,11 +179,11 @@ with demo:
|
|
185 |
inputs=trader_details_selector,
|
186 |
outputs=trader_markets_plot,
|
187 |
)
|
188 |
-
|
189 |
with gr.Row():
|
190 |
-
gr.Markdown("# Weekly metrics of
|
191 |
with gr.Row():
|
192 |
-
|
193 |
label="Select a weekly trader metric",
|
194 |
choices=trader_metric_choices,
|
195 |
value=default_trader_metric,
|
@@ -199,7 +193,7 @@ with demo:
|
|
199 |
with gr.Column(scale=3):
|
200 |
a_trader_markets_plot = plot_trader_metrics_by_market_creator(
|
201 |
metric_name=default_trader_metric,
|
202 |
-
traders_df=
|
203 |
)
|
204 |
with gr.Column(scale=1):
|
205 |
trade_details_text = get_metrics_text()
|
@@ -207,18 +201,18 @@ with demo:
|
|
207 |
def update_a_trader_details(trader_detail):
|
208 |
return plot_trader_metrics_by_market_creator(
|
209 |
metric_name=trader_detail,
|
210 |
-
traders_df=
|
211 |
)
|
212 |
|
213 |
-
|
214 |
update_a_trader_details,
|
215 |
-
inputs=
|
216 |
outputs=a_trader_markets_plot,
|
217 |
)
|
218 |
|
219 |
-
# Non-
|
220 |
with gr.Row():
|
221 |
-
gr.Markdown("# Weekly metrics of Non-
|
222 |
with gr.Row():
|
223 |
trader_na_details_selector = gr.Dropdown(
|
224 |
label="Select a weekly trader metric",
|
@@ -230,7 +224,7 @@ with demo:
|
|
230 |
with gr.Column(scale=3):
|
231 |
na_trader_markets_plot = plot_trader_metrics_by_market_creator(
|
232 |
metric_name=default_trader_metric,
|
233 |
-
traders_df=
|
234 |
)
|
235 |
with gr.Column(scale=1):
|
236 |
trade_details_text = get_metrics_text()
|
@@ -238,7 +232,7 @@ with demo:
|
|
238 |
def update_na_trader_details(trader_detail):
|
239 |
return plot_trader_metrics_by_market_creator(
|
240 |
metric_name=trader_detail,
|
241 |
-
traders_df=
|
242 |
)
|
243 |
|
244 |
trader_na_details_selector.change(
|
@@ -247,7 +241,7 @@ with demo:
|
|
247 |
outputs=na_trader_markets_plot,
|
248 |
)
|
249 |
with gr.TabItem("π
Daily metrics"):
|
250 |
-
current_week_trades = get_current_week_data(trades_df=
|
251 |
live_trades_current_week = get_current_week_data(trades_df=daily_info)
|
252 |
if len(current_week_trades) > 0:
|
253 |
daily_prof_metrics_by_market_creator = (
|
@@ -291,7 +285,7 @@ with demo:
|
|
291 |
)
|
292 |
|
293 |
with gr.Row():
|
294 |
-
gr.Markdown("# Daily live metrics for
|
295 |
with gr.Row():
|
296 |
a_trader_live_details_selector = gr.Dropdown(
|
297 |
label="Select a daily live metric",
|
@@ -304,7 +298,7 @@ with demo:
|
|
304 |
a_trader_live_details_plot = plot_daily_metrics(
|
305 |
metric_name=default_daily_metric,
|
306 |
trades_df=live_metrics_by_market_creator,
|
307 |
-
trader_filter="
|
308 |
)
|
309 |
with gr.Column(scale=1):
|
310 |
trade_details_text = get_metrics_text(daily=True)
|
@@ -313,7 +307,7 @@ with demo:
|
|
313 |
a_trader_plot = plot_daily_metrics(
|
314 |
metric_name=trade_detail,
|
315 |
trades_df=live_metrics_by_market_creator,
|
316 |
-
trader_filter="
|
317 |
)
|
318 |
return a_trader_plot
|
319 |
|
@@ -323,7 +317,7 @@ with demo:
|
|
323 |
outputs=[a_trader_live_details_plot],
|
324 |
)
|
325 |
with gr.Row():
|
326 |
-
gr.Markdown("# Daily live metrics for Non-
|
327 |
with gr.Row():
|
328 |
na_trader_live_details_selector = gr.Dropdown(
|
329 |
label="Select a daily live metric",
|
@@ -336,7 +330,7 @@ with demo:
|
|
336 |
na_trader_live_details_plot = plot_daily_metrics(
|
337 |
metric_name=default_daily_metric,
|
338 |
trades_df=live_metrics_by_market_creator,
|
339 |
-
trader_filter="
|
340 |
)
|
341 |
with gr.Column(scale=1):
|
342 |
trade_details_text = get_metrics_text(daily=True)
|
@@ -347,7 +341,7 @@ with demo:
|
|
347 |
na_trader_plot = plot_daily_metrics(
|
348 |
metric_name=trade_detail,
|
349 |
trades_df=live_metrics_by_market_creator,
|
350 |
-
trader_filter="
|
351 |
)
|
352 |
return na_trader_plot
|
353 |
|
@@ -357,42 +351,6 @@ with demo:
|
|
357 |
outputs=[na_trader_live_details_plot],
|
358 |
)
|
359 |
|
360 |
-
# with gr.Row():
|
361 |
-
# gr.Markdown("# Daily profitability metrics available for all trades")
|
362 |
-
# if len(current_week_trades) > 0:
|
363 |
-
# with gr.Row():
|
364 |
-
# trader_daily_details_selector = gr.Dropdown(
|
365 |
-
# label="Select a daily trade metric",
|
366 |
-
# choices=trader_metric_choices,
|
367 |
-
# value=default_trader_metric,
|
368 |
-
# )
|
369 |
-
|
370 |
-
# with gr.Row():
|
371 |
-
# with gr.Column(scale=3):
|
372 |
-
# trader_daily_details_plot = plot_daily_metrics(
|
373 |
-
# metric_name=default_trader_metric,
|
374 |
-
# trades_df=daily_prof_metrics_by_market_creator,
|
375 |
-
# )
|
376 |
-
# with gr.Column(scale=1):
|
377 |
-
# trader_details_text = get_metrics_text(daily=True)
|
378 |
-
|
379 |
-
# def update_trader_daily_details(
|
380 |
-
# trade_detail, trader_daily_details_plot
|
381 |
-
# ):
|
382 |
-
# new_a_plot = plot_daily_metrics(
|
383 |
-
# metric_name=trade_detail,
|
384 |
-
# trades_df=daily_prof_metrics_by_market_creator,
|
385 |
-
# )
|
386 |
-
# return new_a_plot
|
387 |
-
|
388 |
-
# trader_daily_details_selector.change(
|
389 |
-
# update_trader_daily_details,
|
390 |
-
# inputs=[trader_daily_details_selector, trader_daily_details_plot],
|
391 |
-
# outputs=[trader_daily_details_plot],
|
392 |
-
# )
|
393 |
-
# else:
|
394 |
-
# gr.Markdown("Data not available yet")
|
395 |
-
|
396 |
with gr.TabItem("π Markets KullbackβLeibler divergence"):
|
397 |
with gr.Row():
|
398 |
gr.Markdown(
|
@@ -415,7 +373,7 @@ with demo:
|
|
415 |
gr.Markdown("# Weekly total bet amount per trader type for all markets")
|
416 |
with gr.Row():
|
417 |
total_bet_amount = plot_total_bet_amount(
|
418 |
-
|
419 |
)
|
420 |
|
421 |
with gr.Row():
|
@@ -424,7 +382,7 @@ with demo:
|
|
424 |
)
|
425 |
with gr.Row():
|
426 |
a_trader_total_bet_amount = plot_total_bet_amount(
|
427 |
-
|
428 |
)
|
429 |
|
430 |
with gr.Row():
|
@@ -433,28 +391,26 @@ with demo:
|
|
433 |
)
|
434 |
with gr.Row():
|
435 |
na_trader_total_bet_amount = plot_total_bet_amount(
|
436 |
-
|
437 |
)
|
438 |
with gr.TabItem("π° Money invested per market"):
|
439 |
with gr.Row():
|
440 |
gr.Markdown("# Weekly bet amounts per market for all traders")
|
441 |
with gr.Row():
|
442 |
-
bet_amounts = plot_total_bet_amount_per_trader_per_market(
|
443 |
-
trader_agents_data
|
444 |
-
)
|
445 |
|
446 |
with gr.Row():
|
447 |
-
gr.Markdown("# Weekly bet amounts per market for
|
448 |
with gr.Row():
|
449 |
a_trader_bet_amounts = plot_total_bet_amount_per_trader_per_market(
|
450 |
-
|
451 |
)
|
452 |
|
453 |
with gr.Row():
|
454 |
-
gr.Markdown("# Weekly bet amounts per market for Non-
|
455 |
with gr.Row():
|
456 |
na_trader_bet_amounts = plot_total_bet_amount_per_trader_per_market(
|
457 |
-
|
458 |
)
|
459 |
|
460 |
with gr.TabItem("ποΈWeekly winning trades % per trader"):
|
@@ -465,24 +421,21 @@ with demo:
|
|
465 |
with gr.Row():
|
466 |
winning_metric = plot_winning_metric_per_trader(weekly_winning_metrics)
|
467 |
|
468 |
-
# Agentic traders
|
469 |
with gr.Row():
|
470 |
-
gr.Markdown("# Weekly winning trades percentage from traders
|
471 |
with gr.Row():
|
472 |
metrics_text = get_metrics_text()
|
473 |
with gr.Row():
|
474 |
-
winning_metric = plot_winning_metric_per_trader(
|
475 |
-
weekly_agent_winning_metrics
|
476 |
-
)
|
477 |
|
478 |
-
#
|
479 |
with gr.Row():
|
480 |
-
gr.Markdown("# Weekly winning trades percentage from Non-
|
481 |
with gr.Row():
|
482 |
metrics_text = get_metrics_text()
|
483 |
with gr.Row():
|
484 |
winning_metric = plot_winning_metric_per_trader(
|
485 |
-
|
486 |
)
|
487 |
|
488 |
demo.queue(default_concurrency_limit=40).launch()
|
|
|
95 |
.reset_index(name="nr_trades_per_market")
|
96 |
)
|
97 |
|
98 |
+
traders_data = pd.merge(
|
99 |
all_trades, volume_trades_per_trader_and_market, on=["trader_address", "title"]
|
100 |
)
|
101 |
daily_info["creation_date"] = daily_info["creation_timestamp"].dt.date
|
102 |
# adding the trader family column
|
103 |
+
traders_data["trader_family"] = traders_data.apply(
|
104 |
lambda x: get_traders_family(x), axis=1
|
105 |
)
|
106 |
+
print(traders_data.head())
|
107 |
|
108 |
+
traders_data = traders_data.sort_values(by="creation_timestamp", ascending=True)
|
|
|
|
|
109 |
|
110 |
+
traders_data["month_year_week"] = (
|
111 |
+
traders_data["creation_timestamp"].dt.to_period("W").dt.strftime("%b-%d")
|
112 |
)
|
113 |
|
114 |
closed_markets["month_year_week"] = (
|
115 |
closed_markets["opening_datetime"].dt.to_period("W").dt.strftime("%b-%d")
|
116 |
)
|
117 |
+
return traders_data, closed_markets, daily_info
|
118 |
|
119 |
|
120 |
+
traders_data, closed_markets, daily_info = prepare_data()
|
121 |
|
122 |
demo = gr.Blocks()
|
123 |
# get weekly metrics by market creator: qs, pearl or all.
|
124 |
weekly_metrics_by_market_creator = compute_weekly_metrics_by_market_creator(
|
125 |
+
traders_data
|
126 |
)
|
127 |
print(
|
128 |
weekly_metrics_by_market_creator.loc[
|
129 |
weekly_metrics_by_market_creator["market_creator"] == "all"
|
130 |
].roi_diff_perc.describe()
|
131 |
)
|
132 |
+
weekly_metrics_by_market_creator = compute_weekly_metrics_by_market_creator(
|
133 |
+
traders_data, trader_filter="non_Olas"
|
134 |
)
|
135 |
+
weekly_non_olas_metrics_by_market_creator = compute_weekly_metrics_by_market_creator(
|
136 |
+
traders_data, trader_filter="non_Olas"
|
137 |
)
|
138 |
|
139 |
+
weekly_winning_metrics = compute_winning_metrics_by_trader(traders_data=traders_data)
|
140 |
+
weekly_non_olas_winning_metrics = compute_winning_metrics_by_trader(
|
141 |
+
traders_data=traders_data, trader_filter="non_Olas"
|
|
|
|
|
142 |
)
|
143 |
+
weekly_non_Olas_winning_metrics = compute_winning_metrics_by_trader(
|
144 |
+
traders_data=traders_data, trader_filter="non_Olas"
|
145 |
)
|
146 |
|
147 |
with demo:
|
148 |
+
gr.HTML("<h1>Traders monitoring dashboard </h1>")
|
149 |
+
gr.Markdown("This app shows the weekly performance of the traders in Olas Predict.")
|
|
|
|
|
150 |
|
151 |
with gr.Tabs():
|
152 |
with gr.TabItem("π₯ Weekly metrics"):
|
|
|
179 |
inputs=trader_details_selector,
|
180 |
outputs=trader_markets_plot,
|
181 |
)
|
182 |
+
|
183 |
with gr.Row():
|
184 |
+
gr.Markdown("# Weekly metrics of π Olas traders")
|
185 |
with gr.Row():
|
186 |
+
trader_o_details_selector = gr.Dropdown(
|
187 |
label="Select a weekly trader metric",
|
188 |
choices=trader_metric_choices,
|
189 |
value=default_trader_metric,
|
|
|
193 |
with gr.Column(scale=3):
|
194 |
a_trader_markets_plot = plot_trader_metrics_by_market_creator(
|
195 |
metric_name=default_trader_metric,
|
196 |
+
traders_df=weekly_metrics_by_market_creator,
|
197 |
)
|
198 |
with gr.Column(scale=1):
|
199 |
trade_details_text = get_metrics_text()
|
|
|
201 |
def update_a_trader_details(trader_detail):
|
202 |
return plot_trader_metrics_by_market_creator(
|
203 |
metric_name=trader_detail,
|
204 |
+
traders_df=weekly_metrics_by_market_creator,
|
205 |
)
|
206 |
|
207 |
+
trader_o_details_selector.change(
|
208 |
update_a_trader_details,
|
209 |
+
inputs=trader_o_details_selector,
|
210 |
outputs=a_trader_markets_plot,
|
211 |
)
|
212 |
|
213 |
+
# Non-Olas traders graph
|
214 |
with gr.Row():
|
215 |
+
gr.Markdown("# Weekly metrics of Non-Olas traders")
|
216 |
with gr.Row():
|
217 |
trader_na_details_selector = gr.Dropdown(
|
218 |
label="Select a weekly trader metric",
|
|
|
224 |
with gr.Column(scale=3):
|
225 |
na_trader_markets_plot = plot_trader_metrics_by_market_creator(
|
226 |
metric_name=default_trader_metric,
|
227 |
+
traders_df=weekly_non_olas_metrics_by_market_creator,
|
228 |
)
|
229 |
with gr.Column(scale=1):
|
230 |
trade_details_text = get_metrics_text()
|
|
|
232 |
def update_na_trader_details(trader_detail):
|
233 |
return plot_trader_metrics_by_market_creator(
|
234 |
metric_name=trader_detail,
|
235 |
+
traders_df=weekly_non_olas_metrics_by_market_creator,
|
236 |
)
|
237 |
|
238 |
trader_na_details_selector.change(
|
|
|
241 |
outputs=na_trader_markets_plot,
|
242 |
)
|
243 |
with gr.TabItem("π
Daily metrics"):
|
244 |
+
current_week_trades = get_current_week_data(trades_df=traders_data)
|
245 |
live_trades_current_week = get_current_week_data(trades_df=daily_info)
|
246 |
if len(current_week_trades) > 0:
|
247 |
daily_prof_metrics_by_market_creator = (
|
|
|
285 |
)
|
286 |
|
287 |
with gr.Row():
|
288 |
+
gr.Markdown("# Daily live metrics for π Olas traders")
|
289 |
with gr.Row():
|
290 |
a_trader_live_details_selector = gr.Dropdown(
|
291 |
label="Select a daily live metric",
|
|
|
298 |
a_trader_live_details_plot = plot_daily_metrics(
|
299 |
metric_name=default_daily_metric,
|
300 |
trades_df=live_metrics_by_market_creator,
|
301 |
+
trader_filter="Olas",
|
302 |
)
|
303 |
with gr.Column(scale=1):
|
304 |
trade_details_text = get_metrics_text(daily=True)
|
|
|
307 |
a_trader_plot = plot_daily_metrics(
|
308 |
metric_name=trade_detail,
|
309 |
trades_df=live_metrics_by_market_creator,
|
310 |
+
trader_filter="Olas",
|
311 |
)
|
312 |
return a_trader_plot
|
313 |
|
|
|
317 |
outputs=[a_trader_live_details_plot],
|
318 |
)
|
319 |
with gr.Row():
|
320 |
+
gr.Markdown("# Daily live metrics for Non-Olas traders")
|
321 |
with gr.Row():
|
322 |
na_trader_live_details_selector = gr.Dropdown(
|
323 |
label="Select a daily live metric",
|
|
|
330 |
na_trader_live_details_plot = plot_daily_metrics(
|
331 |
metric_name=default_daily_metric,
|
332 |
trades_df=live_metrics_by_market_creator,
|
333 |
+
trader_filter="non_Olas",
|
334 |
)
|
335 |
with gr.Column(scale=1):
|
336 |
trade_details_text = get_metrics_text(daily=True)
|
|
|
341 |
na_trader_plot = plot_daily_metrics(
|
342 |
metric_name=trade_detail,
|
343 |
trades_df=live_metrics_by_market_creator,
|
344 |
+
trader_filter="non_Olas",
|
345 |
)
|
346 |
return na_trader_plot
|
347 |
|
|
|
351 |
outputs=[na_trader_live_details_plot],
|
352 |
)
|
353 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
354 |
with gr.TabItem("π Markets KullbackβLeibler divergence"):
|
355 |
with gr.Row():
|
356 |
gr.Markdown(
|
|
|
373 |
gr.Markdown("# Weekly total bet amount per trader type for all markets")
|
374 |
with gr.Row():
|
375 |
total_bet_amount = plot_total_bet_amount(
|
376 |
+
traders_data, market_filter="all"
|
377 |
)
|
378 |
|
379 |
with gr.Row():
|
|
|
382 |
)
|
383 |
with gr.Row():
|
384 |
a_trader_total_bet_amount = plot_total_bet_amount(
|
385 |
+
traders_data, market_filter="pearl"
|
386 |
)
|
387 |
|
388 |
with gr.Row():
|
|
|
391 |
)
|
392 |
with gr.Row():
|
393 |
na_trader_total_bet_amount = plot_total_bet_amount(
|
394 |
+
traders_data, market_filter="quickstart"
|
395 |
)
|
396 |
with gr.TabItem("π° Money invested per market"):
|
397 |
with gr.Row():
|
398 |
gr.Markdown("# Weekly bet amounts per market for all traders")
|
399 |
with gr.Row():
|
400 |
+
bet_amounts = plot_total_bet_amount_per_trader_per_market(traders_data)
|
|
|
|
|
401 |
|
402 |
with gr.Row():
|
403 |
+
gr.Markdown("# Weekly bet amounts per market for π Olas traders")
|
404 |
with gr.Row():
|
405 |
a_trader_bet_amounts = plot_total_bet_amount_per_trader_per_market(
|
406 |
+
traders_data, trader_filter="Olas"
|
407 |
)
|
408 |
|
409 |
with gr.Row():
|
410 |
+
gr.Markdown("# Weekly bet amounts per market for Non-Olas traders")
|
411 |
with gr.Row():
|
412 |
na_trader_bet_amounts = plot_total_bet_amount_per_trader_per_market(
|
413 |
+
traders_data, trader_filter="non_Olas"
|
414 |
)
|
415 |
|
416 |
with gr.TabItem("ποΈWeekly winning trades % per trader"):
|
|
|
421 |
with gr.Row():
|
422 |
winning_metric = plot_winning_metric_per_trader(weekly_winning_metrics)
|
423 |
|
|
|
424 |
with gr.Row():
|
425 |
+
gr.Markdown("# Weekly winning trades percentage from π Olas traders")
|
426 |
with gr.Row():
|
427 |
metrics_text = get_metrics_text()
|
428 |
with gr.Row():
|
429 |
+
winning_metric = plot_winning_metric_per_trader(weekly_winning_metrics)
|
|
|
|
|
430 |
|
431 |
+
# non_Olasic traders
|
432 |
with gr.Row():
|
433 |
+
gr.Markdown("# Weekly winning trades percentage from Non-Olas traders")
|
434 |
with gr.Row():
|
435 |
metrics_text = get_metrics_text()
|
436 |
with gr.Row():
|
437 |
winning_metric = plot_winning_metric_per_trader(
|
438 |
+
weekly_non_Olas_winning_metrics
|
439 |
)
|
440 |
|
441 |
demo.queue(default_concurrency_limit=40).launch()
|
scripts/metrics.py
CHANGED
@@ -168,29 +168,27 @@ def win_metrics_trader_level(weekly_data):
|
|
168 |
|
169 |
|
170 |
def compute_weekly_metrics_by_market_creator(
|
171 |
-
|
172 |
) -> pd.DataFrame:
|
173 |
"""Function to compute the metrics at the trader level per week
|
174 |
and with different categories by market creator"""
|
175 |
contents = []
|
176 |
-
all_weeks = list(
|
177 |
for week in all_weeks:
|
178 |
-
weekly_data =
|
179 |
-
trader_agents_data["month_year_week"] == week
|
180 |
-
]
|
181 |
print(f"Computing weekly metrics for week ={week} by market creator")
|
182 |
-
# traverse each trader
|
183 |
traders = list(weekly_data.trader_address.unique())
|
184 |
for trader in tqdm(traders, desc=f"Trader' metrics", unit="metrics"):
|
185 |
if trader_filter is None:
|
186 |
contents.append(merge_trader_weekly_metrics(trader, weekly_data, week))
|
187 |
elif trader_filter == "agent":
|
188 |
-
filtered_data = weekly_data.loc[weekly_data["staking"] != "
|
189 |
contents.append(
|
190 |
merge_trader_weekly_metrics(trader, filtered_data, week)
|
191 |
)
|
192 |
-
else: #
|
193 |
-
filtered_data = weekly_data.loc[weekly_data["staking"] == "
|
194 |
contents.append(
|
195 |
merge_trader_weekly_metrics(trader, filtered_data, week)
|
196 |
)
|
@@ -200,7 +198,7 @@ def compute_weekly_metrics_by_market_creator(
|
|
200 |
|
201 |
|
202 |
def compute_daily_metrics_by_market_creator(
|
203 |
-
|
204 |
trader_filter: str = None,
|
205 |
live_metrics: bool = False,
|
206 |
) -> pd.DataFrame:
|
@@ -208,11 +206,11 @@ def compute_daily_metrics_by_market_creator(
|
|
208 |
and with different categories by market creator"""
|
209 |
contents = []
|
210 |
|
211 |
-
all_days = list(
|
212 |
for day in all_days:
|
213 |
-
daily_data =
|
214 |
print(f"Computing daily metrics for {day}")
|
215 |
-
# traverse each trader
|
216 |
traders = list(daily_data.trader_address.unique())
|
217 |
for trader in tqdm(traders, desc=f"Trader' daily metrics", unit="metrics"):
|
218 |
if trader_filter is None:
|
@@ -220,12 +218,12 @@ def compute_daily_metrics_by_market_creator(
|
|
220 |
merge_trader_daily_metrics(trader, daily_data, day, live_metrics)
|
221 |
)
|
222 |
elif trader_filter == "agentic":
|
223 |
-
filtered_data = daily_data.loc[daily_data["staking"] != "
|
224 |
contents.append(
|
225 |
merge_trader_daily_metrics(trader, filtered_data, day, live_metrics)
|
226 |
)
|
227 |
-
else: #
|
228 |
-
filtered_data = daily_data.loc[daily_data["staking"] == "
|
229 |
contents.append(
|
230 |
merge_trader_daily_metrics(trader, filtered_data, day, live_metrics)
|
231 |
)
|
@@ -235,20 +233,20 @@ def compute_daily_metrics_by_market_creator(
|
|
235 |
|
236 |
|
237 |
def compute_winning_metrics_by_trader(
|
238 |
-
|
239 |
) -> pd.DataFrame:
|
240 |
"""Function to compute the winning metrics at the trader level per week and with different market creators"""
|
241 |
-
market_all =
|
242 |
market_all["market_creator"] = "all"
|
243 |
|
244 |
# merging both dataframes
|
245 |
-
final_traders = pd.concat([market_all,
|
246 |
final_traders = final_traders.sort_values(by="creation_timestamp", ascending=True)
|
247 |
|
248 |
if trader_filter == "agentic":
|
249 |
-
final_traders = final_traders.loc[final_traders["staking"] != "
|
250 |
-
else: #
|
251 |
-
final_traders = final_traders.loc[final_traders["staking"] == "
|
252 |
|
253 |
winning_df = win_metrics_trader_level(final_traders)
|
254 |
winning_df.head()
|
|
|
168 |
|
169 |
|
170 |
def compute_weekly_metrics_by_market_creator(
|
171 |
+
traders_data: pd.DataFrame, trader_filter: str = None
|
172 |
) -> pd.DataFrame:
|
173 |
"""Function to compute the metrics at the trader level per week
|
174 |
and with different categories by market creator"""
|
175 |
contents = []
|
176 |
+
all_weeks = list(traders_data.month_year_week.unique())
|
177 |
for week in all_weeks:
|
178 |
+
weekly_data = traders_data.loc[traders_data["month_year_week"] == week]
|
|
|
|
|
179 |
print(f"Computing weekly metrics for week ={week} by market creator")
|
180 |
+
# traverse each trader
|
181 |
traders = list(weekly_data.trader_address.unique())
|
182 |
for trader in tqdm(traders, desc=f"Trader' metrics", unit="metrics"):
|
183 |
if trader_filter is None:
|
184 |
contents.append(merge_trader_weekly_metrics(trader, weekly_data, week))
|
185 |
elif trader_filter == "agent":
|
186 |
+
filtered_data = weekly_data.loc[weekly_data["staking"] != "non_Olas"]
|
187 |
contents.append(
|
188 |
merge_trader_weekly_metrics(trader, filtered_data, week)
|
189 |
)
|
190 |
+
else: # non_Olas traders
|
191 |
+
filtered_data = weekly_data.loc[weekly_data["staking"] == "non_Olas"]
|
192 |
contents.append(
|
193 |
merge_trader_weekly_metrics(trader, filtered_data, week)
|
194 |
)
|
|
|
198 |
|
199 |
|
200 |
def compute_daily_metrics_by_market_creator(
|
201 |
+
traders_data: pd.DataFrame,
|
202 |
trader_filter: str = None,
|
203 |
live_metrics: bool = False,
|
204 |
) -> pd.DataFrame:
|
|
|
206 |
and with different categories by market creator"""
|
207 |
contents = []
|
208 |
|
209 |
+
all_days = list(traders_data.creation_date.unique())
|
210 |
for day in all_days:
|
211 |
+
daily_data = traders_data.loc[traders_data["creation_date"] == day]
|
212 |
print(f"Computing daily metrics for {day}")
|
213 |
+
# traverse each trader
|
214 |
traders = list(daily_data.trader_address.unique())
|
215 |
for trader in tqdm(traders, desc=f"Trader' daily metrics", unit="metrics"):
|
216 |
if trader_filter is None:
|
|
|
218 |
merge_trader_daily_metrics(trader, daily_data, day, live_metrics)
|
219 |
)
|
220 |
elif trader_filter == "agentic":
|
221 |
+
filtered_data = daily_data.loc[daily_data["staking"] != "non_Olas"]
|
222 |
contents.append(
|
223 |
merge_trader_daily_metrics(trader, filtered_data, day, live_metrics)
|
224 |
)
|
225 |
+
else: # non_Olas traders
|
226 |
+
filtered_data = daily_data.loc[daily_data["staking"] == "non_Olas"]
|
227 |
contents.append(
|
228 |
merge_trader_daily_metrics(trader, filtered_data, day, live_metrics)
|
229 |
)
|
|
|
233 |
|
234 |
|
235 |
def compute_winning_metrics_by_trader(
|
236 |
+
traders_data: pd.DataFrame, trader_filter: str = None
|
237 |
) -> pd.DataFrame:
|
238 |
"""Function to compute the winning metrics at the trader level per week and with different market creators"""
|
239 |
+
market_all = traders_data.copy(deep=True)
|
240 |
market_all["market_creator"] = "all"
|
241 |
|
242 |
# merging both dataframes
|
243 |
+
final_traders = pd.concat([market_all, traders_data], ignore_index=True)
|
244 |
final_traders = final_traders.sort_values(by="creation_timestamp", ascending=True)
|
245 |
|
246 |
if trader_filter == "agentic":
|
247 |
+
final_traders = final_traders.loc[final_traders["staking"] != "non_Olas"]
|
248 |
+
else: # non_Olas traders
|
249 |
+
final_traders = final_traders.loc[final_traders["staking"] == "non_Olas"]
|
250 |
|
251 |
winning_df = win_metrics_trader_level(final_traders)
|
252 |
winning_df.head()
|