File size: 3,680 Bytes
df6d484 8e507c9 dad3ac8 8e507c9 dad3ac8 8e507c9 97a4601 dad3ac8 0c6421d dad3ac8 d9a70da dad3ac8 0c6421d dad3ac8 0c6421d dad3ac8 0c6421d dad3ac8 0c6421d dad3ac8 a192521 dad3ac8 0c6421d dad3ac8 0c6421d dad3ac8 d9a70da |
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 |
import os
import pandas as pd
import numpy as np
import streamlit as st
import plotly.express as px
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from dotenv import load_dotenv
import cloudscraper
# Load environment variables
load_dotenv()
API_KEY = os.environ.get("API_KEY")
# Check if API key is available
if not API_KEY:
raise ValueError("API_KEY is not set. Please add it to your environment.")
# --- Helper Functions ---
def fetch_market_data(api_key, url):
"""Fetch market data using cloudscraper."""
headers = {
"Authorization": f"Bearer {api_key}",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}
scraper = cloudscraper.create_scraper()
response = scraper.get(url, headers=headers)
response.raise_for_status()
return response.json()
def preprocess_data(data):
"""Preprocess market data for AI analysis."""
df = pd.DataFrame(data)
if 'close_time' in df.columns:
df['close_time'] = pd.to_datetime(df['close_time'], unit='ms', errors='coerce')
return df
def train_predictive_model(df):
"""Train a simple predictive model based on historical data."""
if 'close' not in df.columns or len(df) < 10:
return None
# Prepare data for training
scaler = StandardScaler()
X = np.arange(len(df)).reshape(-1, 1) # Time indices
y = df['close'].values.reshape(-1, 1)
X_scaled = scaler.fit_transform(X)
# Train linear regression model (example; replace with advanced models)
model = LinearRegression()
model.fit(X_scaled, y)
# Predict future prices
future_indices = np.arange(len(df), len(df) + 10).reshape(-1, 1) # Next 10 time steps
future_indices_scaled = scaler.transform(future_indices)
predictions = model.predict(future_indices_scaled)
return predictions
def display_predictions(predictions):
"""Display predictions in a Streamlit chart."""
future_dates = pd.date_range(start=pd.Timestamp.now(), periods=len(predictions), freq='H')
prediction_df = pd.DataFrame({'Date': future_dates, 'Predicted Close': predictions.flatten()})
fig = px.line(prediction_df, x='Date', y='Predicted Close', title="Predicted Price Movement")
st.plotly_chart(fig)
# --- Main Application ---
def main():
st.title("AI-Driven Stock & Crypto Dashboard")
# Fetch active markets from API
url_active_markets = "https://archeanvision.com/api/signals/available"
try:
active_markets = fetch_market_data(API_KEY, url_active_markets)
market_list = [market['market'] for market in active_markets]
selected_market = st.selectbox("Select a Market", market_list)
# Fetch market data for the selected market
url_market_data = f"https://archeanvision.com/api/signals/{selected_market}/data"
market_data = fetch_market_data(API_KEY, url_market_data)
# Preprocess and display raw data
df = preprocess_data(market_data)
st.write("Market Data Overview:")
st.dataframe(df.head())
# Train predictive model and display predictions
predictions = train_predictive_model(df)
if predictions is not None:
st.write(f"Predicted price movement for {selected_market}:")
display_predictions(predictions)
else:
st.warning("Insufficient data or missing 'close' column for prediction.")
except Exception as e:
st.error(f"Error fetching or processing data: {e}")
if __name__ == "__main__":
main()
|