import pandas as pd import requests import time import streamlit as st def get_data(): data_points = 10000 interval = '1h' limit = 1500 start_time = int(time.time() * 1000) - (data_points * 60 * 60 * 1000) df_list = [] for i in range(0, data_points, limit): params = { 'symbol': 'BTCUSDT', 'interval': interval, 'limit': limit, 'startTime': start_time + (i * 60 * 60 * 1000) } response = requests.get('https://api.binance.com/api/v3/klines', params=params) data = response.json() if data: # Check if data is present try: df = pd.DataFrame(data, columns=['open_time', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore']) timestamp_key = 'open_time' # Adjust this based on the data structure df[timestamp_key] = pd.to_datetime(df[timestamp_key], unit='ms') df.set_index(timestamp_key, inplace=True) df.drop(['volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore'], axis=1, inplace=True) df_list.append(df) except KeyError as e: st.error(f"KeyError: {e}. Please check the keys in the data returned by the API.") return None else: st.error("Data not found in the API response.") return None df = pd.concat(df_list, ignore_index=True) return df if st.button("Fetch historical data"): # Retrieve historical data from Binance API df = get_data() if df is not None: st.write(df) # Save historical data to btcusdt_data.pkl df.to_pickle('btcusdt_data.pkl') st.write("Data fetched successfully and saved to btcusdt_data.pkl")