{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# K-mean clustering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports:" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "# import pytz\n", "# import matplotlib.ticker as mpticker\n", "from sklearn.cluster import KMeans\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import mplfinance as mpf\n", "from mplfinance.original_flavor import candlestick_ohlc\n", "import finnhub\n", "import matplotlib.dates as mpl_dates\n", "import numpy as np\n", "from datetime import * " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Access stock data" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "# Setup client\n", "finnhub_client = finnhub.Client(api_key = \"bt3efpf48v6tfcs816eg\")\n", "\n", "# Stock candles\n", "ticker = 'SPY'\n", "start_time = int(datetime(2021, 5, 21, 0, 0).replace(tzinfo = timezone.utc).timestamp())\n", "end_time = int(datetime(2021, 6, 22, 0, 0).replace(tzinfo = timezone.utc).timestamp())\n", "res = finnhub_client.stock_candles(ticker, 'D', start_time, end_time)\n", "\n", "stock = pd.DataFrame(res)\n", "stock = stock.rename(columns = {'t':'Date', 'o':'Open', 'h':'High', 'l':'Low', 'c':'Close', 's':'status', 'v':'volumn'})\n", "stock['Date'] = pd.to_datetime(stock['Date'], unit = 's')\n", "stock = stock.set_index('Date')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define functions" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | Close | \n", "High | \n", "Low | \n", "Open | \n", "status | \n", "volumn | \n", "
---|---|---|---|---|---|---|
Date | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
2021-05-21 | \n", "414.94 | \n", "418.2000 | \n", "414.4500 | \n", "416.87 | \n", "ok | \n", "76578662 | \n", "
2021-05-24 | \n", "419.17 | \n", "420.3200 | \n", "417.0800 | \n", "417.34 | \n", "ok | \n", "51376702 | \n", "
2021-05-25 | \n", "418.24 | \n", "420.7100 | \n", "417.6200 | \n", "420.33 | \n", "ok | \n", "57451396 | \n", "
2021-05-26 | \n", "419.07 | \n", "419.6100 | \n", "417.7600 | \n", "418.87 | \n", "ok | \n", "43088618 | \n", "
2021-05-27 | \n", "419.29 | \n", "420.7200 | \n", "418.9851 | \n", "420.17 | \n", "ok | \n", "56707677 | \n", "
2021-05-28 | \n", "420.04 | \n", "421.2500 | \n", "419.7900 | \n", "420.97 | \n", "ok | \n", "58520164 | \n", "
2021-06-01 | \n", "419.67 | \n", "422.7200 | \n", "419.2000 | \n", "422.57 | \n", "ok | \n", "54216625 | \n", "
2021-06-02 | \n", "420.33 | \n", "421.2300 | \n", "419.2900 | \n", "420.37 | \n", "ok | \n", "49097061 | \n", "
2021-06-03 | \n", "418.77 | \n", "419.9900 | \n", "416.2800 | \n", "417.85 | \n", "ok | \n", "58138763 | \n", "
2021-06-04 | \n", "422.60 | \n", "422.9200 | \n", "418.8422 | \n", "420.75 | \n", "ok | \n", "55938789 | \n", "
2021-06-07 | \n", "422.19 | \n", "422.7800 | \n", "421.1900 | \n", "422.59 | \n", "ok | \n", "51555032 | \n", "
2021-06-08 | \n", "422.28 | \n", "423.2100 | \n", "420.3200 | \n", "423.11 | \n", "ok | \n", "47134279 | \n", "
2021-06-09 | \n", "421.65 | \n", "423.2600 | \n", "421.4100 | \n", "423.18 | \n", "ok | \n", "48436342 | \n", "
2021-06-10 | \n", "423.61 | \n", "424.6300 | \n", "421.5500 | \n", "422.96 | \n", "ok | \n", "51020147 | \n", "
2021-06-11 | \n", "424.31 | \n", "424.4300 | \n", "422.8200 | \n", "424.20 | \n", "ok | \n", "45570828 | \n", "
2021-06-14 | \n", "425.26 | \n", "425.3700 | \n", "423.1000 | \n", "424.43 | \n", "ok | \n", "42358478 | \n", "
2021-06-15 | \n", "424.48 | \n", "425.4600 | \n", "423.5400 | \n", "425.42 | \n", "ok | \n", "51508508 | \n", "
2021-06-16 | \n", "422.11 | \n", "424.8700 | \n", "419.9200 | \n", "424.63 | \n", "ok | \n", "80386082 | \n", "
2021-06-17 | \n", "421.97 | \n", "423.0200 | \n", "419.3200 | \n", "421.67 | \n", "ok | \n", "90949659 | \n", "
2021-06-18 | \n", "414.92 | \n", "417.8281 | \n", "414.7000 | \n", "417.09 | \n", "ok | \n", "118676302 | \n", "
2021-06-21 | \n", "420.86 | \n", "421.0600 | \n", "415.9300 | \n", "416.80 | \n", "ok | \n", "72822028 | \n", "
2021-06-22 | \n", "423.11 | \n", "424.0000 | \n", "420.0800 | \n", "420.85 | \n", "ok | \n", "57700303 | \n", "