import streamlit as st
import random
# ---------------- SETUP SESSION STATE ----------------
if "bal" not in st.session_state:
st.session_state.bal = 1000
if "market" not in st.session_state:
st.session_state.market = {
"Nvidia": 200,
"Roblox": 50,
"Google": 100,
"Tesla": 115,
}
if "owned" not in st.session_state:
st.session_state.owned = {}
# ---------------- HEADER ----------------
st.title("๐ Stock Simulator 1.1.0")
st.write("You start with **$1000**. Everything is random. Good luck!")
# ---------------- MENU ----------------
choice = st.selectbox(
"Choose an action:",
["View Market", "Buy Stocks", "Sell Stocks", "My Portfolio", "Simulate Time"]
)
# ---------------- VIEW MARKET ----------------
if choice == "View Market":
st.subheader("๐ Market Prices")
st.write(st.session_state.market)
# ---------------- PORTFOLIO ----------------
elif choice == "My Portfolio":
st.subheader("๐ผ Your Portfolio")
st.write("Owned stocks:", st.session_state.owned)
st.write("Balance: $", st.session_state.bal)
# ---------------- BUY STOCKS ----------------
elif choice == "Buy Stocks":
stock = st.selectbox("Select stock to buy", st.session_state.market.keys())
shares = st.number_input("How many shares?", min_value=1, step=1)
price = st.session_state.market[stock] * shares
if st.button("Buy"):
if st.session_state.bal >= price:
st.session_state.bal -= price
st.session_state.owned[stock] = st.session_state.owned.get(stock, 0) + shares
st.success("Stock purchased!")
else:
st.error("Insufficient funds")
# ---------------- SELL STOCKS ----------------
elif choice == "Sell Stocks":
if not st.session_state.owned:
st.warning("You donโt own any stocks")
else:
stock = st.selectbox("Select stock to sell", st.session_state.owned.keys())
max_shares = st.session_state.owned[stock]
shares = st.number_input("How many shares?", min_value=1, max_value=max_shares, step=1)
if st.button("Sell"):
price = st.session_state.market[stock] * shares
st.session_state.bal += price
st.session_state.owned[stock] -= shares
if st.session_state.owned[stock] == 0:
del st.session_state.owned[stock]
st.success("Stock sold!")
# ---------------- SIMULATION ----------------
elif choice == "Simulate Time":
period = st.selectbox("Simulate:", ["Day", "Week", "Month", "Year"])
if st.button("Simulate"):
ranges = {
"Day": 5,
"Week": 20,
"Month": 50,
"Year": 200,
}
for stock in st.session_state.market:
st.session_state.market[stock] += random.randint(
-ranges[period], ranges[period]
)
st.success(f"{period} simulated!")
st.write(st.session_state.market)