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()