Crypto-Analyst / crypto_tools.py
menikev's picture
Upload 3 files
e8a9836 verified
from langchain.tools import tool
import requests
import pandas as pd
import numpy as np
class CryptoTools:
@tool("Get Cryptocurrency Price")
def get_crypto_price(crypto):
"""Fetches the current price of a given cryptocurrency."""
url = f"https://api.coingecko.com/api/v3/simple/price?ids={crypto}&vs_currencies=usd"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
return data[crypto]['usd']
else:
return "Error fetching price data"
@tool("Get Market Cap")
def get_market_cap(crypto):
"""Fetches the current market cap of a given cryptocurrency."""
url = f"https://api.coingecko.com/api/v3/coins/{crypto}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
return data['market_data']['market_cap']['usd']
else:
return "Error fetching market cap data"
@tool("Calculate RSI")
def calculate_rsi(crypto, period=14):
"""Calculates the Relative Strength Index (RSI) for a given cryptocurrency."""
url = f"https://api.coingecko.com/api/v3/coins/{crypto}/market_chart?vs_currency=usd&days={period}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
prices = [price[1] for price in data['prices']]
df = pd.DataFrame(prices, columns=['price'])
delta = df['price'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
rs = gain / loss
rsi = 100 - (100 / (1 + rs))
return rsi.iloc[-1]
else:
return "Error calculating RSI"
@tool("Calculate Moving Average")
def calculate_moving_average(crypto, days):
"""Calculates the moving average for a given cryptocurrency over a specified number of days."""
url = f"https://api.coingecko.com/api/v3/coins/{crypto}/market_chart?vs_currency=usd&days={days}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
prices = [price[1] for price in data['prices']]
return np.mean(prices)
else:
return "Error calculating moving average"