File size: 2,710 Bytes
3f96245
 
adbc0ad
3f96245
d7fdf9f
3f96245
dd448e5
 
 
3f96245
6296cba
3f96245
 
 
 
adbc0ad
b5416e9
 
76337a5
adbc0ad
df39da3
235c728
df39da3
 
 
 
 
 
adbc0ad
 
d7fdf9f
 
 
df39da3
d7fdf9f
3f96245
 
 
dd448e5
 
3f96245
 
dd448e5
 
 
6296cba
dd448e5
 
 
 
adbc0ad
ecb9610
adbc0ad
d7fdf9f
ecb9610
d7fdf9f
 
 
adbc0ad
 
d7fdf9f
adbc0ad
 
 
 
 
 
 
 
 
 
dd448e5
adbc0ad
 
3f96245
 
 
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
import streamlit as st
import requests
from Pandas_Market_Predictor import Pandas_Market_Predictor
import pandas as pd
from sklearn.decomposition import PCA

# Hard-coded API key for demonstration purposes
API_KEY = "QR8F9B7T6R2SWTAT"

def fetch_alpha_vantage_data(api_key):
    url = f'https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=IBM&interval=60min&apikey={api_key}'
    response = requests.get(url)
    alpha_vantage_data = response.json()
    return alpha_vantage_data

def calculate_indicators(data):
    # Convert all columns to numeric
    data = data.apply(pd.to_numeric, errors='coerce')

    # Example: Simple condition for doji and inside
    data['Doji'] = abs(data['close'] - data['open']) <= 0.01 * (data['high'] - data['low'])
    data['Inside'] = (data['high'] < data['high'].shift(1)) & (data['low'] > data['low'].shift(1))

    # Include the necessary columns from the original dataset
    data['open'] = data['open_original']
    data['high'] = data['high_original']
    data['low'] = data['low_original']

    return data

def apply_pca(data, n_components=5):
    pca = PCA(n_components=n_components)
    reduced_data = pca.fit_transform(data)
    return pd.DataFrame(reduced_data, index=data.index, columns=[f'component_{i+1}' for i in range(n_components)])

def main():
    st.title("Stock Trend Predictor")

    # Use the hard-coded API key
    api_key = API_KEY

    # Fetch Alpha Vantage data
    alpha_vantage_data = fetch_alpha_vantage_data(api_key)

    # Extract relevant data from Alpha Vantage response
    alpha_vantage_time_series = alpha_vantage_data.get('Time Series (60min)', {})
    df = pd.DataFrame(alpha_vantage_time_series).T
    df.index = pd.to_datetime(df.index)
    df = df.dropna(axis=0)

    # Rename columns
    df = df.rename(columns={'1. open': 'open_original', '2. high': 'high_original', '3. low': 'low_original', '4. close': 'Close', '5. volume': 'volume'})

    # Apply PCA for dimensionality reduction
    df_reduced = apply_pca(df[['open_original', 'high_original', 'low_original', 'Close', 'volume']])

    # Calculate indicators on reduced data
    df_reduced = calculate_indicators(df_reduced)

    # Create predictor
    my_market_predictor = Pandas_Market_Predictor(df_reduced)

    # Predict Trend
    indicators = ["Doji", "Inside"]
    trend = my_market_predictor.Trend_Detection(indicators, 10)

    # Display results
    st.subheader("Predicted Trend:")
    st.write("Buy Trend :", trend['BUY'])
    st.write("Sell Trend :", trend['SELL'])
    st.write(f"Standard Deviation Percentage: {my_market_predictor.PERCENT_STD}%")

    # Delete the DataFrame to release memory
    del df

if __name__ == "__main__":
    main()