Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Alpha Vantage API Tool #14332

Merged
merged 29 commits into from
Mar 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
1a301b0
feat: added function to make request to search endpoint in Alphavanta…
anshaneel Nov 28, 2023
e9f1b8b
fix: fixed bug in api call for symbol search
anshaneel Nov 28, 2023
52fa4b6
feat: immplemented function to get news and sentiment for an asset us…
anshaneel Nov 28, 2023
43e6ec0
Merge pull request #2 from adam-badar/Search-Endpoint
anshaneel Nov 29, 2023
f2e3b65
feat: :sparkles: added time_series_daily method
adam-badar Nov 28, 2023
aa93c52
docs: :bulb: updated comment for time_series_daily method
adam-badar Nov 28, 2023
49e248c
feat: :sparkles: added method to get quote endpoint
adam-badar Nov 28, 2023
ff0dd22
feat: :sparkles: added time_series_weekly method
adam-badar Nov 28, 2023
6a7fbd7
feat: added function to fetch Top Gainers, Losers, and Most Active Ti…
anshaneel Nov 28, 2023
00a2f7a
feat: added function to make request to search endpoint in Alphavanta…
anshaneel Nov 28, 2023
a0483ce
fix: fixed bug in api call for symbol search
anshaneel Nov 28, 2023
50db214
feat: immplemented function to get news and sentiment for an asset us…
anshaneel Nov 28, 2023
7674326
feat: :sparkles: added time_series_daily method
adam-badar Nov 28, 2023
b75782b
docs: :bulb: updated comment for time_series_daily method
adam-badar Nov 28, 2023
9f68e8e
feat: :sparkles: added method to get quote endpoint
adam-badar Nov 28, 2023
c989d40
feat: :sparkles: added time_series_weekly method
adam-badar Nov 28, 2023
5a3a2a0
feat: added function to fetch Top Gainers, Losers, and Most Active Ti…
anshaneel Nov 28, 2023
d81e145
docs: :memo: added documentation for all the functions
adam-badar Nov 29, 2023
cc2d03c
test: :white_check_mark: Updated the documentation, and tested the ju…
adam-badar Nov 30, 2023
697e879
feat: added integration tests for each function
anshaneel Dec 3, 2023
a1cf802
Merge pull request #8 from adam-badar/alphavantage-docs
anshaneel Dec 3, 2023
a95c2db
Merge pull request #9 from adam-badar/working
anshaneel Dec 5, 2023
aa341a5
Fixed line too long errors in linting checks
adam-badar Dec 7, 2023
22da37d
cr
hwchase17 Jan 3, 2024
d0108bf
fmt
baskaryan Mar 30, 2024
7578479
Merge branch 'master' into adam-badar/master
baskaryan Mar 30, 2024
85853d1
fmt
baskaryan Mar 30, 2024
e7d8509
fmt
baskaryan Mar 30, 2024
ec6d85d
fmt
baskaryan Mar 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
190 changes: 166 additions & 24 deletions docs/docs/integrations/tools/alpha_vantage.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,7 @@
"metadata": {
"id": "34bb5968"
},
"outputs": [
{
"name": "stdin",
"output_type": "stream",
"text": [
" ········\n"
]
}
],
"outputs": [],
"source": [
"import getpass\n",
"import os\n",
Expand All @@ -56,14 +48,172 @@
"metadata": {
"id": "84b8f773"
},
"outputs": [
{
"data": {
"text/plain": [
"{'Realtime Currency Exchange Rate': {'1. From_Currency Code': 'USD',\n",
" '2. From_Currency Name': 'United States Dollar',\n",
" '3. To_Currency Code': 'JPY',\n",
" '4. To_Currency Name': 'Japanese Yen',\n",
" '5. Exchange Rate': '148.19900000',\n",
" '6. Last Refreshed': '2023-11-30 21:43:02',\n",
" '7. Time Zone': 'UTC',\n",
" '8. Bid Price': '148.19590000',\n",
" '9. Ask Price': '148.20420000'}}"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alpha_vantage = AlphaVantageAPIWrapper()\n",
"alpha_vantage._get_exchange_rate(\"USD\", \"JPY\")"
]
},
{
"cell_type": "markdown",
"id": "8309d09d",
"metadata": {},
"source": [
"The `_get_time_series_daily` method returns the date, daily open, daily high, daily low, daily close, and daily volume of the global equity specified, covering the 100 latest data points."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "811ae207",
"metadata": {},
"outputs": [],
"source": [
"alpha_vantage._get_time_series_daily(\"IBM\")"
]
},
{
"cell_type": "markdown",
"id": "b5e46a71",
"metadata": {},
"source": [
"The `_get_time_series_weekly` method returns the last trading day of the week, weekly open, weekly high, weekly low, weekly close, and weekly volume of the global equity specified, covering 20+ years of historical data."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f0dfe35b",
"metadata": {},
"outputs": [],
"source": [
"alpha_vantage = AlphaVantageAPIWrapper()"
"alpha_vantage._get_time_series_weekly(\"IBM\")"
]
},
{
"cell_type": "markdown",
"id": "66cc06a7",
"metadata": {},
"source": [
"The `_get_quote_endpoint` method is a lightweight alternative to the time series APIs and returns the latest price and volume info for the specified symbol."
]
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 6,
"id": "98d012ef",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Global Quote': {'01. symbol': 'IBM',\n",
" '02. open': '156.9000',\n",
" '03. high': '158.6000',\n",
" '04. low': '156.8900',\n",
" '05. price': '158.5400',\n",
" '06. volume': '6640217',\n",
" '07. latest trading day': '2023-11-30',\n",
" '08. previous close': '156.4100',\n",
" '09. change': '2.1300',\n",
" '10. change percent': '1.3618%'}}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alpha_vantage._get_quote_endpoint(\"IBM\")"
]
},
{
"cell_type": "markdown",
"id": "3429ce50",
"metadata": {},
"source": [
"The `search_symbol` method returns a list of symbols and the matching company information based on the text entered."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0ccd55b0",
"metadata": {},
"outputs": [],
"source": [
"alpha_vantage.search_symbols(\"IB\")"
]
},
{
"cell_type": "markdown",
"id": "96e1fd97",
"metadata": {},
"source": [
"The `_get_market_news_sentiment` method returns live and historical market news sentiment for a given asset."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "42995acb",
"metadata": {},
"outputs": [],
"source": [
"alpha_vantage._get_market_news_sentiment(\"IBM\")"
]
},
{
"cell_type": "markdown",
"id": "2fdbd888",
"metadata": {},
"source": [
"The `_get_top_gainers_losers` method returns the top 20 gainers, losers and most active stocks in the US market."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "61c3cb1c",
"metadata": {},
"outputs": [],
"source": [
"alpha_vantage._get_top_gainers_losers()"
]
},
{
"cell_type": "markdown",
"id": "3d1cf3d8",
"metadata": {},
"source": [
"The `run` method of the wrapper takes the following parameters: from_currency, to_currency. \n",
"\n",
"It Gets the currency exchange rates for the given currency pair."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "068991a6",
"metadata": {
"id": "068991a6",
Expand All @@ -77,29 +227,21 @@
" '2. From_Currency Name': 'United States Dollar',\n",
" '3. To_Currency Code': 'JPY',\n",
" '4. To_Currency Name': 'Japanese Yen',\n",
" '5. Exchange Rate': '144.93000000',\n",
" '6. Last Refreshed': '2023-08-11 21:31:01',\n",
" '5. Exchange Rate': '148.19900000',\n",
" '6. Last Refreshed': '2023-11-30 21:43:02',\n",
" '7. Time Zone': 'UTC',\n",
" '8. Bid Price': '144.92600000',\n",
" '9. Ask Price': '144.93400000'}"
" '8. Bid Price': '148.19590000',\n",
" '9. Ask Price': '148.20420000'}"
]
},
"execution_count": 5,
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alpha_vantage.run(\"USD\", \"JPY\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "84fc2b66-c08f-4cd3-ae13-494c54789c09",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
Expand Down
111 changes: 111 additions & 0 deletions libs/community/langchain_community/utilities/alpha_vantage.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,117 @@ def validate_environment(cls, values: Dict) -> Dict:
)
return values

def search_symbols(self, keywords: str) -> Dict[str, Any]:
"""Make a request to the AlphaVantage API to search for symbols."""
response = requests.get(
"https://www.alphavantage.co/query/",
params={
"function": "SYMBOL_SEARCH",
"keywords": keywords,
"apikey": self.alphavantage_api_key,
},
)
response.raise_for_status()
data = response.json()

if "Error Message" in data:
raise ValueError(f"API Error: {data['Error Message']}")

return data

def _get_market_news_sentiment(self, symbol: str) -> Dict[str, Any]:
"""Make a request to the AlphaVantage API to get market news sentiment for a
given symbol."""
response = requests.get(
"https://www.alphavantage.co/query/",
params={
"function": "NEWS_SENTIMENT",
"symbol": symbol,
"apikey": self.alphavantage_api_key,
},
)
response.raise_for_status()
data = response.json()

if "Error Message" in data:
raise ValueError(f"API Error: {data['Error Message']}")

return data

def _get_time_series_daily(self, symbol: str) -> Dict[str, Any]:
"""Make a request to the AlphaVantage API to get the daily time series."""
response = requests.get(
"https://www.alphavantage.co/query/",
params={
"function": "TIME_SERIES_DAILY",
"symbol": symbol,
"apikey": self.alphavantage_api_key,
},
)
response.raise_for_status()
data = response.json()

if "Error Message" in data:
raise ValueError(f"API Error: {data['Error Message']}")

return data

def _get_quote_endpoint(self, symbol: str) -> Dict[str, Any]:
"""Make a request to the AlphaVantage API to get the
latest price and volume information."""
response = requests.get(
"https://www.alphavantage.co/query/",
params={
"function": "GLOBAL_QUOTE",
"symbol": symbol,
"apikey": self.alphavantage_api_key,
},
)
response.raise_for_status()
data = response.json()

if "Error Message" in data:
raise ValueError(f"API Error: {data['Error Message']}")

return data

def _get_time_series_weekly(self, symbol: str) -> Dict[str, Any]:
"""Make a request to the AlphaVantage API
to get the Weekly Time Series."""
response = requests.get(
"https://www.alphavantage.co/query/",
params={
"function": "TIME_SERIES_WEEKLY",
"symbol": symbol,
"apikey": self.alphavantage_api_key,
},
)
response.raise_for_status()
data = response.json()

if "Error Message" in data:
raise ValueError(f"API Error: {data['Error Message']}")

return data

def _get_top_gainers_losers(self) -> Dict[str, Any]:
"""Make a request to the AlphaVantage API to get the top gainers, losers,
and most actively traded tickers in the US market."""
response = requests.get(
"https://www.alphavantage.co/query/",
params={
"function": "TOP_GAINERS_LOSERS",
"apikey": self.alphavantage_api_key,
},
)
response.raise_for_status()
data = response.json()

if "Error Message" in data:
raise ValueError(f"API Error: {data['Error Message']}")

return data

def _get_exchange_rate(
self, from_currency: str, to_currency: str
) -> Dict[str, Any]:
Expand Down
Loading
Loading