In this script, it uses Machine Learning in MATLAB to predict buying-decision for stock. Using real life data, it will explore how to manage time-stamped data and select the best fit machine learning model. As common being widely known, preparing data and select the significant features play big role in the accuracy of model. In this example, it uses the technical indicators of today to predict the next day stock close price.
In this example, the trading strategy is if the close price is higher 1% than the open price in the same day, then we should buy stock at the openning of the stock market and sell it at the closing of the stock market.
In this example, it demostrates how to pre-processing the data for modelling and predict the decision by the model. New data of each date will be tabulated to re-train new model and find the best model for next day prediction. Interesting?
[Note : Not advocating any particular strategy, factors or methodology]
Handling downloaded data from Yahoo Finance using the timetable object
Selecting features based on domain knowledge
Machine Learning Modeling
Automate to re-train new model to incorproate new updated data for next prediction
Predicting the buying-decision
Experience the computational speed with/without parallel computing
Product Focus :
Statistics and Machine Learning Toolbox
Parallel Computing Toolbox (Optional)
Kevin Chng (2019). MACHINE LEARNING CLASSIFICATION USED TO PREDICT STOCK (https://www.mathworks.com/matlabcentral/fileexchange/68637-machine-learning-classification-used-to-predict-stock), MATLAB Central File Exchange. Retrieved .
Is there also a Video for this example?
Unfortunately, there is an error in the code that incorrectly labels the "buy" and "Not buy" fields.
This is the logic for labeing "buy" days on Lines 121-124 (and again on Lines 133-136):
if OpenClose_2016.Open(i) < 1.01*OpenClose_2016.Close(i)
The if-statement will resolve to true even if the stock had an open to close return of 0. Indeed, the first row in your own resulttable shows a label of buy even though the stock returned 0.
The correct statement is: if OpenClose_2016.Open(i)*1.01 < OpenClose_2016.Close(i)
The larger problem with the original model is that even in-sample, the best model has a lower predictive accuracy (0.693) than if you were to predict "buy" every day (0.706). This means that the models are not learning anything at all.
Dude, great code!
I don't know if the problem is in my Matlab, but the functions "rsindex" and "movavg" aren't working correctly. The first gives the error "Too many arguments" and the second gives the error "Lead argument must be less than or equal to lag argument".
Perform data normalization before training machine learning model
1) Allow to download different stock data from Yahoo Finance
Create scripts with code, output, and formatted text in a single executable document.