{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"all_trades = pd.read_parquet('../data/all_trades_profitability.parquet')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"all_trades[\"creation_date\"] = all_trades[\"creation_timestamp\"].dt.date"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/gp/02mb1d514ng739czlxw1lhh00000gn/T/ipykernel_38171/1825242321.py:6: UserWarning: Converting to PeriodArray/Index representation will drop timezone information.\n",
" all_trades[\"creation_timestamp\"].dt.to_period(\"W\").dt.strftime(\"%b-%d\")\n"
]
}
],
"source": [
"all_trades = all_trades.sort_values(\n",
" by=\"creation_timestamp\", ascending=True\n",
")\n",
"\n",
"all_trades[\"month_year_week\"] = (\n",
" all_trades[\"creation_timestamp\"].dt.to_period(\"W\").dt.strftime(\"%b-%d\")\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def compute_winning_metric_per_trader_per_market_creator(\n",
" trader_address: str, week_traders_data: pd.DataFrame, market_creator: str = \"all\"\n",
") -> float:\n",
" assert \"market_creator\" in week_traders_data.columns\n",
" filtered_traders_data = week_traders_data.loc[\n",
" week_traders_data[\"trader_address\"] == trader_address\n",
" ]\n",
" if market_creator != \"all\": # compute only for the specific market creator\n",
" filtered_traders_data = filtered_traders_data.loc[\n",
" filtered_traders_data[\"market_creator\"] == market_creator\n",
" ]\n",
" if len(filtered_traders_data) == 0:\n",
" return None # No Data\n",
" winning_perc = (\n",
" filtered_traders_data[\"winning_trade\"].sum()\n",
" / filtered_traders_data[\"winning_trade\"].count()\n",
" * 100.0\n",
" )\n",
" return winning_perc"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def merge_winning_metrics_by_trader(\n",
" trader: str, weekly_data: pd.DataFrame, week: str\n",
") -> pd.DataFrame:\n",
" trader_metrics = []\n",
" # computation as specification 1 for all market creators\n",
" winning_metrics_all = {}\n",
" winning_metric_all = compute_winning_metric_per_trader_per_market_creator(\n",
" trader, weekly_data, market_creator=\"all\"\n",
" )\n",
" winning_metrics_all[\"winning_perc\"] = winning_metric_all\n",
" winning_metrics_all[\"month_year_week\"] = week\n",
" winning_metrics_all[\"market_creator\"] = \"all\"\n",
" trader_metrics.append(winning_metrics_all)\n",
" if week == \"Jul-21\":\n",
" print(f\"trader = {trader}, win_perc for all ={winning_metric_all}\")\n",
"\n",
" # computation as specification 1 for quickstart markets\n",
" winning_metrics_qs = {}\n",
" winning_metric = compute_winning_metric_per_trader_per_market_creator(\n",
" trader, weekly_data, market_creator=\"quickstart\"\n",
" )\n",
" if winning_metric:\n",
" winning_metrics_qs[\"winning_perc\"] = winning_metric\n",
" winning_metrics_qs[\"month_year_week\"] = week\n",
" winning_metrics_qs[\"market_creator\"] = \"quickstart\"\n",
" trader_metrics.append(winning_metrics_qs)\n",
"\n",
" # computation as specification 1 for pearl markets\n",
" winning_metrics_pearl = {}\n",
" winning_metric = compute_winning_metric_per_trader_per_market_creator(\n",
" trader, weekly_data, market_creator=\"pearl\"\n",
" )\n",
" if winning_metric:\n",
" winning_metrics_pearl[\"winning_perc\"] = winning_metric\n",
" winning_metrics_pearl[\"month_year_week\"] = week\n",
" winning_metrics_pearl[\"market_creator\"] = \"pearl\"\n",
" trader_metrics.append(winning_metrics_pearl)\n",
"\n",
" result = pd.DataFrame.from_dict(trader_metrics, orient=\"columns\")\n",
" # tqdm.write(f\"Total length of all winning metrics for this week = {len(result)}\")\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"def win_metrics_trader_level(weekly_data):\n",
" winning_trades = (\n",
" weekly_data.groupby([\"month_year_week\", \"market_creator\",\"trader_address\"], sort=False)[\n",
" \"winning_trade\"\n",
" ].sum()\n",
" / weekly_data.groupby([\"month_year_week\", \"market_creator\",\"trader_address\"], sort=False)[\n",
" \"winning_trade\"\n",
" ].count()\n",
" * 100\n",
" )\n",
" # winning_trades is a series, give it a dataframe\n",
" winning_trades = winning_trades.reset_index()\n",
" winning_trades.columns = winning_trades.columns.astype(str)\n",
" winning_trades.columns = [\"month_year_week\", \"market_creator\", \"trader_address\", \"winning_trade\"]\n",
" winning_trades.rename(columns={\"winning_trade\": \"winning_perc\"})\n",
" return winning_trades"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" month_year_week | \n",
" market_creator | \n",
" trader_address | \n",
" winning_trade | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Jul-21 | \n",
" all | \n",
" 0x95ecc70d9f4feb162ed9f41c4432d990c36c8f57 | \n",
" 33.333333 | \n",
"
\n",
" \n",
" 1 | \n",
" Jul-21 | \n",
" quickstart | \n",
" 0x95ecc70d9f4feb162ed9f41c4432d990c36c8f57 | \n",
" 33.333333 | \n",
"
\n",
" \n",
" 2 | \n",
" Jul-21 | \n",
" quickstart | \n",
" 0xf089874165be0377680683fd5187a058dea82683 | \n",
" 100.000000 | \n",
"
\n",
" \n",
" 3 | \n",
" Jul-21 | \n",
" all | \n",
" 0xf089874165be0377680683fd5187a058dea82683 | \n",
" 100.000000 | \n",
"
\n",
" \n",
" 4 | \n",
" Jul-21 | \n",
" quickstart | \n",
" 0x49f4e3d8edc85efda9b0a36d96e406a59b13fcc2 | \n",
" 50.000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" month_year_week market_creator trader_address \\\n",
"0 Jul-21 all 0x95ecc70d9f4feb162ed9f41c4432d990c36c8f57 \n",
"1 Jul-21 quickstart 0x95ecc70d9f4feb162ed9f41c4432d990c36c8f57 \n",
"2 Jul-21 quickstart 0xf089874165be0377680683fd5187a058dea82683 \n",
"3 Jul-21 all 0xf089874165be0377680683fd5187a058dea82683 \n",
"4 Jul-21 quickstart 0x49f4e3d8edc85efda9b0a36d96e406a59b13fcc2 \n",
"\n",
" winning_trade \n",
"0 33.333333 \n",
"1 33.333333 \n",
"2 100.000000 \n",
"3 100.000000 \n",
"4 50.000000 "
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from tqdm import tqdm\n",
"\n",
"market_all = all_trades.copy(deep=True)\n",
"market_all[\"market_creator\"] = \"all\"\n",
"\n",
"# merging both dataframes\n",
"final_traders = pd.concat([market_all, all_trades], ignore_index=True)\n",
"final_traders = final_traders.sort_values(\n",
" by=\"creation_timestamp\", ascending=True)\n",
"\n",
"\n",
"winning_df = win_metrics_trader_level(final_traders)\n",
"winning_df.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"winning_df = compute_winning_metrics_by_trader(all_trades)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"winning_pearl = winning_df.loc[winning_df[\"market_creator\"]==\"pearl\"]"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" month_year_week | \n",
" market_creator | \n",
" trader_address | \n",
" winning_trade | \n",
"
\n",
" \n",
" \n",
" \n",
" 7 | \n",
" Jul-21 | \n",
" pearl | \n",
" 0xe283e408c6017447da9fe092d52c386753699680 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 29 | \n",
" Jul-21 | \n",
" pearl | \n",
" 0x913dedfcfb335a49509b67acb3b1ab2612a5c0c9 | \n",
" 100.0 | \n",
"
\n",
" \n",
" 30 | \n",
" Jul-21 | \n",
" pearl | \n",
" 0x1b9e28e7f817e1312636a485f31cca8a4be61fac | \n",
" 0.0 | \n",
"
\n",
" \n",
" 33 | \n",
" Jul-21 | \n",
" pearl | \n",
" 0xe0113a139f591efa8bf5e19308c7c27199682d77 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 37 | \n",
" Jul-21 | \n",
" pearl | \n",
" 0x66a022b113b41e08d90cfd9468b8b6565d6ea995 | \n",
" 100.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" month_year_week market_creator trader_address \\\n",
"7 Jul-21 pearl 0xe283e408c6017447da9fe092d52c386753699680 \n",
"29 Jul-21 pearl 0x913dedfcfb335a49509b67acb3b1ab2612a5c0c9 \n",
"30 Jul-21 pearl 0x1b9e28e7f817e1312636a485f31cca8a4be61fac \n",
"33 Jul-21 pearl 0xe0113a139f591efa8bf5e19308c7c27199682d77 \n",
"37 Jul-21 pearl 0x66a022b113b41e08d90cfd9468b8b6565d6ea995 \n",
"\n",
" winning_trade \n",
"7 0.0 \n",
"29 100.0 \n",
"30 0.0 \n",
"33 0.0 \n",
"37 100.0 "
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"winning_pearl.head()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "hf_dashboards",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}