streamlit python yfinance och mpfinance
hej!
behöver lite guide i vad jag ska jag göra för att få mina båda grafer att synas i streamlit eller om ni har något annat alternativ som gör det jag vill göra lite bättre så är det välkommet.
tanken är då att ha två eller fler grafer som kontinuerligt uppdateras, jag trodde att om jag la de i varsin tråd och sedan körde det igen så skulle det funka men det verkar inte funka eller så förstår jag inte mig på hur trådar fungerar. är det nu jag ska använda mig utav join? är ny inom GUI och liknande och har sedan tidigare bar gjort saker i terminalen så allt detta gui är rätt så nytt för mig så all hjälp är uppskattad!
import yfinance as yf
import mplfinance as mpf
import pandas as pd
import time
import streamlit as st
from threading import Thread
# https://github.com/matplotlib/mplfinance/blob/master/examples...
st.title("Candle Chart")
# Streamlit container for the chart
chart_container = st.empty()
# Function to fetch and process data
def download_data(ticker, period="1d", interval="1m"):
data = yf.download(ticker, period=period, interval=interval, multi_level_index=False)
data = data[["Open", "High", "Low", "Close", "Volume"]]
data.index = pd.to_datetime(data.index)
return data
def create_chart(symbol_ticker):
# Infinite loop to update the chart
while True:
# Clear the previous chart
chart_container.empty()
# Fetch the latest data
data = download_data(symbol_ticker)
# Create the mplfinance plot
fig, ax = mpf.plot(
data,
type="candle",
style="yahoo",
title=f"{symbol_ticker}",
volume=True,
show_nontrading=False,
returnfig=True
)
# Render the chart in Streamlit
chart_container.pyplot(fig)
# write the latest price in the streamlit app
latest_price = data["Close"].iloc[-1] # Get the latest closing price
latest_time = data.index[-1] # Get the latest time
st.write(f"Latest Price : {latest_time} : {latest_price}")
# Wait for 60 seconds before updating
time.sleep(60)
if __name__ == "__main__":
# Create the initial chart
c1 = Thread(target=create_chart(symbol_ticker="AAPL"))
c2 = Thread(target=create_chart(symbol_ticker="MSFT"))
c1.start()
c2.start()