Skip to content

Commit

Permalink
Finished reworking date selection
Browse files Browse the repository at this point in the history
  • Loading branch information
WillKoehrsen committed Jan 23, 2018
1 parent f39146d commit 7f02219
Show file tree
Hide file tree
Showing 5 changed files with 397 additions and 396 deletions.
137 changes: 68 additions & 69 deletions stocker/Stocker Analysis Usage.ipynb

Large diffs are not rendered by default.

345 changes: 177 additions & 168 deletions stocker/Stocker Prediction Usage.ipynb

Large diffs are not rendered by default.

Binary file modified stocker/__pycache__/stocker.cpython-36.pyc
Binary file not shown.
94 changes: 33 additions & 61 deletions stocker/dev/Stock Explorer (Stocker) Class.ipynb
Expand Up @@ -27,7 +27,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 3,
"metadata": {
"collapsed": true,
"hideCode": false,
Expand All @@ -52,7 +52,7 @@
},
{
"cell_type": "code",
"execution_count": 45,
"execution_count": 4,
"metadata": {
"collapsed": false
},
Expand Down Expand Up @@ -152,14 +152,27 @@
},
{
"cell_type": "code",
"execution_count": 44,
"execution_count": 1,
"metadata": {
"collapsed": false,
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"# Quandl for financial analysis, pandas and numpy for data manipulation\n",
"# fbprophet for additive models, #pytrends for Google trend data\n",
"import quandl\n",
"import pandas as pd\n",
"import numpy as np\n",
"import fbprophet\n",
"import pytrends\n",
"from pytrends.request import TrendReq\n",
"\n",
"# matplotlib pyplot for plotting\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import matplotlib\n",
"\n",
"# Class for analyzing and (attempting) to predict future prices\n",
"# Contains a number of visualizations and analysis methods\n",
Expand Down Expand Up @@ -260,6 +273,8 @@
" \n",
" valid_start = False\n",
" valid_end = False\n",
" \n",
" # User will continue to enter dates until valid dates are met\n",
" while (not valid_start) & (not valid_end):\n",
" valid_end = True\n",
" valid_start = True\n",
Expand All @@ -270,16 +285,17 @@
" end_date= pd.to_datetime(input('Enter a new end date: '))\n",
" valid_end = False\n",
" valid_start = False\n",
" \n",
" if end_date.date() > self.max_date.date():\n",
" print('End Date exceeds data range')\n",
" end_date= pd.to_datetime(input('Enter a new end date: '))\n",
" valid_end = False\n",
" \n",
" if start_date.date() < self.min_date.date():\n",
" print('Start Date is before date range')\n",
" start_date = pd.to_datetime(input('Enter a new start date: '))\n",
" valid_start = False\n",
" \n",
" else: \n",
" if end_date.date() > self.max_date.date():\n",
" print('End Date exceeds data range')\n",
" end_date= pd.to_datetime(input('Enter a new end date: '))\n",
" valid_end = False\n",
"\n",
" if start_date.date() < self.min_date.date():\n",
" print('Start Date is before date range')\n",
" start_date = pd.to_datetime(input('Enter a new start date: '))\n",
" valid_start = False\n",
" \n",
" \n",
" return start_date, end_date\n",
Expand Down Expand Up @@ -466,34 +482,14 @@
" def buy_and_hold(self, start_date=None, end_date=None, nshares=1):\n",
" self.reset_plot()\n",
" \n",
" # Default start and end date are the beginning and end of data\n",
" if start_date is None:\n",
" start_date = self.min_date\n",
" if end_date is None:\n",
" end_date = self.max_date\n",
" start_date, end_date = self.handle_dates(start_date, end_date)\n",
" \n",
" # Convert to pandas datetime for indexing dataframe\n",
" start_date = pd.to_datetime(start_date)\n",
" end_date = pd.to_datetime(end_date)\n",
" \n",
" if end_date.date() < start_date.date():\n",
" print('End Date must be later than start date.')\n",
" return\n",
" \n",
" # Check to make sure dates are in the data\n",
" if (start_date not in list(self.stock['Date'])):\n",
" print('Start Date not in data (either out of range or not a trading day.)')\n",
" return\n",
" elif (end_date not in list(self.stock['Date'])):\n",
" print('End Date not in data (either out of range or not a trading day.)')\n",
" return \n",
" \n",
" # Find starting and ending price of stock\n",
" start_price = float(self.stock[self.stock['Date'] == start_date]['Adj. Open'])\n",
" end_price = float(self.stock[self.stock['Date'] == end_date]['Adj. Close'])\n",
" \n",
" # Make a profit dataframe and calculate profit column\n",
" profits = self.stock[(self.stock['Date'] >= start_date) & (self.stock['Date'] <= end_date)]\n",
" profits = self.make_df(start_date, end_date)\n",
" profits['hold_profit'] = nshares * (profits['Adj. Close'] - start_price)\n",
" \n",
" # Total profit\n",
Expand Down Expand Up @@ -653,21 +649,7 @@
" if end_date is None:\n",
" end_date = self.max_date\n",
" \n",
" # Convert to pandas datetime for indexing dataframe\n",
" start_date = pd.to_datetime(start_date)\n",
" end_date = pd.to_datetime(end_date)\n",
" \n",
" if end_date.date() < start_date.date():\n",
" print('End Date must be later than start date.')\n",
" return\n",
" \n",
" # Check to make sure dates are in the data\n",
" if (start_date not in list(self.stock['Date'])):\n",
" print('Start Date not in data (either out of range or not a trading day.)')\n",
" return\n",
" elif (end_date not in list(self.stock['Date'])):\n",
" print('End Date not in data (either out of range or not a trading day.)')\n",
" return \n",
" start_date, end_date = self.handle_dates(start_date, end_date)\n",
" \n",
" # Training data starts self.training_years years before start date and goes up to start date\n",
" train = self.stock[(self.stock['Date'] < start_date.date()) & \n",
Expand Down Expand Up @@ -1079,17 +1061,7 @@
" start_date = pd.to_datetime(start_date)\n",
" end_date = pd.to_datetime(end_date)\n",
" \n",
" if end_date.date() < start_date.date():\n",
" print('End Date must be later than start date.')\n",
" return\n",
" \n",
" # Check to make sure dates are in the data\n",
" if (start_date not in list(self.stock['Date'])):\n",
" print('Start Date not in data (either out of range or not a trading day.)')\n",
" return\n",
" elif (end_date not in list(self.stock['Date'])):\n",
" print('End Date not in data (either out of range or not a trading day.)')\n",
" return\n",
" start_date, end_date = self.handle_dates(start_date, end_date)\n",
" \n",
" # Select self.training_years number of years\n",
" train = self.stock[(self.stock['Date'] > (start_date - pd.DateOffset(years=self.training_years)).date()) & \n",
Expand Down

0 comments on commit 7f02219

Please sign in to comment.