missbaj's picture
app.py
c4253c7 verified
raw
history blame
3.45 kB
import requests
import yfinance as yf
import pandas_ta as ta
import cryptocompare
from tradingview_ta import TA_Handler, Interval
import gradio as gr
def get_coin_gecko_price():
try:
response = requests.get("https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd")
data = response.json()
return data['bitcoin']['usd']
except Exception as e:
return f"Error fetching CoinGecko data: {str(e)}"
def get_yfinance_price():
try:
btc_data = yf.Ticker("BTC-USD")
current_price = btc_data.history(period="1d")['Close'][0]
return current_price
except Exception as e:
return f"Error fetching Yahoo Finance data: {str(e)}"
def get_cryptocompare_price():
try:
cryptocompare_price = cryptocompare.get_price('BTC', currency='USD')
return cryptocompare_price['BTC']['USD']
except Exception as e:
return f"Error fetching CryptoCompare data: {str(e)}"
def get_tradingview_analysis():
try:
handler = TA_Handler(
symbol="BTCUSD",
screener="crypto",
exchange="BINANCE",
interval=Interval.INTERVAL_1_HOUR
)
analysis = handler.get_analysis()
return analysis.summary["RECOMMENDATION"]
except Exception as e:
return f"Error fetching TradingView data: {str(e)}"
def calculate_technical_indicators():
try:
btc_data = yf.download("BTC-USD", period="30d", interval="1h")
close_prices = btc_data['Close']
ma_50 = ta.sma(close_prices, length=50)
ma_200 = ta.sma(close_prices, length=200)
rsi = ta.rsi(close_prices, length=14)
macd = ta.macd(close_prices)
return {
"MA 50": ma_50.iloc[-1],
"MA 200": ma_200.iloc[-1],
"RSI": rsi.iloc[-1],
"MACD": macd['MACD_12_26_9'].iloc[-1],
"Signal Line": macd['MACDs_12_26_9'].iloc[-1]
}
except Exception as e:
return f"Error calculating technical indicators: {str(e)}"
def analyze_btc(prompt):
prompt_lower = prompt.lower()
if "price" in prompt_lower:
price_yf = get_yfinance_price()
price_cg = get_coin_gecko_price()
price_cryptocompare = get_cryptocompare_price()
return (f"BTC Price (Yahoo Finance): ${price_yf:.2f}\n"
f"BTC Price (CoinGecko): ${price_cg:.2f}\n"
f"BTC Price (CryptoCompare): ${price_cryptocompare:.2f}")
elif "rsi" in prompt_lower or "macd" in prompt_lower or "moving average" in prompt_lower or "ma" in prompt_lower:
indicators = calculate_technical_indicators()
return (f"RSI: {indicators['RSI']:.2f}\n"
f"MACD: {indicators['MACD']:.2f}, Signal Line: {indicators['Signal Line']:.2f}\n"
f"MA 50: {indicators['MA 50']:.2f}, MA 200: {indicators['MA 200']:.2f}")
elif "trend" in prompt_lower:
trend_recommendation = get_tradingview_analysis()
return f"BTC Trend (TradingView): {trend_recommendation}"
else:
return "I'm not sure what you're asking. Try asking about price, RSI, MACD, or trend."
interface = gr.Interface(
fn=analyze_btc,
inputs="text",
outputs="text",
title="BTC Real-Time Analyzer with Multiple Data Sources",
description="Ask questions about BTC's real-time data (from CoinGecko, Yahoo Finance, CryptoCompare, TradingView)"
)
interface.launch()