in src/backend/entrypoints/jupyter/flow_constructor.py [0:0]
def build_table(experiment: Experiment, symbols=None, columns=None, condition=None):
import pandas as pd
dataframes = []
if symbols is None:
symbols = experiment.tradable_symbols
for symbol in symbols:
columns_ = columns if columns is not None else experiment.data_by_symbol[symbol].keys()
for column in columns_:
if column in experiment.data_by_symbol[symbol].keys():
df = pd.DataFrame({f"{symbol}_{column}": experiment.data_by_symbol[symbol][column]})
df.columns.names = ["symbol"]
dataframes.append(df)
columns_ = columns if columns is not None else experiment.lclsglbls.keys()
for column in columns_:
# print(column, symbol)
if (
column in experiment.lclsglbls.keys()
and isinstance(experiment.lclsglbls[column], dict)
and symbol in experiment.lclsglbls[column].keys()
and isinstance(experiment.lclsglbls[column][symbol], pd.Series)
):
df = pd.DataFrame({f"{symbol}_{column}": experiment.lclsglbls[column][symbol]})
df.columns.names = ["symbol"]
dataframes.append(df)
columns_ = columns if columns is not None else experiment.trading_stats_by_symbol[symbol].keys()
for column in columns_:
if (
symbol in experiment.trading_stats_by_symbol.keys()
and column in experiment.trading_stats_by_symbol[symbol].keys()
):
df = pd.DataFrame({f"{symbol}_{column}": experiment.trading_stats_by_symbol[symbol][column]})
df.columns.names = ["symbol"]
dataframes.append(df)
columns_ = columns if columns is not None else experiment.strategy_stats.keys()
for column in columns_:
if column in experiment.strategy_stats.keys():
df = pd.DataFrame({f"{column}": experiment.strategy_stats[column]})
df.columns.names = ["symbol"]
dataframes.append(df)
merged = pd.concat(dataframes, axis=1)
# Apply condition if one is provided
if condition is not None:
merged = merged[condition(merged)]
return merged