markytools commited on
Commit
7a000af
·
1 Parent(s): d398fc9

new stock market

Browse files
Files changed (4) hide show
  1. .gitattributes +35 -35
  2. README.md +13 -13
  3. app.py +127 -174
  4. requirements.txt +4 -7
.gitattributes CHANGED
@@ -1,35 +1,35 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,13 +1,13 @@
1
- ---
2
- title: Stockmarketplatform
3
- emoji: ⚡
4
- colorFrom: blue
5
- colorTo: blue
6
- sdk: streamlit
7
- sdk_version: 1.26.0
8
- app_file: app.py
9
- pinned: false
10
- license: mit
11
- ---
12
-
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ ---
2
+ title: Stockmarketplatform
3
+ emoji: ⚡
4
+ colorFrom: blue
5
+ colorTo: blue
6
+ sdk: streamlit
7
+ sdk_version: 1.26.0
8
+ app_file: app.py
9
+ pinned: false
10
+ license: mit
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py CHANGED
@@ -1,174 +1,127 @@
1
- import streamlit as st
2
- import yfinance as yf
3
- import pandas as pd
4
- import plotly.graph_objs as go
5
- import numpy as np
6
- from plotly.subplots import make_subplots
7
- import os
8
-
9
- from langchain.embeddings import GooglePalmEmbeddings
10
- from langchain.llms import GooglePalm
11
-
12
- from langchain.document_loaders import UnstructuredURLLoader #load urls into docoument-loader
13
- from langchain.chains.question_answering import load_qa_chain
14
- from langchain.indexes import VectorstoreIndexCreator #vectorize db index with chromadb
15
- from langchain.text_splitter import CharacterTextSplitter #text splitter
16
- from langchain.chains import RetrievalQA
17
- from langchain.document_loaders import UnstructuredPDFLoader #load pdf
18
- from langchain.agents import create_pandas_dataframe_agent
19
- import google.generativeai as palm
20
-
21
- isPswdValid = True # Set to True to temporarily disable password checking
22
- palm_api_key = st.secrets["PALM_API_KEY"]
23
- try:
24
- pswdVal = st.query_params()['pwd'][0]
25
- if pswdVal==st.secrets["PSWD"]:
26
- isPswdValid = True
27
- except:
28
- pass
29
-
30
- if not isPswdValid:
31
- st.write("Invalid Password")
32
- else:
33
- # Initialize language model
34
- api_key = palm_api_key # put your API key here
35
- os.environ["GOOGLE_API_KEY"] = palm_api_key
36
- palm.configure(api_key=palm_api_key)
37
- llm = GooglePalm()
38
- llm.temperature = 0.1
39
-
40
- # Set the Streamlit app title and icon
41
- st.set_page_config(page_title="Stock Analysis", page_icon="📈")
42
-
43
- # Create a Streamlit sidebar for user input
44
- st.sidebar.title("Stock Analysis")
45
- ticker_symbol = st.sidebar.text_input("Enter Stock Ticker Symbol:", value='AAPL')
46
- start_date = st.sidebar.date_input("Start Date", pd.to_datetime('2024-01-01'))
47
- end_date = st.sidebar.date_input("End Date", pd.to_datetime('2024-10-01'))
48
-
49
- # Fetch stock data from Yahoo Finance
50
- try:
51
- stock_data = yf.download(ticker_symbol, start=start_date, end=end_date)
52
- except Exception as e:
53
- st.error("Error fetching stock data. Please check the ticker symbol and date range.")
54
- df = stock_data
55
- df.reset_index(inplace=True) # Reset index to ensure 'Date' becomes a column
56
-
57
- # Create figure with secondary y-axis
58
- fig = make_subplots(specs=[[{"secondary_y": True}]])
59
-
60
- # include candlestick with rangeselector
61
- fig.add_trace(go.Candlestick(x=df['Date'], # Except date, query all other data using Symbol
62
- open=df['Open'][ticker_symbol], high=df['High'][ticker_symbol],
63
- low=df['Low'][ticker_symbol], close=df['Close'][ticker_symbol]),
64
- secondary_y=True)
65
-
66
- # include a go.Bar trace for volumes
67
- fig.add_trace(go.Bar(x=df['Date'], y=df['Volume'][ticker_symbol]),
68
- secondary_y=False)
69
-
70
- fig.layout.yaxis2.showgrid=False
71
- st.plotly_chart(fig)
72
-
73
- # Technical Indicators
74
- st.header("Technical Indicators")
75
-
76
- # Moving Averages
77
- st.subheader("Moving Averages")
78
- df['SMA_20'] = df['Close'][ticker_symbol].rolling(window=20).mean()
79
- df['SMA_50'] = df['Close'][ticker_symbol].rolling(window=50).mean()
80
- fig = go.Figure()
81
- fig.add_trace(go.Scatter(x=df['Date'], y=df['Close'][ticker_symbol], mode='lines', name='Close Price'))
82
- fig.add_trace(go.Scatter(x=df['Date'], y=df['SMA_20'], mode='lines', name='20-Day SMA'))
83
- fig.add_trace(go.Scatter(x=df['Date'], y=df['SMA_50'], mode='lines', name='50-Day SMA'))
84
- fig.update_layout(title="Moving Averages", xaxis_title="Date", yaxis_title="Price (USD)")
85
- st.plotly_chart(fig)
86
-
87
- # RSI (Manual Calculation)
88
- st.subheader("Relative Strength Index (RSI)")
89
- window_length = 14
90
-
91
- # Calculate the daily price changes
92
- delta = df['Close'][ticker_symbol].diff()
93
-
94
- # Separate gains and losses
95
- gain = delta.where(delta > 0, 0)
96
- loss = -delta.where(delta < 0, 0)
97
-
98
- # Calculate the average gain and average loss
99
- avg_gain = gain.rolling(window=window_length, min_periods=1).mean()
100
- avg_loss = loss.rolling(window=window_length, min_periods=1).mean()
101
-
102
- # Calculate the RSI
103
- rs = avg_gain / avg_loss
104
- df['RSI'] = 100 - (100 / (1 + rs))
105
-
106
- fig = go.Figure()
107
- fig.add_trace(go.Scatter(x=df['Date'], y=df['RSI'], mode='lines', name='RSI'))
108
- fig.add_hline(y=70, line_dash="dash", line_color="red", annotation_text="Overbought")
109
- fig.add_hline(y=30, line_dash="dash", line_color="green", annotation_text="Oversold")
110
- fig.update_layout(title="RSI Indicator", xaxis_title="Date", yaxis_title="RSI")
111
- st.plotly_chart(fig)
112
-
113
- # Volume Analysis
114
- st.subheader("Volume Analysis")
115
- fig = go.Figure()
116
- fig.add_trace(go.Bar(x=df['Date'], y=df['Volume'][ticker_symbol], name='Volume'))
117
- fig.update_layout(title="Volume Analysis", xaxis_title="Date", yaxis_title="Volume")
118
- st.plotly_chart(fig)
119
-
120
- from langchain.document_loaders import DataFrameLoader
121
-
122
- loader = DataFrameLoader(df)
123
- index = VectorstoreIndexCreator(embedding=GooglePalmEmbeddings()).from_loaders([loader])
124
- # index = VectorstoreIndexCreator(
125
- # embedding=GooglePalmEmbeddings(),
126
- # text_splitter=CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)).from_loaders(loader)
127
- chain = RetrievalQA.from_chain_type(llm=llm,
128
- chain_type="stuff",
129
- retriever=index.vectorstore.as_retriever(),
130
-
131
- input_key="question")
132
-
133
- # Additional Insights
134
- st.header("In-depth Analysis")
135
- # Prepare text for PaLM
136
- chatTextStr = f"""
137
- Analyze the following stock data for patterns, trends, and insights.
138
- Provide a detailed summary of key market movements.
139
- """
140
-
141
- # Initializing the agent
142
- agent = create_pandas_dataframe_agent(llm, df[['Date', 'Open', 'High', 'Low', 'Close']].tail(10), verbose=False)
143
- answer = agent.run(chatTextStr)
144
-
145
- # # Query PaLM API
146
- # try:
147
- # response = palm.generate_text(
148
- # prompt=chatTextStr,
149
- # temperature=0.1,
150
- # max_output_tokens=500
151
- # )
152
- # st.write(response.result)
153
- # except Exception as e:
154
- # st.error(f"Error using Google PaLM API: {e}")
155
-
156
- st.markdown("""
157
- Google Gemini API analysis:
158
- {answer}
159
- """)
160
-
161
- # User Interaction
162
- st.header("Custom Analysis")
163
- start_date = st.date_input("Select start date:", value=pd.to_datetime("2024-01-01"))
164
- end_date = st.date_input("Select end date:", value=pd.to_datetime("2024-09-30"))
165
-
166
- # Ensure all dates are timezone-naive
167
- df['Date'] = pd.to_datetime(df['Date']).dt.tz_localize(None)
168
- start_date = pd.to_datetime(start_date).tz_localize(None)
169
- end_date = pd.to_datetime(end_date).tz_localize(None)
170
-
171
- # Filter the DataFrame based on the date range
172
- filtered_df = df[(df['Date'] >= start_date) & (df['Date'] <= end_date)]
173
-
174
- st.write(filtered_df)
 
1
+ import streamlit as st
2
+ import yfinance as yf
3
+ import pandas as pd
4
+ import plotly.graph_objs as go
5
+ import numpy as np
6
+ from plotly.subplots import make_subplots
7
+ import os
8
+
9
+ from langchain_openai import ChatOpenAI
10
+
11
+
12
+ isPswdValid = True # Set to True to temporarily disable password checking
13
+ OPEN_ROUTER_KEY = st.secrets["OPEN_ROUTER_KEY"]
14
+ OPEN_ROUTER_MODEL = "meta-llama/llama-3.1-70b-instruct:free"
15
+
16
+ try:
17
+ pswdVal = st.query_params()['pwd'][0]
18
+ if pswdVal==st.secrets["PSWD"]:
19
+ isPswdValid = True
20
+ except:
21
+ pass
22
+
23
+ if not isPswdValid:
24
+ st.write("Invalid Password")
25
+ else:
26
+ # Initialize language model
27
+ llm = ChatOpenAI(model=OPEN_ROUTER_MODEL, temperature=0.1, openai_api_key=OPEN_ROUTER_KEY, openai_api_base="https://openrouter.ai/api/v1")
28
+
29
+ # Set the Streamlit app title and icon
30
+ st.set_page_config(page_title="Stock Analysis", page_icon="📈")
31
+
32
+ # Create a Streamlit sidebar for user input
33
+ st.sidebar.title("Stock Analysis")
34
+ ticker_symbol = st.sidebar.text_input("Enter Stock Ticker Symbol:", value='AAPL')
35
+ start_date = st.sidebar.date_input("Start Date", pd.to_datetime('2024-01-01'))
36
+ end_date = st.sidebar.date_input("End Date", pd.to_datetime('2024-10-01'))
37
+
38
+ # Fetch stock data from Yahoo Finance
39
+ try:
40
+ stock_data = yf.download(ticker_symbol, start=start_date, end=end_date)
41
+ except Exception as e:
42
+ st.error("Error fetching stock data. Please check the ticker symbol and date range.")
43
+ df = stock_data
44
+ df.reset_index(inplace=True) # Reset index to ensure 'Date' becomes a column
45
+
46
+ # Technical Indicators
47
+ st.header("Stock Price Chart")
48
+
49
+ # Create figure with secondary y-axis
50
+ fig = make_subplots(specs=[[{"secondary_y": True}]])
51
+
52
+ # include candlestick with rangeselector
53
+ fig.add_trace(go.Candlestick(x=df['Date'], # Except date, query all other data using Symbol
54
+ open=df['Open'][ticker_symbol], high=df['High'][ticker_symbol],
55
+ low=df['Low'][ticker_symbol], close=df['Close'][ticker_symbol]),
56
+ secondary_y=True)
57
+
58
+ # include a go.Bar trace for volumes
59
+ fig.add_trace(go.Bar(x=df['Date'], y=df['Volume'][ticker_symbol]),
60
+ secondary_y=False)
61
+
62
+ fig.layout.yaxis2.showgrid=False
63
+ st.plotly_chart(fig)
64
+
65
+ # Technical Indicators
66
+ st.header("Technical Indicators")
67
+
68
+ # Moving Averages
69
+ st.subheader("Moving Averages")
70
+ df['SMA_20'] = df['Close'][ticker_symbol].rolling(window=20).mean()
71
+ df['SMA_50'] = df['Close'][ticker_symbol].rolling(window=50).mean()
72
+ fig = go.Figure()
73
+ fig.add_trace(go.Scatter(x=df['Date'], y=df['Close'][ticker_symbol], mode='lines', name='Close Price'))
74
+ fig.add_trace(go.Scatter(x=df['Date'], y=df['SMA_20'], mode='lines', name='20-Day SMA'))
75
+ fig.add_trace(go.Scatter(x=df['Date'], y=df['SMA_50'], mode='lines', name='50-Day SMA'))
76
+ fig.update_layout(title="Moving Averages", xaxis_title="Date", yaxis_title="Price (USD)")
77
+ st.plotly_chart(fig)
78
+
79
+ # RSI (Manual Calculation)
80
+ st.subheader("Relative Strength Index (RSI)")
81
+ window_length = 14
82
+
83
+ # Calculate the daily price changes
84
+ delta = df['Close'][ticker_symbol].diff()
85
+
86
+ # Separate gains and losses
87
+ gain = delta.where(delta > 0, 0)
88
+ loss = -delta.where(delta < 0, 0)
89
+
90
+ # Calculate the average gain and average loss
91
+ avg_gain = gain.rolling(window=window_length, min_periods=1).mean()
92
+ avg_loss = loss.rolling(window=window_length, min_periods=1).mean()
93
+
94
+ # Calculate the RSI
95
+ rs = avg_gain / avg_loss
96
+ df['RSI'] = 100 - (100 / (1 + rs))
97
+
98
+ fig = go.Figure()
99
+ fig.add_trace(go.Scatter(x=df['Date'], y=df['RSI'], mode='lines', name='RSI'))
100
+ fig.add_hline(y=70, line_dash="dash", line_color="red", annotation_text="Overbought")
101
+ fig.add_hline(y=30, line_dash="dash", line_color="green", annotation_text="Oversold")
102
+ fig.update_layout(title="RSI Indicator", xaxis_title="Date", yaxis_title="RSI")
103
+ st.plotly_chart(fig)
104
+
105
+ # Volume Analysis
106
+ st.subheader("Volume Analysis")
107
+ fig = go.Figure()
108
+ fig.add_trace(go.Bar(x=df['Date'], y=df['Volume'][ticker_symbol], name='Volume'))
109
+ fig.update_layout(title="Volume Analysis", xaxis_title="Date", yaxis_title="Volume")
110
+ st.plotly_chart(fig)
111
+
112
+ # Additional Insights
113
+ st.header("In-depth Analysis")
114
+ # Prepare text for PaLM
115
+ chatTextStr = f"""
116
+ Analyze the following stock data for patterns, trends, and insights.
117
+ Provide a detailed summary of key market movements.
118
+ """
119
+
120
+ answer = llm.predict(f'''
121
+ I have yfinance data below on {ticker_symbol} symbol:
122
+
123
+ {str(df[['Date', 'Open', 'High', 'Low', 'Close']].tail(30))}
124
+
125
+ {chatTextStr}
126
+ ''')
127
+ st.write(answer)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
requirements.txt CHANGED
@@ -1,7 +1,4 @@
1
- streamlit
2
- yfinance
3
- pandas
4
- plotly
5
- google-generativeai
6
- langchain==0.0.310
7
- chromadb==0.4.14
 
1
+ yfinance
2
+ pandas
3
+ plotly
4
+ langchain_openai==0.2.9