diff --git a/webpages/pythonx_lessons_pages/__pycache__/pythonx_lesson3.cpython-312.pyc b/webpages/pythonx_lessons_pages/__pycache__/pythonx_lesson3.cpython-312.pyc
index 9d127dcd1..4957797e1 100644
Binary files a/webpages/pythonx_lessons_pages/__pycache__/pythonx_lesson3.cpython-312.pyc and b/webpages/pythonx_lessons_pages/__pycache__/pythonx_lesson3.cpython-312.pyc differ
diff --git a/webpages/pythonx_lessons_pages/pythonx_lesson3.py b/webpages/pythonx_lessons_pages/pythonx_lesson3.py
index 6aac0e814..bdbaff617 100644
--- a/webpages/pythonx_lessons_pages/pythonx_lesson3.py
+++ b/webpages/pythonx_lessons_pages/pythonx_lesson3.py
@@ -28,51 +28,61 @@ def pythonx_lesson3():
st.header(":three: Application Demo")
# print text formatted by HTML
+
+ # Display a styled title in HTML format
st.markdown(
"
Sample Stock Price App.
",
unsafe_allow_html=True)
+ st.write("Reference: [yfinance Package](https://aroussi.com/post/python-yahoo-finance)")
+ # Brief description of the app's purpose
+ st.subheader('Build an online application for tracing stock price history')
- st.write(
- 'We will use the code learned from previous lecture to build an online application for tracing stock price'
- )
+ # Display a subheading in Markdown
+ st.header("Check Stock History")
- # print text in markdown
- st.markdown("## **Check Stock Information**")
+ # Define a list of popular stock symbols
+ stock_list = ['MSFT', 'AAPL', 'AMZN', 'GOOGL']
- # a list of stock names
- stock_names = ['MSFT', 'AAPL', 'AMZN', 'GOOGL']
- # select a stock to check
- target_stock = st.selectbox('Select a stock to check', options=stock_names)
+ # Create a dropdown menu for selecting a stock
+ stock_name = st.selectbox('Select a stock to check', options=stock_list)
- st.markdown("## **Check Stock Price History**")
-
- # start date of the stock infomation, default is the first day of year 2024
+ # Input for selecting the start date of stock data, default is January 1, 2024
start_date = st.date_input('Start Date', datetime(2024, 1, 1))
- # end date of the stock infomation, default is date of today
+ # Input for selecting the end date of stock data, default is today
end_date = st.date_input("End Date")
- # get today date
+ # Store today's date for validation
today = date.today()
- if st.button('Submit'):
- # check valid date
- if start_date > today or end_date > today:
- st.write("## **Please select a valid date period.**")
- else:
- # download the stock data based on stock name, start/end date
- data = yf.download(target_stock, start_date, end_date)
- # show a progress bar
- with st.spinner(text='In progress'):
- fig = px.line(data,
- x=data.index,
- y=['Open', 'High', 'Low', 'Close'],
- title=target_stock + " Stock Price",
- labels={
- "value": "Stock Price ($)",
- "variable": "Price Type"
- })
- st.write(fig)
- st.success('Done')
+ # Action to retrieve stock data when the 'Submit' button is clicked
+ if st.button('Submit'):
+ # Check if selected dates are valid (not in the future)
+ if (start_date > today) or (end_date > today) or (start_date > end_date):
+ st.warning("Please select a valid date period.")
+ else:
+ # Get data for the selected stock
+ stock = yf.Ticker(stock_name)
+ # Retrieve historical data between selected dates
+ stock_history = stock.history(start=start_date, end=end_date)
+ st.write("**Raw Data of Stock Price**")
+ # Display raw data of stock price
+ st.dataframe(stock_history)
+ # Plot stock price data (Open, High, Low, Close) using Plotly
+ fig = px.line(stock_history,
+ # use the index of the stock_history data as x-axis.
+ x=stock_history.index,
+ # plot data of columns ['Open', 'High', 'Low', 'Close']
+ y=['Open', 'High', 'Low', 'Close'],
+ title=stock_name + " Stock Price",
+ labels={
+ "value": "Stock Price ($)",
+ "variable": "Price Type"
+ })
+ # Display the generated plot in the app
+ st.write(fig)
+ # Display a success message upon completion
+ st.success('Done')
+
source_code = """
@@ -82,52 +92,61 @@ def pythonx_lesson3():
import yfinance as yf
import plotly.express as px
- # print text formatted by HTML
+
+ # Display a styled title in HTML format
st.markdown(
" Sample Stock Price App.
",
unsafe_allow_html=True)
+ st.write("Reference: [yfinance Package](https://aroussi.com/post/python-yahoo-finance)")
+ # Brief description of the app's purpose
+ st.subheader('Build an online application for tracing stock price history')
- st.write(
- 'We will use the code learned from previous lecture to build an online application for tracing stock price'
- )
+ # Display a subheading in Markdown
+ st.header("Check Stock History")
- # print text in markdown
- st.markdown("## **Check Stock Information**")
+ # Define a list of popular stock symbols
+ stock_list = ['MSFT', 'AAPL', 'AMZN', 'GOOGL']
- # a list of stock names
- stock_names = ['MSFT', 'AAPL', 'AMZN', 'GOOGL']
- # select a stock to check
- target_stock = st.selectbox('Select a stock to check', options=stock_names)
+ # Create a dropdown menu for selecting a stock
+ stock_name = st.selectbox('Select a stock to check', options=stock_list)
- st.markdown("## **Check Stock Price History**")
-
- # start date of the stock infomation, default is the first day of year 2024
+ # Input for selecting the start date of stock data, default is January 1, 2024
start_date = st.date_input('Start Date', datetime(2024, 1, 1))
- # end date of the stock infomation, default is date of today
+ # Input for selecting the end date of stock data, default is today
end_date = st.date_input("End Date")
- # get today date
+ # Store today's date for validation
today = date.today()
- if st.button('Submit'):
- # check valid date
- if start_date > today or end_date > today:
- st.write("## **Please select a valid date period.**")
- else:
- # download the stock data based on stock name, start/end date
- data = yf.download(target_stock, start_date, end_date)
- # show a progress bar
- with st.spinner(text='In progress'):
- fig = px.line(data,
- x=data.index,
- y=['Open', 'High', 'Low', 'Close'],
- title=target_stock + " Stock Price",
- labels={
- "value": "Stock Price ($)",
- "variable": "Price Type"
- })
- st.write(fig)
- st.success('Done')
+ # Action to retrieve stock data when the 'Submit' button is clicked
+ if st.button('Submit'):
+ # Check if selected dates are valid (not in the future)
+ if (start_date > today) or (end_date > today) or (start_date > end_date):
+ st.warning("Please select a valid date period.")
+ else:
+ # Get data for the selected stock
+ stock = yf.Ticker(stock_name)
+ # Retrieve historical data between selected dates
+ stock_history = stock.history(start=start_date, end=end_date)
+ st.write("**Raw Data of Stock Price**")
+ # Display raw data of stock price
+ st.dataframe(stock_history)
+ # Plot stock price data (Open, High, Low, Close) using Plotly
+ fig = px.line(stock_history,
+ # use the index of the stock_history data as x-axis.
+ x=stock_history.index,
+ # plot data of columns ['Open', 'High', 'Low', 'Close']
+ y=['Open', 'High', 'Low', 'Close'],
+ title=stock_name + " Stock Price",
+ labels={
+ "value": "Stock Price ($)",
+ "variable": "Price Type"
+ })
+ # Display the generated plot in the app
+ st.write(fig)
+ # Display a success message upon completion
+ st.success('Done')
+
"""