Open In App

Predicting Stock Price Direction using Support Vector Machines

We are going to implement an End-to-End project using Support Vector Machines to live Trade For us. You Probably must have Heard of the term stock market which is known to have made the lives of thousands and to have destroyed the lives of millions. If you are not familiar with the stock market you can surf some basic Stuff about markets.

Tools and Technologies Used : 

Step by Step Implementation

Step 1: Import the libraries




# Machine learning
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
  
# For data manipulation
import pandas as pd
import numpy as np
  
# To plot
import matplotlib.pyplot as plt
plt.style.use('seaborn-darkgrid')
  
# To ignore warnings
import warnings
warnings.filterwarnings("ignore")

Step 2: Read Stock  data

We will Read the Stock Data Downloaded From Yahoo Finance Website. The Data Is stored in OHLC(Open, High, Low, Close)  format in a CSV file. To read a CSV file, you can use the read_csv() method of pandas.



Syntax : 

pd.read_csv(filename, index_col)

Note: We have downloaded the past 1 year data of Reliance Industries Trading In NSE from Yahoo Finance Website.



File Used:




# Read the csv file using read_csv 
# method of pandas
df = pd.read_csv('RELIANCE.csv')
df

Output:

Step 3: Data Preparation 

The data needed to be processed before use such that the date column should act as an index to do that 




# Changes The Date column as index columns
df.index = pd.to_datetime(df['Date'])
df
  
# drop The original date column
df = df.drop(['Date'], axis='columns')
df

Output:

Step 4: Define the explanatory variables

Explanatory or independent variables are used to predict the value response variable. The X is a dataset that holds the variables which are used for prediction. The X consists of variables such as ‘Open – Close’ and ‘High – Low’. These can be understood as indicators based on which the algorithm will predict tomorrow’s trend. Feel free to add more indicators and see the performance




# Create predictor variables
df['Open-Close'] = df.Open - df.Close
df['High-Low'] = df.High - df.Low
  
# Store all predictor variables in a variable X
X = df[['Open-Close', 'High-Low']]
X.head()

Output:

Step 5: Define the target variable

The target variable is the outcome which the machine learning model will predict based on the explanatory variables. y is a target dataset storing the correct trading signal which the machine learning algorithm will try to predict. If tomorrow’s price is greater than today’s price then we will buy the particular Stock else we will have no position in the. We will store +1 for a buy signal and 0 for a no position in y. We will use where() function from NumPy to do this.

Syntax:

np.where(condition,value_if_true,value_if_false)




# Target variables
y = np.where(df['Close'].shift(-1) > df['Close'], 1, 0)
y

Output:

Step 6: Split the data into train and test

We will split data into training and test data sets. This is done so that we can evaluate the effectiveness of the model in the test dataset




split_percentage = 0.8
split = int(split_percentage*len(df))
  
# Train data set
X_train = X[:split]
y_train = y[:split]
  
# Test data set
X_test = X[split:]
y_test = y[split:]

Step 7: Support Vector Classifier (SVC)

We will use SVC() function from sklearn.svm.SVC library to create our classifier model using the fit() method on the training data set.




# Support vector classifier
cls = SVC().fit(X_train, y_train)

Step 8: Classifier accuracy

We will compute the accuracy of the algorithm on the train and test the data set by comparing the actual values of the signal with the predicted values of the signal. The function accuracy_score() will be used to calculate the accuracy.

An accuracy of 50%+ in test data suggests that the classifier model is effective.

Step 9: Strategy implementation

We will predict the signal (buy or sell) using the cls.predict() function.




df['Predicted_Signal'] = cls.predict(X)

Calculate Daily returns 




# Calculate daily returns
df['Return'] = df.Close.pct_change()

Calculate Strategy Returns




# Calculate strategy returns
df['Strategy_Return'] = df.Return *df.Predicted_Signal.shift(1)

Calculate Cumulative Returns




# Calculate Cumulutive returns
df['Cum_Ret'] = df['Return'].cumsum()
df

Calculate Strategy Cumulative Returns




# Plot Strategy Cumulative returns 
df['Cum_Strategy'] = df['Strategy_Return'].cumsum()
df

Plot Strategy Returns vs Original Returns




import matplotlib.pyplot as plt
%matplotlib inline
  
plt.plot(Df['Cum_Ret'],color='red')
plt.plot(Df['Cum_Strategy'],color='blue')

Output:

As You Can See Our Strategy Seem to be Totally Outperforming the Performance of The Reliance Stock. Our Strategy(Blue Line) Provided the return of 18.87 % in the last 1 year whereas the stock of Reliance Industries (Red Line) Provides the Return of just 5.97%  in the last 1 year.

Back-testing Result

1.  TCS

Stock Return Over Last 1 year -  48%
Strategy result - 48.9 %

2. ICICI BANK

Stock Return Over Last 1 year -  48%
Strategy result - 48.9 %

           

Deploying Strategy To Live Market

The Strategy Coded Can be easily deployed in the live market and can also be back-tested on any number of data throughout exchanges. The deployment can be easily done Using the BlueShift Platform. It is an Interactive Platform with Live Data Feed and connections through various Brokers. You can Do Back-testing On the BlueShift platform for any Number Of Time with data from various Exchanges. 

Conclusion 

Note: Real Money Should not be deployed until complete Backtesting of Strategy and without promising returns by Strategy during Paper-Trading


Article Tags :