From 7476f40353f51feeea614c336d33e69ff441cc75 Mon Sep 17 00:00:00 2001 From: ritvikmath Date: Tue, 14 Apr 2020 15:57:27 -0700 Subject: [PATCH] Add files via upload --- Stock Forecasting.ipynb | 541 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 541 insertions(+) create mode 100644 Stock Forecasting.ipynb diff --git a/Stock Forecasting.ipynb b/Stock Forecasting.ipynb new file mode 100644 index 0000000..709d873 --- /dev/null +++ b/Stock Forecasting.ipynb @@ -0,0 +1,541 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Basic Stock Trading" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import yfinance as yf\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "from datetime import datetime, timedelta" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [], + "source": [ + "#define the ticker symbol\n", + "tickerSymbol = 'JBLU'" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [], + "source": [ + "#get data on this ticker\n", + "tickerData = yf.Ticker(tickerSymbol)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [], + "source": [ + "#get the historical prices for this ticker\n", + "tickerDf = tickerData.history(interval='1d', start='2019-1-1', end='2020-4-10')" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [], + "source": [ + "priceData = tickerDf.Open" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "priceData = priceData.asfreq(pd.infer_freq(priceData.index))" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Date\n", + "2019-01-02 15.80\n", + "2019-01-03 16.01\n", + "2019-01-04 16.14\n", + "2019-01-05 NaN\n", + "2019-01-06 NaN\n", + " ... \n", + "2020-04-04 NaN\n", + "2020-04-05 NaN\n", + "2020-04-06 7.82\n", + "2020-04-07 8.96\n", + "2020-04-08 9.03\n", + "Freq: D, Name: Open, Length: 463, dtype: float64" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "priceData" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'JBLU Price Data')" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,4))\n", + "plt.plot(priceData)\n", + "for year in range(priceData.index[0].year, priceData.index[-1].year+1):\n", + " plt.axvline(datetime(year,1,1), color='k', linestyle='--', alpha=0.2)\n", + "plt.title(\"%s Price Data\"%tickerSymbol, fontsize=20)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic Buying Protocol:\n", + "\n", + "### - Buy if stock increasing for $b$ consecutive days" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic Selling Protocols:\n", + "\n", + "### - Sell if stock decreasing for $s$ consecutive days (and we've made a profit)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [], + "source": [ + "def get_buying_selling_days(price_data, b, s):\n", + " \n", + " #get the percent change day after day\n", + " pct_change = price_data.pct_change()[1:]\n", + " \n", + " #this function checks the buying condition\n", + " def buying_condition(sub_series):\n", + " return (sub_series > 0).all()\n", + " \n", + " #this function checks the selling condition\n", + " def selling_condition(sub_series):\n", + " return (sub_series < 0).all()\n", + " \n", + " #get all buying days in the data\n", + " buying_days = pct_change.rolling(b).apply(buying_condition)\n", + " \n", + " #get all potential selling days in the data\n", + " potential_selling_days = pct_change.rolling(s).apply(selling_condition)\n", + " \n", + " #return a dictionary\n", + " return {'buying_days': buying_days, 'potential_selling_days': potential_selling_days}" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [], + "source": [ + "info_dict = get_buying_selling_days(priceData, 4, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [], + "source": [ + "buying_days = info_dict['buying_days']\n", + "potential_selling_days = info_dict['potential_selling_days']" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [], + "source": [ + "#create dataframe to store information\n", + "df_stocks = pd.DataFrame(index = buying_days.index)" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [], + "source": [ + "#populate df with buying days, possible selling days, and price\n", + "df_stocks['buying_day'] = (buying_days == 1)\n", + "df_stocks['potential_selling_day'] = (potential_selling_days == 1)\n", + "df_stocks['price'] = priceData\n", + "\n", + "#only keep days that are buying or possible selling days\n", + "df_stocks = df_stocks[(df_stocks.buying_day | df_stocks.potential_selling_day)]" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
buying_daypotential_selling_dayprice
Date
2019-01-09FalseTrue16.84
2019-01-10FalseTrue16.16
2019-01-17FalseTrue17.32
2019-01-22FalseTrue17.56
2019-01-23FalseTrue17.42
\n", + "
" + ], + "text/plain": [ + " buying_day potential_selling_day price\n", + "Date \n", + "2019-01-09 False True 16.84\n", + "2019-01-10 False True 16.16\n", + "2019-01-17 False True 17.32\n", + "2019-01-22 False True 17.56\n", + "2019-01-23 False True 17.42" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_stocks.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [], + "source": [ + "def check_cumulative_percent_change(price_data, buy_date, potential_sell_date):\n", + " \"\"\"\n", + " This helper function will check if the cumulative percent change\n", + " between a buying and potential selling day yields overall growth\n", + " \"\"\"\n", + " \n", + " #get the percent change day after day\n", + " pct_change = price_data.pct_change()[1:]\n", + " \n", + " sub_series = 1 + pct_change[buy_date + timedelta(hours=1): potential_sell_date]\n", + "\n", + " return sub_series.product() > 1" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [], + "source": [ + "def get_investing_result(df_stocks, starting_funds, verbose=False):\n", + " \n", + " #get a copy of price data\n", + " price_data = df_stocks.price\n", + " \n", + " #at start, not holding any shares\n", + " holding = False\n", + " \n", + " #init vars\n", + " current_funds = starting_funds\n", + " current_shares = 0\n", + " last_buy_date = None\n", + " \n", + " #init dict of buying and selling dates\n", + " events_list = []\n", + " \n", + " #for each buying day and potential selling day...\n", + " for date,data in df_stocks.iterrows():\n", + " \n", + " #if not currently holding shares, and this is a buying day...\n", + " if (not holding) and data.buying_day:\n", + " \n", + " #calculate the number of shares we can buy\n", + " num_shares_to_buy = int(current_funds / data.price)\n", + " \n", + " #update number of shares\n", + " current_shares += num_shares_to_buy\n", + " \n", + " #decrease current funds\n", + " current_funds -= num_shares_to_buy * data.price\n", + " \n", + " #set last buy date\n", + " last_buy_date = date\n", + " events_list.append(('b', date))\n", + " \n", + " #we are now holding shares\n", + " holding = True\n", + " \n", + " if verbose:\n", + " print('Bought %s shares at $%s on %s totaling $%s'%(num_shares_to_buy, data.price, date.date(), round(num_shares_to_buy*data.price,2)))\n", + " \n", + " #if you are holding shares, and this is a potential selling day...\n", + " elif holding and data.potential_selling_day:\n", + " \n", + " #check to make sure we're making a profit\n", + " if check_cumulative_percent_change(price_data, last_buy_date, date):\n", + " #add to our current funds\n", + " current_funds += current_shares * data.price\n", + " \n", + " if verbose:\n", + " print('Sold %s shares at $%s on %s totaling $%s'%(current_shares, data.price, date.date(), round(num_shares_to_buy*data.price,2)))\n", + " print('--------------------------------------')\n", + " \n", + " #reset current shares\n", + " current_shares = 0\n", + " \n", + " #we are no longer holding shares\n", + " holding = False\n", + " \n", + " events_list.append(('s', date))\n", + " \n", + " #get the stock price at the end of the time span\n", + " final_stock_price = price_data[-1]\n", + " \n", + " #get the final total value of all assets (funds + stock value)\n", + " final_value = current_funds + final_stock_price * current_shares\n", + " \n", + " #return the percent change in value\n", + " return round((final_value - starting_funds) / starting_funds,2), events_list" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bought 535 shares at $18.66 on 2019-05-02 totaling $9983.1\n", + "Sold 535 shares at $19.38 on 2019-06-17 totaling $10368.3\n", + "--------------------------------------\n", + "Bought 532 shares at $19.49 on 2019-07-26 totaling $10368.68\n", + "Sold 532 shares at $19.56 on 2019-11-08 totaling $10405.92\n", + "--------------------------------------\n", + "Bought 493 shares at $21.1 on 2020-01-24 totaling $10402.3\n", + "Sold 493 shares at $21.19 on 2020-02-18 totaling $10446.67\n", + "--------------------------------------\n" + ] + } + ], + "source": [ + "percent_change, events_list = get_investing_result(df_stocks, 10000, True)" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.05\n" + ] + } + ], + "source": [ + "print(percent_change)" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7, 22)" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,4))\n", + "plt.plot(priceData)\n", + "\n", + "y_lims = (int(priceData.min()*.95), int(priceData.max()*1.05))\n", + "shaded_y_lims = int(priceData.min()*.5), int(priceData.max()*1.5)\n", + "\n", + "for idx, event in enumerate(events_list):\n", + " color = 'red' if event[0] == 'b' else 'blue'\n", + " plt.axvline(event[1], color=color, linestyle='--', alpha=0.4)\n", + " if event[0] == 's':\n", + " plt.fill_betweenx(range(*shaded_y_lims), \n", + " event[1], events_list[idx-1][1], color='k', alpha=0.1)\n", + "\n", + "plt.title(\"%s Price Data\"%tickerSymbol, fontsize=20)\n", + "plt.ylim(*y_lims)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}