{ "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
month_year_weekmarket_creatortrader_addresswinning_trade
0Jul-21all0x95ecc70d9f4feb162ed9f41c4432d990c36c8f5733.333333
1Jul-21quickstart0x95ecc70d9f4feb162ed9f41c4432d990c36c8f5733.333333
2Jul-21quickstart0xf089874165be0377680683fd5187a058dea82683100.000000
3Jul-21all0xf089874165be0377680683fd5187a058dea82683100.000000
4Jul-21quickstart0x49f4e3d8edc85efda9b0a36d96e406a59b13fcc250.000000
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
month_year_weekmarket_creatortrader_addresswinning_trade
7Jul-21pearl0xe283e408c6017447da9fe092d52c3867536996800.0
29Jul-21pearl0x913dedfcfb335a49509b67acb3b1ab2612a5c0c9100.0
30Jul-21pearl0x1b9e28e7f817e1312636a485f31cca8a4be61fac0.0
33Jul-21pearl0xe0113a139f591efa8bf5e19308c7c27199682d770.0
37Jul-21pearl0x66a022b113b41e08d90cfd9468b8b6565d6ea995100.0
\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 }