Untitled

 avatar
unknown
plain_text
2 years ago
2.9 kB
4
Indexable

import tkinter as tk
import numpy as np
import pandas as pd
import time
import pickle
import talib
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectFromModel
from sklearn.metrics import r2_score, mean_absolute_error
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold

# Load the stock data
def load_data():
    global data, features, labels, features_scaled, features_selected, scaler, model, sfm
    data = pd.read_csv("stock_data.csv")
    data["macd"], data["macd_signal"], data["macd_hist"] = talib.MACD(data["Close"], fastperiod=12, slowperiod=26, signalperiod=9)
    data["rsi"] = talib.RSI(data["Close"], timeperiod=14)
    data["upper"], data["middle"], data["lower"] = talib.BBANDS(data["Close"], timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)
    features = data.iloc[:, :-1].values
    labels = data.iloc[:, -1].values
    scaler = StandardScaler()
    features_scaled = scaler.fit_transform(features)
    model = RandomForestRegressor(n_estimators=100)
    model.fit(features_scaled, labels)
    sfm = SelectFromModel(model, threshold=0.05)
    features_selected = sfm.fit_transform(features_scaled, labels)

# Train the machine learning model
def train_model():
    global train_data, test_data, train_labels, test_labels, regressor, grid_search
    train_data, test_data, train_labels, test_labels = train_test_split(features_selected, labels, test_size=0.2, random_state=0)
    kfold = KFold(n_splits=10, random_state=0)
    regressor = GradientBoostingRegressor(random_state=0)
    param_grid = {'n_estimators': [100, 200, 300],
                  'max_depth': [1, 5, 10]}
    grid_search = GridSearchCV(regressor, param_grid, cv=kfold, scoring='neg_mean_absolute_error')
    grid_search.fit(train_data, train_labels)

# Make predictions on the test data
def make_predictions():
    global predictions
    predictions = grid_search.predict(test_data)

# Display the accuracy of the predictions
def display_results():
    r2 = r2_score(test_labels, predictions)
    mae = mean_absolute_error(test_labels, predictions)
    results_label.config(text="R^2 Score: {}\nMean Absolute Error: {}".format(r2, mae))

root = tk.Tk()
load_data_button = tk.Button(root, text="Load Data", command=load_data)
load_data_button.pack()
train_model_button = tk.Button(root, text="Train Model", command=train_model)
train_model_button.pack()
make_predictions_button = tk.Button(root, text="Make Predictions", command=make_predictions)
make_predictions_button.pack()
results_label = tk.Label(root, text="")
results_label.pack()
display_results_button = tk.Button(root, text="Display Results", command=display_results)
display_results_button.pack()
root.mainloop()
Editor is loading...