avatarghoulam bensaha shared you an app

use the code to build dashboard install the necessery lineries (import streamlit as st import pandas as pd import numpy as np import yfinance as yf from darts import TimeSeries from darts.dataprocessing.transformers import Scaler from darts.models import NBEATSModel from darts.metrics import mae import random import pygwalker as pyg import ta # Function to fetch data from Yahoo Finance def fetch_data(ticker, start_date, end_date): data = yf.download(ticker, start=start_date, end=end_date) return data['Close'] # Function to handle data shape def handle_data_shape(df): start_date = df.index.min() end_date = df.index.max() full_index = pd.bdate_range(start=start_date, end=end_date) df = df.reindex(full_index) df = df.ffill() df = df.bfill() df = df.interpolate() return df # Streamlit app st.title("Financial Data Analysis with NBEATS") # Fetch data start_date = '2017-01-01' end_date = '2024-07-15' tickers = ['GC=F', 'SI=F', '^GSPC', 'EURUSD=X', 'GBPUSD=X', 'USDJPY=X', 'USDCHF=X', 'AUDUSD=X', 'USDCAD=X', 'NZDUSD=X'] columns = ['XAUUSD', 'XAGUSD', 'SP500', 'EURUSD', 'GBPUSD', 'USDJPY', 'USDCHF', 'AUDUSD', 'USDCAD', 'NZDUSD'] df = pd.DataFrame() for ticker, column in zip(tickers, columns): data = fetch_data(ticker, start_date, end_date) df[column] = data df = handle_data_shape(df) # Add features df['GOLD_SILVER_RATIO'] = df['XAUUSD'] / df['XAGUSD'] df['SMA_20'] = ta.trend.sma_indicator(df['XAUUSD'], window=20) df['RSI'] = ta.momentum.rsi(df['XAUUSD'], window=14) df['Day_of_Week'] = df.index.dayofweek df['Month'] = df.index.month df['Quarter'] = df.index.quarter # Check stationarity df['XAUUSD_diff'] = df['XAUUSD'].diff().fillna(0) # Display data st.subheader("Financial Data with Additional Features") st.dataframe(df.head()) scaler = Scaler() df_scaled = TimeSeries.from_dataframe(df, fill_missing_dates=True, freq='B') df_scaled = scaler.fit_transform(df_scaled) train_size = int(len(df_scaled) * 0.8) train, val = df_scaled[:train_size], df_scaled[train_size:] # Hyperparameter tuning with random search def random_search(train, val, n_iterations=10): best_mae = float('inf') best_params = {} for _ in range(n_iterations): params = { 'input_chunk_length': random.choice([20, 30, 40, 50]), 'output_chunk_length': random.choice([5, 10, 15]), 'num_stacks': random.choice([2, 3, 4]), 'num_blocks': random.choice([1, 2]), 'num_layers': random.choice([2, 3, 4]), 'layer_widths': random.choice([256, 512, 1024]), 'dropout': random.uniform(0, 0.2), 'batch_size': random.choice([16, 32, 64]), 'n_epochs': 30, # Set a reasonable number for tuning 'learning_rate': random.choice([1e-4, 1e-3, 1e-2]) } model = NBEATSModel( input_chunk_length=params['input_chunk_length'], output_chunk_length=params['output_chunk_length'], num_stacks=params['num_stacks'], num_blocks=params['num_blocks'], num_layers=params['num_layers'], layer_widths=params['layer_widths'], dropout=params['dropout'], batch_size=params['batch_size'], n_epochs=params['n_epochs'], random_state=42, optimizer_kwargs={'lr': params['learning_rate']} ) model.fit(train, verbose=False) predictions = model.predict(n=len(val), series=train) mae_score = mae(val, predictions) if mae_score < best_mae: best_mae = mae_score best_params = params return best_params, best_mae # Perform random search if st.button("Run Hyperparameter Tuning"): best_params, best_mae = random_search(train, val, n_iterations=20) st.write("Best hyperparameters:", best_params) st.write("Best MAE:", best_mae) # Train final model with best hyperparameters if st.button("Train Final Model"): final_model = NBEATSModel( input_chunk_length=best_params['input_chunk_length'], output_chunk_length=best_params['output_chunk_length'], num_stacks=best_params['num_stacks'], num_blocks=best_params['num_blocks'], num_layers=best_params['num_layers'], layer_widths=best_params['layer_widths'], dropout=best_params['dropout'], batch_size=best_params['batch_size'], n_epochs=50, # Final training with more epochs random_state=42, optimizer_kwargs={'lr': best_params['learning_rate']} ) final_model.fit(train, verbose=True) st.write("Final model training complete.") # Visualize data with pygwalker st.subheader("Data Visualization") pyg.walk(df)

Please login to use this app.