cyberosa commited on
Commit
5b74576
Β·
1 Parent(s): 18ab144

new daily data and new labels for traders

Browse files
Files changed (2) hide show
  1. app.py +51 -98
  2. 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
- trader_agents_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
- trader_agents_data["trader_family"] = trader_agents_data.apply(
104
  lambda x: get_traders_family(x), axis=1
105
  )
106
- print(trader_agents_data.head())
107
 
108
- trader_agents_data = trader_agents_data.sort_values(
109
- by="creation_timestamp", ascending=True
110
- )
111
 
112
- trader_agents_data["month_year_week"] = (
113
- trader_agents_data["creation_timestamp"].dt.to_period("W").dt.strftime("%b-%d")
114
  )
115
 
116
  closed_markets["month_year_week"] = (
117
  closed_markets["opening_datetime"].dt.to_period("W").dt.strftime("%b-%d")
118
  )
119
- return trader_agents_data, closed_markets, daily_info
120
 
121
 
122
- trader_agents_data, closed_markets, daily_info = prepare_data()
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
- trader_agents_data
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
- weekly_agent_metrics_by_market_creator = compute_weekly_metrics_by_market_creator(
135
- trader_agents_data, trader_filter="agent"
136
  )
137
- weekly_non_agent_metrics_by_market_creator = compute_weekly_metrics_by_market_creator(
138
- trader_agents_data, trader_filter="non_agent"
139
  )
140
 
141
- weekly_winning_metrics = compute_winning_metrics_by_trader(
142
- trader_agents_data=trader_agents_data
143
- )
144
- weekly_agent_winning_metrics = compute_winning_metrics_by_trader(
145
- trader_agents_data=trader_agents_data, trader_filter="agent"
146
  )
147
- weekly_non_agent_winning_metrics = compute_winning_metrics_by_trader(
148
- trader_agents_data=trader_agents_data, trader_filter="non_agent"
149
  )
150
 
151
  with demo:
152
- gr.HTML("<h1>Trader agents monitoring dashboard </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
- # Agentic traders graph
189
  with gr.Row():
190
- gr.Markdown("# Weekly metrics of trader Agents πŸ€–")
191
  with gr.Row():
192
- trader_a_details_selector = gr.Dropdown(
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=weekly_agent_metrics_by_market_creator,
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=weekly_agent_metrics_by_market_creator,
211
  )
212
 
213
- trader_a_details_selector.change(
214
  update_a_trader_details,
215
- inputs=trader_a_details_selector,
216
  outputs=a_trader_markets_plot,
217
  )
218
 
219
- # Non-agentic traders graph
220
  with gr.Row():
221
- gr.Markdown("# Weekly metrics of Non-agent traders")
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=weekly_non_agent_metrics_by_market_creator,
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=weekly_non_agent_metrics_by_market_creator,
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=trader_agents_data)
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 trader Agents πŸ€–")
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="agent",
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="agent",
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-agent traders")
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="non_agent",
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="non_agent",
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
- trader_agents_data, market_filter="all"
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
- trader_agents_data, market_filter="pearl"
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
- trader_agents_data, market_filter="quickstart"
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 traders Agents πŸ€–")
448
  with gr.Row():
449
  a_trader_bet_amounts = plot_total_bet_amount_per_trader_per_market(
450
- trader_agents_data, trader_filter="agent"
451
  )
452
 
453
  with gr.Row():
454
- gr.Markdown("# Weekly bet amounts per market for Non-agent traders")
455
  with gr.Row():
456
  na_trader_bet_amounts = plot_total_bet_amount_per_trader_per_market(
457
- trader_agents_data, trader_filter="non_agent"
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 Agents")
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
- # Non_agentic traders
479
  with gr.Row():
480
- gr.Markdown("# Weekly winning trades percentage from Non-agent traders")
481
  with gr.Row():
482
  metrics_text = get_metrics_text()
483
  with gr.Row():
484
  winning_metric = plot_winning_metric_per_trader(
485
- weekly_non_agent_winning_metrics
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
- trader_agents_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(trader_agents_data.month_year_week.unique())
177
  for week in all_weeks:
178
- weekly_data = trader_agents_data.loc[
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 agent
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"] != "non_agent"]
189
  contents.append(
190
  merge_trader_weekly_metrics(trader, filtered_data, week)
191
  )
192
- else: # non_agent traders
193
- filtered_data = weekly_data.loc[weekly_data["staking"] == "non_agent"]
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
- trader_agents_data: pd.DataFrame,
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(trader_agents_data.creation_date.unique())
212
  for day in all_days:
213
- daily_data = trader_agents_data.loc[trader_agents_data["creation_date"] == day]
214
  print(f"Computing daily metrics for {day}")
215
- # traverse each trader agent
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"] != "non_agent"]
224
  contents.append(
225
  merge_trader_daily_metrics(trader, filtered_data, day, live_metrics)
226
  )
227
- else: # non_agent traders
228
- filtered_data = daily_data.loc[daily_data["staking"] == "non_agent"]
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
- trader_agents_data: pd.DataFrame, trader_filter: str = None
239
  ) -> pd.DataFrame:
240
  """Function to compute the winning metrics at the trader level per week and with different market creators"""
241
- market_all = trader_agents_data.copy(deep=True)
242
  market_all["market_creator"] = "all"
243
 
244
  # merging both dataframes
245
- final_traders = pd.concat([market_all, trader_agents_data], ignore_index=True)
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"] != "non_agent"]
250
- else: # non_agent traders
251
- final_traders = final_traders.loc[final_traders["staking"] == "non_agent"]
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()