Spaces:
Runtime error
Runtime error
File size: 2,704 Bytes
93fe912 205053c 93fe912 c65698a 45d9bfe c65698a 93fe912 45d9bfe 93fe912 45d9bfe 93fe912 45d9bfe 93fe912 45d9bfe c65698a 45d9bfe c65698a 45d9bfe c65698a 45d9bfe c65698a 45d9bfe c65698a 93fe912 45d9bfe 93fe912 205053c c65698a 93fe912 205053c 45d9bfe 205053c 93fe912 205053c 45d9bfe 93fe912 45d9bfe 205053c 45d9bfe 205053c 93fe912 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | import logging
import requests
import pandas as pd
import streamlit as st
from constants import COIN_API_ENDPOINT, BITCOIN_DATA_ANALYSIS_TITLE, TOOL_INVITATION_DESCRIPTION
from market_data_calculator import MarketDataCalculator
from data_retriever import DataRetriever
import prediction
import visualize
# Logging setup
logging.basicConfig(
filename='app.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def apply_market_calculations(df, calculations):
"""Applies a series of market calculations on the DataFrame."""
for calculation in calculations:
df = calculation(df)
return df
def visualize_data(df):
"""Visualizes the market data using various methods."""
visualize.market_data(df)
visualize.volatility(df)
visualize.trade_velocity(df)
visualize.rsi_and_macd(df)
def display_video():
"""Displays a WEBM video."""
with open('app.webm', 'rb') as video_file:
st.video(video_file.read(), format='video/webm')
def fetch_and_predict_data(api_key, period):
limit = DataRetriever.set_limit(period)
url = f"{COIN_API_ENDPOINT}?period_id={period}&limit={limit}"
headers = {"X-CoinAPI-Key": api_key}
data = DataRetriever.retrieve_data(url, headers)
if isinstance(data, list) and data:
df = pd.DataFrame(data)
calculations = [
MarketDataCalculator.convert_to_datetime,
MarketDataCalculator.calculate_market_data,
MarketDataCalculator.calculate_volatility,
MarketDataCalculator.calculate_trade_velocity,
MarketDataCalculator.calculate_rsi,
MarketDataCalculator.calculate_macd
]
df = apply_market_calculations(df, calculations)
df = prediction.append_forecasted_data(df)
return df
else:
st.write(f"Unexpected response format: {data}")
return None
def main():
st.title(BITCOIN_DATA_ANALYSIS_TITLE)
st.write(TOOL_INVITATION_DESCRIPTION)
display_video()
col1, col2 = st.columns(2)
api_key = col1.text_input('Enter your CoinAPI.io API Key:', type='password')
period = col2.selectbox('Select the time period:', ['1HRS', '4HRS', '12HRS'])
if api_key:
try:
df = fetch_and_predict_data(api_key, period)
if df is not None:
visualize_data(df)
except requests.RequestException as e:
logging.error(f"Request error: {e}")
st.write(f"Request error: {e}")
except Exception as e:
logging.error(f"An unknown error occurred: {e}")
st.write(f"An unknown error occurred: {e}")
if __name__ == "__main__":
main()
|