本文将向您展示如何使用不同的聚类算法计算股票支撑位和阻力位。
股票数据 - 我在 mongoDB 数据库中有股票数据。您还可以免费从雅虎财经获取这些数据。
Python 连接 MongoDB 设置
In [1]:
import pymongo
from pymongo import MongoClient
client_remote = MongoClient('mongodb://localhost:27017')
db_remote = client_remote['stocktdb']
collection_remote = db_remote.stock_data
从 MongoDB 获取股票数据
我将使用过去 60 天的 Google 公司股票 数据进行分析。
In [2]:
mobj = collection_remote.find({'ticker':'GOOGL'}).sort([('_id',pymongo.DESCENDING)]).limit(60)
为数据分析准备数据
我将使用 Pandas 和 Numpy 进行数据操作。让我们首先从 Mongo Cursor 对象获取数据到 Python 列表。
In [3]:
prices = []
for doc in mobj:
prices.append(doc['high'])
K-means
聚类计算股票支撑位和阻力位
In [4]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
对于 K-means
聚类,我们需要将数据转换为 Numpy 数组格式。
In [5]:
X = np.array(prices)
对于K-means
聚类来说,K-means
聚类的数量非常重要。我们可以使用膝图找到最佳 K值,如下所示。
In [6]:
from sklearn.cluster import KMeans
import numpy as np
from kneed import KneeLocator
sum_of_sq_distances = []
K = range(1,10)
for k in K:
km = KMeans(n_clusters=k)
km = km.fit(X.reshape(-1,1))
sum_of_sq_distances.append(km.inertia_)
kn = KneeLocator(K, sum_of_sq_distances,S=1.0, curve="convex"