From 08d9e53a71cfdf802590bd914a6473b2e72009d3 Mon Sep 17 00:00:00 2001 From: drupman Date: Fri, 15 Sep 2023 23:49:10 -0300 Subject: [PATCH] (feat) market activity improvements --- pages/strategy_performance/app.py | 46 ++++++++++++++++++------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/pages/strategy_performance/app.py b/pages/strategy_performance/app.py index ca5b225..906b37a 100644 --- a/pages/strategy_performance/app.py +++ b/pages/strategy_performance/app.py @@ -293,9 +293,8 @@ if selected_db is not None: value=round(sell_trades_amount * avg_sell_price, 2)) st.plotly_chart(pnl_over_time(strategy_data_filtered.trade_fill), use_container_width=True) - st.divider() - st.subheader("🕯️ Candlestick") - if strategy_data_filtered.market_data is not None: + st.subheader("💱 Market activity") + if "Error" not in selected_db.status["market_data"] and strategy_data_filtered.market_data is not None: with st.expander("Market activity", expanded=True): col1, col2, col3 = st.columns([1, 1, 2]) with col1: @@ -303,26 +302,35 @@ if selected_db is not None: with col2: rows_per_page = st.number_input("Candles per Page", value=100, min_value=1, max_value=5000) with col3: - total_rows = len(strategy_data_filtered.get_market_data_resampled(interval=f"{intervals[interval]}S")) + total_rows = len( + strategy_data_filtered.get_market_data_resampled(interval=f"{intervals[interval]}S")) total_pages = math.ceil(total_rows / rows_per_page) if total_pages > 1: - selected_page = st.select_slider("Select page", list(range(total_pages)), key="page_slider") + selected_page = st.select_slider("Select page", list(range(total_pages)), total_pages - 1, + key="page_slider") else: selected_page = 0 - start_idx = selected_page * rows_per_page - end_idx = start_idx + rows_per_page - candles_df = strategy_data_filtered.get_market_data_resampled(interval=f"{intervals[interval]}S").iloc[ - start_idx:end_idx] - start_time_page = candles_df.index.min() - end_time_page = candles_df.index.max() - page_data_filtered = single_market_strategy_data.get_filtered_strategy_data(start_time_page, end_time_page) - cg = CandlesGraph(candles_df, show_volume=False, extra_rows=2) - cg.add_buy_trades(page_data_filtered.buys) - cg.add_sell_trades(page_data_filtered.sells) - cg.add_pnl(page_data_filtered, row=2) - cg.add_base_inventory_change(page_data_filtered, row=3) - fig = cg.figure() - st.plotly_chart(fig, use_container_width=True) + start_idx = selected_page * rows_per_page + end_idx = start_idx + rows_per_page + candles_df = strategy_data_filtered.get_market_data_resampled( + interval=f"{intervals[interval]}S").iloc[ + start_idx:end_idx] + start_time_page = candles_df.index.min() + end_time_page = candles_df.index.max() + page_data_filtered = single_market_strategy_data.get_filtered_strategy_data(start_time_page, + end_time_page) + col1, col2 = st.columns([5.5, 1.5]) + with col1: + cg = CandlesGraph(candles_df, show_volume=False, extra_rows=2) + cg.add_buy_trades(page_data_filtered.buys) + cg.add_sell_trades(page_data_filtered.sells) + cg.add_pnl(page_data_filtered, row=2) + cg.add_base_inventory_change(page_data_filtered, row=3) + fig = cg.figure() + st.plotly_chart(fig, use_container_width=True) + with col2: + st.plotly_chart(intraday_performance(page_data_filtered.trade_fill), use_container_width=True) + st.plotly_chart(top_n_trades(page_data_filtered.trade_fill.net_realized_pnl), use_container_width=True) else: st.warning("Market data is not available so the candles graph is not going to be rendered. " "Make sure that you are using the latest version of Hummingbot and market data recorder activated.")