|
import streamlit as st |
|
import os |
|
import getpass |
|
from langchain import PromptTemplate |
|
from langchain import hub |
|
from langchain.docstore.document import Document |
|
from langchain.document_loaders import WebBaseLoader |
|
from langchain.schema import StrOutputParser |
|
from langchain.schema.prompt_template import format_document |
|
from langchain.schema.runnable import RunnablePassthrough |
|
from langchain.vectorstores import Chroma |
|
import google.generativeai as genai |
|
from langchain_google_genai import GoogleGenerativeAIEmbeddings |
|
from langchain_google_genai import ChatGoogleGenerativeAI |
|
from langchain.chains.llm import LLMChain |
|
from langchain.chains import StuffDocumentsChain |
|
from langchain_core.messages import HumanMessage |
|
|
|
GOOGLE_API_KEY=os.environ['GOOGLE_API_KEY'] |
|
|
|
st.title('Stock Market Insights') |
|
st.sidebar.info("Know more about [NSE Tickers](https://www.google.com/search?q=nse+tickers+list&sca_esv=a6c39f4d03c5324c&sca_upv=1&rlz=1C1GCEB_enIN1011IN1011&sxsrf=ADLYWILQPbew-0SrvUUWpI8Y29_uOOgbvA%3A1716470016765&ei=AEFPZp-zLvzHp84P_ZWtuA0&oq=NSE+Tickers+&gs_lp=Egxnd3Mtd2l6LXNlcnAiDE5TRSBUaWNrZXJzICoCCAAyBRAAGIAEMggQABgWGAoYHjIGEAAYFhgeMgYQABgWGB4yBhAAGBYYHjIGEAAYFhgeMgYQABgWGB4yBhAAGBYYHjILEAAYgAQYhgMYigUyCxAAGIAEGIYDGIoFSIIbUL0PWL0PcAF4AZABAJgB8QKgAfECqgEDMy0xuAEByAEA-AEBmAICoAKKA8ICChAAGLADGNYEGEeYAwCIBgGQBgiSBwUxLjMtMaAHtQU&sclient=gws-wiz-serp)") |
|
|
|
ticker_user = st.text_input("Enter Ticker for NSE Stocks","") |
|
|
|
gemini_embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001") |
|
|
|
llm = ChatGoogleGenerativeAI(model="gemini-1.5-pro-latest",google_api_key = GOOGLE_API_KEY) |
|
llm_vis = ChatGoogleGenerativeAI(model="gemini-pro-vision",google_api_key = GOOGLE_API_KEY) |
|
if ticker_user!="": |
|
url1 = f"https://www.google.com/finance/quote/{ticker_user}:NSE?hl=en" |
|
url2 = f"https://in.tradingview.com/symbols/NSE-{ticker_user}/" |
|
|
|
|
|
loader = WebBaseLoader([url1,url2]) |
|
docs = loader.load() |
|
|
|
|
|
st.divider() |
|
|
|
|
|
|
|
|
|
llm_prompt_template = """You are an expert Stock Market Trader specializing in stock market insights derived from fundamental analysis, analytical trends, profit-based evaluations, and detailed company financials. Using your expertise, please analyze the stock based on the provided context below. |
|
|
|
Context: |
|
{context} |
|
|
|
Task: |
|
Summarize the stock based on its historical and current data. |
|
Evaluate the stock on the following parameters: |
|
1. Company Fundamentals: Assess the stock's intrinsic value, growth potential, and financial health. |
|
2. Current & Future Price Trends: Analyze historical price movements and current price trends. |
|
3. News and Sentiment: Review recent news articles, press releases, and social media sentiment. |
|
4. Red Flags: Identify any potential risks or warning signs. |
|
5. Provide a rating for the stock on a scale of 1 to 10. |
|
6. Advise if the stock is a good buy for the next 2 weeks. |
|
7. Suggest at what price we need to buy and hold or sell |
|
""" |
|
|
|
st.sidebar.subheader('Prompt') |
|
user_prompt = st.sidebar.text_area("Enter Prompt",llm_prompt_template) |
|
|
|
llm_prompt = PromptTemplate.from_template(user_prompt) |
|
|
|
llm_chain = LLMChain(llm=llm,prompt=llm_prompt) |
|
stuff_chain = StuffDocumentsChain(llm_chain=llm_chain,document_variable_name="context") |
|
|
|
|
|
res = stuff_chain.invoke(docs) |
|
|
|
import requests |
|
|
|
url = "https://api.chart-img.com/v2/tradingview/advanced-chart" |
|
api_key = "l0iUFRSeqC9z7nDPTd1hnafPh2RrdcEy6rl6tNqV" |
|
headers = { |
|
"x-api-key": api_key, |
|
"content-type": "application/json" |
|
} |
|
data = { |
|
"height": 400, |
|
"theme": "light", |
|
"interval": "1D", |
|
"session": "extended", |
|
"symbol": f"NSE:{ticker_user}" |
|
} |
|
|
|
response = requests.post(url, headers=headers, json=data) |
|
|
|
if response.status_code == 200: |
|
with open("chart_t1.jpg", "wb") as f: |
|
f.write(response.content) |
|
|
|
st.image("chart_t1.jpg", caption='') |
|
|
|
else: |
|
st.write(f"Failed to retrieve image. Status code: {response.status_code}") |
|
st.write("Response:", response.text) |
|
|
|
|
|
hmessage = HumanMessage( |
|
content=[ |
|
{ |
|
"type": "text", |
|
"text": "Based on the chart, could you predict the movement and suggest a BUY and SELL Strategy", |
|
}, |
|
{"type": "image_url", "image_url": "chart_t1.jpg"}, |
|
] |
|
) |
|
message = llm_vis.invoke([hmessage]) |
|
|
|
st.write(message.content) |
|
st.write(res["output_text"]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|