cyberosa commited on
Commit
309bf92
·
1 Parent(s): e6a431c

adding new column and new dist gap graph

Browse files
app.py CHANGED
@@ -11,6 +11,7 @@ from tabs.dist_gap import (
11
  get_distribution_plot,
12
  get_correlation_map,
13
  get_kde_with_trades,
 
14
  get_dist_gap_time_evolution,
15
  )
16
 
@@ -123,18 +124,14 @@ with demo:
123
  kde_plot = get_distribution_plot(markets_data)
124
 
125
  with gr.Row():
126
- gr.Markdown("# Relationship with number of trades")
127
-
128
- with gr.Row():
129
- kde_trades_plot = get_kde_with_trades(markets_data)
130
-
131
- # with gr.Row():
132
- # gr.Markdown(
133
- # "# Relationship with mean trade size of the market (bet amount in USD)"
134
- # )
135
-
136
- # with gr.Row():
137
- # reg_plot = get_regplot_with_mean_trade_size(markets_data)
138
 
139
  with gr.Row():
140
  gr.Markdown(
 
11
  get_distribution_plot,
12
  get_correlation_map,
13
  get_kde_with_trades,
14
+ get_kde_with_total_bet_amount,
15
  get_dist_gap_time_evolution,
16
  )
17
 
 
124
  kde_plot = get_distribution_plot(markets_data)
125
 
126
  with gr.Row():
127
+ with gr.Column(min_width=350):
128
+ gr.Markdown("# Relationship with number of trades")
129
+ kde_trades_plot = get_kde_with_trades(markets_data)
130
+ with gr.Column(min_width=350):
131
+ gr.Markdown("# Relationship with total bet amount")
132
+ kde_total_bet_amount_plot = get_kde_with_total_bet_amount(
133
+ markets_data
134
+ )
 
 
 
 
135
 
136
  with gr.Row():
137
  gr.Markdown(
live_data/markets_live_data.parquet CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:f3283dcea94638dee3b949a1cbdb90b7acdf8c50aa80c398888ed57525c07158
3
- size 27358
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e254bb09afa15f82a81192c5063d26e420b32d93f9ffb56a65afd4d9d28a27eb
3
+ size 30562
scripts/live_markets_data.py CHANGED
@@ -233,8 +233,6 @@ def transform_fpmms(fpmms: pd.DataFrame, filename: str, current_timestamp: int)
233
  fpmms["open"] = True
234
  fpmms["total_trades"] = 0
235
  fpmms["dist_gap_perc"] = 0.0
236
- fpmms["votes_first_outcome_perc"] = 0.0
237
- fpmms["votes_second_outcome_perc"] = 0.0
238
  fpmms["first_outcome"] = fpmms.question.apply(lambda x: x["outcomes"][0])
239
  fpmms["second_outcome"] = fpmms.question.apply(lambda x: x["outcomes"][1])
240
  # computation of token distributions
 
233
  fpmms["open"] = True
234
  fpmms["total_trades"] = 0
235
  fpmms["dist_gap_perc"] = 0.0
 
 
236
  fpmms["first_outcome"] = fpmms.question.apply(lambda x: x["outcomes"][0])
237
  fpmms["second_outcome"] = fpmms.question.apply(lambda x: x["outcomes"][1])
238
  # computation of token distributions
scripts/live_traders_data.py CHANGED
@@ -2,7 +2,7 @@ import requests
2
  import logging
3
  import pandas as pd
4
  from collections import defaultdict
5
- from typing import Any, Optional
6
  from tqdm import tqdm
7
  from utils import (
8
  OMEN_SUBGRAPH_URL,
@@ -11,7 +11,7 @@ from utils import (
11
  DATA_DIR,
12
  )
13
  from utils import SUBGRAPH_API_KEY, _to_content
14
- from queries import omen_trader_votes_query
15
 
16
 
17
 
@@ -31,7 +31,7 @@ def _query_omen_xdai_subgraph(
31
  id_gt = ""
32
 
33
  while True:
34
- query = omen_trader_votes_query.substitute(
35
  fpmm_creator=CREATOR.lower(),
36
  first=BATCH_SIZE,
37
  id_gt=id_gt,
@@ -102,16 +102,17 @@ def compute_votes_distribution(market_trades: pd.DataFrame, logger):
102
  percentage_index_1 = round((sum_outcome_index_1 / total_trades) * 100, 2)
103
  return (100 - percentage_index_1), percentage_index_1
104
 
 
 
 
 
 
 
 
105
 
106
- def compute_price_weighted_perc(market_trades: pd.DataFrame, logger):
107
  """It computes the price weighted distribution with the percentages of each outcome"""
108
  logger.info("Computing the price weighted distribution")
109
- # trades for outcome 0
110
- trades_outcome_0 = market_trades.loc[market_trades["outcomeIndex"]==0]
111
- logger.debug(f"Total trades for outcome 0 = {len(trades_outcome_0)}")
112
- # trades for outcome 1
113
- trades_outcome_1 = market_trades.loc[market_trades["outcomeIndex"]==1]
114
- logger.debug(f"Total trades for outcome 1 = {len(trades_outcome_1)}")
115
  total_usd_outcome_0 = sum(trades_outcome_0.collateralAmountUSD)
116
  total_usd_outcome_1 = sum(trades_outcome_1.collateralAmountUSD)
117
  total_usd = total_usd_outcome_0 + total_usd_outcome_1
@@ -123,7 +124,7 @@ def compute_price_weighted_perc(market_trades: pd.DataFrame, logger):
123
  def add_trading_info(fpmms: pd.DataFrame, current_timestamp: int, logger) -> None:
124
  """Function to update only the information related with the current timestamp"""
125
 
126
- logger.info("Adding votes distribution per market")
127
  fpmms["liquidityMeasure"] = fpmms["liquidityMeasure"].apply(lambda x: int(x))
128
  # Iterate over the markets
129
  for i, fpmm in tqdm(fpmms.iterrows(), total=len(fpmms), desc="Analysing trades"):
@@ -145,14 +146,25 @@ def add_trading_info(fpmms: pd.DataFrame, current_timestamp: int, logger) -> Non
145
  if len(market_trades) > 0:
146
  # adding average trade size
147
  market_trades["collateralAmountUSD"] = market_trades.collateralAmountUSD.apply(lambda x: round(float(x),3))
 
148
  mean_trade_size = market_trades.collateralAmountUSD.mean()
149
  total_bet_amount = sum(market_trades.collateralAmountUSD)
150
- first_outcome, second_outcome = compute_price_weighted_perc(market_trades, logger)
 
 
 
 
 
 
 
 
 
151
  else:
152
  logger.info("No trades for this market")
153
- mean_trade_size = 0.0
154
- total_bet_amount = 0.0
155
- first_outcome, second_outcome = 50.0, 50.0
 
156
  fpmms.at[i,"mean_trade_size"] = mean_trade_size
157
  fpmms.at[i,"total_bet_amount"] = total_bet_amount
158
  logger.info(
@@ -160,8 +172,8 @@ def add_trading_info(fpmms: pd.DataFrame, current_timestamp: int, logger) -> Non
160
  )
161
  fpmms.at[i,"price_weighted_first_outcome_perc"] = first_outcome
162
  fpmms.at[i,"price_weighted_second_outcome_perc"] = second_outcome
163
- metric = abs(fpmm["first_token_perc"] - first_outcome)
164
- logger.info(f"metric for this market {metric}")
165
  fpmms.at[i,"dist_gap_perc"] = metric
166
  logger.debug("Dataset after adding trading info")
167
  logger.debug(fpmms.head())
 
2
  import logging
3
  import pandas as pd
4
  from collections import defaultdict
5
+ from typing import Any, Optional, Tuple
6
  from tqdm import tqdm
7
  from utils import (
8
  OMEN_SUBGRAPH_URL,
 
11
  DATA_DIR,
12
  )
13
  from utils import SUBGRAPH_API_KEY, _to_content
14
+ from queries import omen_market_trades_query
15
 
16
 
17
 
 
31
  id_gt = ""
32
 
33
  while True:
34
+ query = omen_market_trades_query.substitute(
35
  fpmm_creator=CREATOR.lower(),
36
  first=BATCH_SIZE,
37
  id_gt=id_gt,
 
102
  percentage_index_1 = round((sum_outcome_index_1 / total_trades) * 100, 2)
103
  return (100 - percentage_index_1), percentage_index_1
104
 
105
+ def compute_bought_tokens_distribution(trades_outcome_0: pd.DataFrame, trades_outcome_1: pd.DataFrame) -> Tuple:
106
+ """Function to compute the distribution of bought tokens from the trades on each outcome """
107
+ total_tokens_outcome_0 = sum(trades_outcome_0.outcomeTokensTraded)
108
+ total_tokens_outcome_1 = sum(trades_outcome_1.outcomeTokensTraded)
109
+ total_bought_tokens = total_tokens_outcome_0 + total_tokens_outcome_1
110
+ percentage_bought_outcome_0 = round((total_tokens_outcome_0/total_bought_tokens)*100, 2)
111
+ return percentage_bought_outcome_0, 100 - percentage_bought_outcome_0
112
 
113
+ def compute_price_weighted_perc(trades_outcome_0: pd.DataFrame, trades_outcome_1: pd.DataFrame, logger) -> Tuple:
114
  """It computes the price weighted distribution with the percentages of each outcome"""
115
  logger.info("Computing the price weighted distribution")
 
 
 
 
 
 
116
  total_usd_outcome_0 = sum(trades_outcome_0.collateralAmountUSD)
117
  total_usd_outcome_1 = sum(trades_outcome_1.collateralAmountUSD)
118
  total_usd = total_usd_outcome_0 + total_usd_outcome_1
 
124
  def add_trading_info(fpmms: pd.DataFrame, current_timestamp: int, logger) -> None:
125
  """Function to update only the information related with the current timestamp"""
126
 
127
+ logger.info("Adding price weighted distribution per market")
128
  fpmms["liquidityMeasure"] = fpmms["liquidityMeasure"].apply(lambda x: int(x))
129
  # Iterate over the markets
130
  for i, fpmm in tqdm(fpmms.iterrows(), total=len(fpmms), desc="Analysing trades"):
 
146
  if len(market_trades) > 0:
147
  # adding average trade size
148
  market_trades["collateralAmountUSD"] = market_trades.collateralAmountUSD.apply(lambda x: round(float(x),3))
149
+ market_trades["outcomeTokensTraded"] = market_trades.outcomeTokensTraded.apply(lambda x: int(x))
150
  mean_trade_size = market_trades.collateralAmountUSD.mean()
151
  total_bet_amount = sum(market_trades.collateralAmountUSD)
152
+ # trades for outcome 0
153
+ trades_outcome_0 = market_trades.loc[market_trades["outcomeIndex"]==0]
154
+ logger.debug(f"Total trades for outcome 0 = {len(trades_outcome_0)}")
155
+ # trades for outcome 1
156
+ trades_outcome_1 = market_trades.loc[market_trades["outcomeIndex"]==1]
157
+ logger.debug(f"Total trades for outcome 1 = {len(trades_outcome_1)}")
158
+ first_outcome, second_outcome = compute_price_weighted_perc(trades_outcome_0, trades_outcome_1, logger)
159
+ bought_tokens_first, bought_tokens_second = compute_bought_tokens_distribution(trades_outcome_0, trades_outcome_1)
160
+ metric = abs(fpmm["first_token_perc"] - first_outcome)
161
+ logger.info(f"metric for this market {metric}")
162
  else:
163
  logger.info("No trades for this market")
164
+ mean_trade_size = total_bet_amount = 0.0
165
+ bought_tokens_first = bought_tokens_second = 0.0
166
+ first_outcome = second_outcome = 0.0
167
+ metric = 0.0
168
  fpmms.at[i,"mean_trade_size"] = mean_trade_size
169
  fpmms.at[i,"total_bet_amount"] = total_bet_amount
170
  logger.info(
 
172
  )
173
  fpmms.at[i,"price_weighted_first_outcome_perc"] = first_outcome
174
  fpmms.at[i,"price_weighted_second_outcome_perc"] = second_outcome
175
+ fpmms.at[i,"bought_tokens_first_perc"] = bought_tokens_first
176
+ fpmms.at[i,"bought_tokens_second_perc"] = bought_tokens_second
177
  fpmms.at[i,"dist_gap_perc"] = metric
178
  logger.debug("Dataset after adding trading info")
179
  logger.debug(fpmms.head())
scripts/queries.py CHANGED
@@ -72,7 +72,7 @@ FPMMS_WITH_TOKENS_QUERY = Template(
72
  )
73
 
74
 
75
- omen_trader_votes_query = Template(
76
  """
77
  {
78
  fpmmTrades(
 
72
  )
73
 
74
 
75
+ omen_market_trades_query = Template(
76
  """
77
  {
78
  fpmmTrades(
tabs/dist_gap.py CHANGED
@@ -5,8 +5,8 @@ import seaborn as sns
5
  from seaborn import FacetGrid
6
  import plotly.express as px
7
 
8
- HEIGHT = 600
9
- WIDTH = 1000
10
 
11
 
12
  def get_dist_gap_time_evolution(market_id: str, all_markets: pd.DataFrame):
@@ -64,6 +64,13 @@ def get_kde_with_trades(markets_data: pd.DataFrame):
64
  return gr.Plot(value=plot.get_figure())
65
 
66
 
 
 
 
 
 
 
 
67
  def get_regplot_with_mean_trade_size(markets_data: pd.DataFrame):
68
  """Function to Plot data and a linear regression model fit between the metric and the mean trade size"""
69
  regplot = sns.regplot(markets_data, x="dist_gap_perc", y="mean_trade_size")
 
5
  from seaborn import FacetGrid
6
  import plotly.express as px
7
 
8
+ HEIGHT = 300
9
+ WIDTH = 600
10
 
11
 
12
  def get_dist_gap_time_evolution(market_id: str, all_markets: pd.DataFrame):
 
64
  return gr.Plot(value=plot.get_figure())
65
 
66
 
67
+ def get_kde_with_total_bet_amount(markets_data: pd.DataFrame):
68
+ """Function to paint the density plot of the metric in terms of the total bet amount"""
69
+ plot = sns.kdeplot(markets_data, x="dist_gap_perc", y="total_bet_amount", fill=True)
70
+ plt.ylabel("Total bet amount per market")
71
+ return gr.Plot(value=plot.get_figure())
72
+
73
+
74
  def get_regplot_with_mean_trade_size(markets_data: pd.DataFrame):
75
  """Function to Plot data and a linear regression model fit between the metric and the mean trade size"""
76
  regplot = sns.regplot(markets_data, x="dist_gap_perc", y="mean_trade_size")