arshy's picture
initial commit
c892f97
raw
history blame
8.22 kB
import gradio as gr
import pandas as pd
HEIGHT=600
WIDTH=1000
def prepare_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
"""Prepares the trades data for analysis."""
trades_df['creation_timestamp'] = pd.to_datetime(trades_df['creation_timestamp'])
trades_df['creation_timestamp'] = trades_df['creation_timestamp'].dt.tz_convert('UTC')
trades_df['month_year'] = trades_df['creation_timestamp'].dt.to_period('M').astype(str)
trades_df['month_year_week'] = trades_df['creation_timestamp'].dt.to_period('W').astype(str)
trades_df['winning_trade'] = trades_df['winning_trade'].astype(int)
return trades_df
def get_overall_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
"""Gets the overall trades data for the given tools and calculates the winning percentage."""
trades_count = trades_df.groupby('month_year_week').size().reset_index()
trades_count.columns = trades_count.columns.astype(str)
trades_count.rename(columns={'0': 'trades'}, inplace=True)
return trades_count
def get_overall_winning_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
"""Gets the overall winning trades data for the given tools and calculates the winning percentage."""
winning_trades = trades_df.groupby(['month_year_week'])['winning_trade'].sum() / trades_df.groupby(['month_year_week'])['winning_trade'].count() * 100
# winning_trades is a series, give it a dataframe
winning_trades = winning_trades.reset_index()
winning_trades.columns = winning_trades.columns.astype(str)
winning_trades.columns = ['month_year_week', 'winning_trade']
return winning_trades
def plot_trade_details(trade_detail: str, trades_df: pd.DataFrame) -> gr.LinePlot:
"""Plots the trade details for the given trade detail."""
if trade_detail == "mech calls":
# this is to filter out the data before 2023-09-01
trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"]
trades_filtered = trades_filtered.groupby("month_year_week")["num_mech_calls"].quantile([0.25, 0.5, 0.75]).unstack()
trades_filtered.columns = trades_filtered.columns.astype(str)
trades_filtered.reset_index(inplace=True)
trades_filtered.columns = [
"month_year_week",
"25th_percentile",
"50th_percentile",
"75th_percentile"
]
# reformat the data as percentile, date, value
trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="mech_calls")
return gr.LinePlot(
value=trades_filtered,
x="month_year_week",
y="mech_calls",
color="percentile",
show_label=True,
interactive=True,
show_actions_button=True,
tooltip=["month_year_week", "percentile", "mech_calls"],
height=HEIGHT,
width=WIDTH
)
if trade_detail == "collateral amount":
trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"]
trades_filtered = trades_filtered.groupby("month_year_week")["collateral_amount"].quantile([0.25, 0.5, 0.75]).unstack()
trades_filtered.columns = trades_filtered.columns.astype(str)
trades_filtered.reset_index(inplace=True)
trades_filtered.columns = [
"month_year_week",
"25th_percentile",
"50th_percentile",
"75th_percentile"
]
# reformat the data as percentile, date, value
trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="collateral_amount")
return gr.LinePlot(
value=trades_filtered,
x="month_year_week",
y="collateral_amount",
color="percentile",
show_label=True,
interactive=True,
show_actions_button=True,
tooltip=["month_year_week", "percentile", "collateral_amount"],
height=HEIGHT,
width=WIDTH
)
if trade_detail == "earnings":
trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"]
trades_filtered = trades_filtered.groupby("month_year_week")["earnings"].quantile([0.25, 0.5, 0.75]).unstack()
trades_filtered.columns = trades_filtered.columns.astype(str)
trades_filtered.reset_index(inplace=True)
trades_filtered.columns = [
"month_year_week",
"25th_percentile",
"50th_percentile",
"75th_percentile"
]
# reformat the data as percentile, date, value
trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="earnings")
return gr.LinePlot(
value=trades_filtered,
x="month_year_week",
y="earnings",
color="percentile",
show_label=True,
interactive=True,
show_actions_button=True,
tooltip=["month_year_week", "percentile", "earnings"],
height=HEIGHT,
width=WIDTH
)
if trade_detail == "net earnings":
trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"]
trades_filtered = trades_filtered.groupby("month_year_week")["net_earnings"].quantile([0.25, 0.5, 0.75]).unstack()
trades_filtered.columns = trades_filtered.columns.astype(str)
trades_filtered.reset_index(inplace=True)
trades_filtered.columns = [
"month_year_week",
"25th_percentile",
"50th_percentile",
"75th_percentile"
]
# reformat the data as percentile, date, value
trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="net_earnings")
return gr.LinePlot(
value=trades_filtered,
x="month_year_week",
y="net_earnings",
color="percentile",
show_label=True,
interactive=True,
show_actions_button=True,
tooltip=["month_year_week", "percentile", "net_earnings"],
height=HEIGHT,
width=WIDTH
)
if trade_detail == "ROI":
trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"]
trades_filtered = trades_filtered.groupby("month_year_week")["roi"].quantile([0.25, 0.5, 0.75]).unstack()
trades_filtered.columns = trades_filtered.columns.astype(str)
trades_filtered.reset_index(inplace=True)
trades_filtered.columns = [
"month_year_week",
"25th_percentile",
"50th_percentile",
"75th_percentile"
]
# reformat the data as percentile, date, value
trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="ROI")
return gr.LinePlot(
value=trades_filtered,
x="month_year_week",
y="ROI",
color="percentile",
show_label=True,
interactive=True,
show_actions_button=True,
tooltip=["month_year_week", "percentile", "ROI"],
height=HEIGHT,
width=WIDTH
)
def plot_trades_by_week(trades_df: pd.DataFrame) -> gr.BarPlot:
"""Plots the trades data for the given tools and calculates the winning percentage."""
return gr.BarPlot(
value=trades_df,
x="month_year_week",
y="trades",
show_label=True,
interactive=True,
show_actions_button=True,
tooltip=["month_year_week", "trades"],
height=HEIGHT,
width=WIDTH
)
def plot_winning_trades_by_week(trades_df: pd.DataFrame) -> gr.BarPlot:
"""Plots the winning trades data for the given tools and calculates the winning percentage."""
return gr.BarPlot(
value=trades_df,
x="month_year_week",
y="winning_trade",
show_label=True,
interactive=True,
show_actions_button=True,
tooltip=["month_year_week", "winning_trade"],
height=HEIGHT,
width=WIDTH
)