cyberosa commited on
Commit
d41146f
·
1 Parent(s): d31c241

Adding graph for trader type

Browse files
Files changed (3) hide show
  1. app.py +34 -35
  2. scripts/metrics.py +36 -26
  3. tabs/trader_plots.py +43 -2
app.py CHANGED
@@ -95,9 +95,9 @@ weekly_metrics_by_market_creator = compute_weekly_metrics_by_market_creator(
95
  print("weekly metrics by market creator")
96
  print(weekly_metrics_by_market_creator.head())
97
  # get weekly metrics by trader type: multibet, singlebet or all.
98
- # weekly_metrics_by_market_strategy = compute_weekly_metrics_by_trader_type(
99
- # trader_agents_data
100
- # )
101
  with demo:
102
  gr.HTML("<h1>Trader agents monitoring dashboard </h1>")
103
  gr.Markdown(
@@ -106,7 +106,6 @@ with demo:
106
 
107
  with gr.Tabs():
108
  with gr.TabItem("🔥Trader Agents Dashboard"):
109
- # TODO Implement metrics showing market creator
110
  with gr.Row():
111
  gr.Markdown("# Weekly metrics of trader agents by market creator")
112
  with gr.Row():
@@ -137,36 +136,36 @@ with demo:
137
  outputs=trader_markets_plot,
138
  )
139
 
140
- # with gr.Row():
141
- # gr.Markdown(
142
- # "# Weekly metrics for trader agents by trader type (multibet or singlebet)"
143
- # )
144
- # with gr.Row():
145
- # trade_details_selector = gr.Dropdown(
146
- # label="Select a trader metric",
147
- # choices=trader_metric_choices,
148
- # value=default_trader_metric,
149
- # )
150
-
151
- # with gr.Row():
152
- # with gr.Column(scale=3):
153
- # trader_type_plot = plot_trader_metrics_by_trader_type(
154
- # metric_name=default_trader_metric,
155
- # trades_df=trades_df,
156
- # )
157
- # with gr.Column(scale=1):
158
- # trade_details_text = get_trader_metrics_text()
159
-
160
- # def update_trader_details(trader_detail):
161
- # return plot_trader_metrics_by_trader_type(
162
- # metric_name=trader_detail,
163
- # trades_df=trades_df,
164
- # )
165
-
166
- # trader_details_selector.change(
167
- # update_trader_details,
168
- # inputs=trade_details_selector,
169
- # outputs=trader_details_plot,
170
- # )
171
 
172
  demo.queue(default_concurrency_limit=40).launch()
 
95
  print("weekly metrics by market creator")
96
  print(weekly_metrics_by_market_creator.head())
97
  # get weekly metrics by trader type: multibet, singlebet or all.
98
+ weekly_metrics_by_trader_type = compute_weekly_metrics_by_trader_type(
99
+ trader_agents_data
100
+ )
101
  with demo:
102
  gr.HTML("<h1>Trader agents monitoring dashboard </h1>")
103
  gr.Markdown(
 
106
 
107
  with gr.Tabs():
108
  with gr.TabItem("🔥Trader Agents Dashboard"):
 
109
  with gr.Row():
110
  gr.Markdown("# Weekly metrics of trader agents by market creator")
111
  with gr.Row():
 
136
  outputs=trader_markets_plot,
137
  )
138
 
139
+ with gr.Row():
140
+ gr.Markdown(
141
+ "# Weekly metrics for trader agents by trader type (multibet or singlebet)"
142
+ )
143
+ with gr.Row():
144
+ trader_metric_selector = gr.Dropdown(
145
+ label="Select a trader metric",
146
+ choices=trader_metric_choices,
147
+ value=default_trader_metric,
148
+ )
149
+
150
+ with gr.Row():
151
+ with gr.Column(scale=3):
152
+ trader_type_plot = plot_trader_metrics_by_trader_type(
153
+ metric_name=default_trader_metric,
154
+ traders_df=weekly_metrics_by_trader_type,
155
+ )
156
+ with gr.Column(scale=1):
157
+ trader_metrics_text = get_trader_metrics_text()
158
+
159
+ def update_trader_metric(trader_metric):
160
+ return plot_trader_metrics_by_trader_type(
161
+ metric_name=trader_metric,
162
+ traders_df=weekly_metrics_by_trader_type,
163
+ )
164
+
165
+ trader_metric_selector.change(
166
+ update_trader_metric,
167
+ inputs=trader_metric_selector,
168
+ outputs=trader_type_plot,
169
+ )
170
 
171
  demo.queue(default_concurrency_limit=40).launch()
scripts/metrics.py CHANGED
@@ -105,7 +105,41 @@ def merge_trader_metrics(
105
  weekly_metrics_pearl["market_creator"] = "pearl"
106
  trader_metrics.append(weekly_metrics_pearl)
107
  result = pd.DataFrame.from_dict(trader_metrics, orient="columns")
108
- tqdm.write(f"Total length of all trader metrics for this week = {len(result)}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  return result
110
 
111
 
@@ -142,30 +176,6 @@ def compute_weekly_metrics_by_trader_type(
142
  # traverse each trader agent
143
  traders = list(weekly_data.trader_address.unique())
144
  for trader in tqdm(traders, desc=f"Trader' metrics", unit="metrics"):
145
- # computation as specification 1 for all types of traders
146
- weekly_metrics = compute_trader_metrics_by_trader_type(
147
- trader, weekly_data, trader_type="all"
148
- )
149
- weekly_metrics["month_year_week"] = week
150
- weekly_metrics["trader_type"] = "all"
151
- contents.append(weekly_metrics)
152
-
153
- # computation as specification 1 for multibet traders
154
- weekly_metrics = compute_trader_metrics_by_trader_type(
155
- trader, weekly_data, trader_type="multibet"
156
- )
157
- if len(weekly_metrics) > 0:
158
- weekly_metrics["month_year_week"] = week
159
- weekly_metrics["trader_type"] = "multibet"
160
- contents.append(weekly_metrics)
161
-
162
- # computation as specification 1 for singlebet traders
163
- weekly_metrics = compute_trader_metrics_by_trader_type(
164
- trader, weekly_data, trader_type="singlebet"
165
- )
166
- if len(weekly_metrics) > 0:
167
- weekly_metrics["month_year_week"] = week
168
- weekly_metrics["trader_type"] = "singlebet"
169
- contents.append(weekly_metrics)
170
  print("End computing all weekly metrics by trader types")
171
  return pd.concat(contents, ignore_index=True)
 
105
  weekly_metrics_pearl["market_creator"] = "pearl"
106
  trader_metrics.append(weekly_metrics_pearl)
107
  result = pd.DataFrame.from_dict(trader_metrics, orient="columns")
108
+ # tqdm.write(f"Total length of all trader metrics for this week = {len(result)}")
109
+ return result
110
+
111
+
112
+ def merge_trader_metrics_by_type(
113
+ trader: str, weekly_data: pd.DataFrame, week: str
114
+ ) -> pd.DataFrame:
115
+ trader_metrics = []
116
+ # computation as specification 1 for all types of traders
117
+ weekly_metrics_all = compute_trader_metrics_by_trader_type(
118
+ trader, weekly_data, trader_type="all"
119
+ )
120
+ weekly_metrics_all["month_year_week"] = week
121
+ weekly_metrics_all["trader_type"] = "all"
122
+ trader_metrics.append(weekly_metrics_all)
123
+
124
+ # computation as specification 1 for multibet traders
125
+ weekly_metrics_mb = compute_trader_metrics_by_trader_type(
126
+ trader, weekly_data, trader_type="multibet"
127
+ )
128
+ if len(weekly_metrics_mb) > 0:
129
+ weekly_metrics_mb["month_year_week"] = week
130
+ weekly_metrics_mb["trader_type"] = "multibet"
131
+ trader_metrics.append(weekly_metrics_mb)
132
+
133
+ # computation as specification 1 for singlebet traders
134
+ weekly_metrics_sb = compute_trader_metrics_by_trader_type(
135
+ trader, weekly_data, trader_type="singlebet"
136
+ )
137
+ if len(weekly_metrics_sb) > 0:
138
+ weekly_metrics_sb["month_year_week"] = week
139
+ weekly_metrics_sb["trader_type"] = "singlebet"
140
+ trader_metrics.append(weekly_metrics_sb)
141
+ result = pd.DataFrame.from_dict(trader_metrics, orient="columns")
142
+ # tqdm.write(f"Total length of all trader metrics for this week = {len(result)}")
143
  return result
144
 
145
 
 
176
  # traverse each trader agent
177
  traders = list(weekly_data.trader_address.unique())
178
  for trader in tqdm(traders, desc=f"Trader' metrics", unit="metrics"):
179
+ contents.append(merge_trader_metrics_by_type(trader, weekly_data, week))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  print("End computing all weekly metrics by trader types")
181
  return pd.concat(contents, ignore_index=True)
tabs/trader_plots.py CHANGED
@@ -71,5 +71,46 @@ def plot_trader_metrics_by_market_creator(
71
  )
72
 
73
 
74
- def plot_trader_metrics_by_trader_type():
75
- print("WIP")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  )
72
 
73
 
74
+ def plot_trader_metrics_by_trader_type(metric_name: str, traders_df: pd.DataFrame):
75
+ """Plots the weekly trader metrics."""
76
+
77
+ if metric_name == "mech calls":
78
+ metric_name = "mech_calls"
79
+ column_name = "nr_mech_calls"
80
+ yaxis_title = "Total nr of mech calls per trader"
81
+ elif metric_name == "ROI":
82
+ column_name = "roi"
83
+ yaxis_title = "Total ROI (net profit/cost)"
84
+ elif metric_name == "bet amount":
85
+ metric_name = "bet_amount"
86
+ column_name = metric_name
87
+ yaxis_title = "Total bet amount per trader (xDAI)"
88
+ elif metric_name == "net earnings":
89
+ metric_name = "net_earnings"
90
+ column_name = metric_name
91
+ yaxis_title = "Total net profit per trader (xDAI)"
92
+ else: # earnings
93
+ column_name = metric_name
94
+ yaxis_title = "Total gross profit per trader (xDAI)"
95
+
96
+ traders_filtered = traders_df[["month_year_week", "trader_type", column_name]]
97
+
98
+ fig = px.box(
99
+ traders_filtered,
100
+ x="month_year_week",
101
+ y=column_name,
102
+ color="trader_type",
103
+ color_discrete_sequence=["gray", "orange", "darkblue"],
104
+ category_orders={"trader_type": ["singlebet", "multibet", "all"]},
105
+ )
106
+ fig.update_traces(boxmean=True)
107
+ fig.update_layout(
108
+ xaxis_title="Week",
109
+ yaxis_title=yaxis_title,
110
+ legend=dict(yanchor="top", y=0.5),
111
+ )
112
+ fig.update_xaxes(tickformat="%b %d\n%Y")
113
+
114
+ return gr.Plot(
115
+ value=fig,
116
+ )