Spaces:
Sleeping
Sleeping
File size: 5,075 Bytes
ec53291 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | import gradio as gr
import pandas as pd
import requests
import random
import plotly.graph_objects as go
from datetime import datetime
# -----------------------------
# Fetch BTC Data via CoinGecko
# -----------------------------
def fetch_btc_data():
try:
url = "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=50"
res = requests.get(url, timeout=10)
data = res.json()
prices = data['prices'] # list of [timestamp, price]
df = pd.DataFrame(prices, columns=['time', 'close'])
df['time'] = pd.to_datetime(df['time'], unit='ms')
return df
except:
# fallback if API fails
return pd.DataFrame({'time': [datetime.now()], 'close': [0]})
# -----------------------------
# Simulated LSTM Prediction
# -----------------------------
def simulate_lstm_prediction(df):
current_price = df.iloc[-1]['close']
momentum = (df.iloc[-1]['close'] - df.iloc[-5]['close']) / df.iloc[-5]['close']
variance = (random.random() - 0.5) * 0.03
pred_price = current_price * (1 + (momentum * 0.4) + variance)
trend = "HIGH" if pred_price > current_price else "LOW"
confidence = random.uniform(0.7, 0.95)
reasons = [
"Local LSTM weights detected a hidden bullish divergence in the volume-price vector.",
"Sequence analysis indicates the vanishing gradient problem is minimized for this 30-day window.",
"Neural pattern matching suggests a 68% correlation with previous historical breakout cycles.",
"Recursive hidden states are currently favoring a consolidation phase."
]
return random.choice(reasons), f"${pred_price:,.2f}", f"{trend} ({int(confidence*100)}%)"
# -----------------------------
# Plot BTC Price Chart
# -----------------------------
def create_plot(df):
fig = go.Figure()
fig.add_trace(go.Scatter(
x=df['time'],
y=df['close'],
mode='lines',
name='BTC Price',
line=dict(color='#3b82f6', width=4),
fill='tozeroy',
fillcolor='rgba(59, 130, 246, 0.1)'
))
fig.update_layout(
template="plotly_dark",
paper_bgcolor='rgba(0,0,0,0)',
plot_bgcolor='rgba(0,0,0,0)',
margin=dict(l=0, r=0, t=0, b=0),
height=400,
xaxis=dict(showgrid=False),
yaxis=dict(showgrid=True, gridcolor='rgba(255,255,255,0.05)')
)
return fig
# -----------------------------
# Main Dashboard Logic
# -----------------------------
def run_dashboard():
df = fetch_btc_data()
if df.empty or df['close'].iloc[-1] == 0:
plot = go.Figure()
plot.update_layout(template="plotly_dark")
current_price = "Data not available"
price = "N/A"
trend = "N/A"
reasoning = "Failed to fetch BTC data. Try again later."
return plot, current_price, price, trend, reasoning
reasoning, price, trend = simulate_lstm_prediction(df)
plot = create_plot(df)
current_price = f"${df.iloc[-1]['close']:,.2f}"
return plot, str(current_price), str(price), str(trend), str(reasoning)
# -----------------------------
# Custom CSS
# -----------------------------
custom_css = """
.gradio-container { background-color: #020617 !important; color: white !important; }
.gr-button-primary { background: linear-gradient(90deg, #2563eb, #4f46e5) !important; border: none !important; }
"""
# -----------------------------
# Gradio UI
# -----------------------------
with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue"), css=custom_css) as demo:
gr.HTML("""
<div style="text-align: center; padding: 40px 20px;">
<div style="display: inline-block; padding: 10px; background: #f59e0b; border-radius: 12px; margin-bottom: 15px; color: #020617;">
<i class="fa fa-bitcoin" style="font-size: 24px;"></i>
</div>
<h1 style="font-weight: 900; font-size: 3rem; margin-bottom: 0; letter-spacing: -2px; color: white;">BTC PREDICT</h1>
<p style="color: #f59e0b; font-weight: 900; text-transform: uppercase; font-size: 0.7rem; letter-spacing: 3px; margin-top: 5px;">Built By Nadish • LSTM Neural Engine</p>
</div>
""")
with gr.Row():
with gr.Column(scale=1):
price_display = gr.Label(label="Current Market Price")
with gr.Column(scale=1):
pred_display = gr.Label(label="AI Forecast Target")
with gr.Column(scale=1):
trend_display = gr.Label(label="Signal Direction")
chart = gr.Plot(label="Market Trend Visualizer")
with gr.Column():
analysis = gr.Textbox(label="LSTM Inference Logic (Local Computation)", lines=3)
predict_btn = gr.Button("INITIALIZE NEURAL INFERENCE", variant="primary", size="lg")
predict_btn.click(
fn=run_dashboard,
outputs=[chart, price_display, pred_display, trend_display, analysis]
)
# -----------------------------
# Launch App
# -----------------------------
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
|