Untitled

 avatar
unknown
plain_text
3 years ago
2.9 kB
13
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...