股票量化--机器学习

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier

df = pd.read_csv('cs_data_60m/cs_000001_XSHE_60m.csv')

# 价
df['MA5'] = df['close'].rolling(window=5).mean()
df['MA23'] = df['close'].rolling(window=23).mean()
df['MA47'] = df['close'].rolling(window=47).mean()
df['MA5_up_23'] = (df['MA5'] >= df['MA23']).astype(int)
df['MA5_up_47'] = (df['MA5'] >= df['MA47']).astype(int)
df['MA23_up_47'] = (df['MA23'] >= df['MA47']).astype(int)

# 计算价格变化和平均增长/减少的指数移动平均线
delta = df['close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
average_gain = gain.ewm(alpha=1/14, adjust=False).mean()
average_loss = loss.ewm(alpha=1/14, adjust=False).mean()
# 计算RSI指标
rs = average_gain / average_loss
rsi = 100 - (100 / (1 + rs))
df['RSI'] = rsi
# 将RSI分为四个类别
bins = [0, 10, 50, 90, 100]
labels = [0, 1, 2, 3]
df['RSI_Class'] = pd.cut(df['RSI'], bins=bins, labels=labels, right=False)

# 量
df['v_MA5'] = df['volume'].rolling(window=5).mean()
df['v_MA23'] = df['volume'].rolling(window=23).mean()
df['v_MA47'] = df['volume'].rolling(window=47).mean()
df['v_MA5_up_23'] = (df['v_MA5'] >= df['v_MA23']).astype(int)
df['v_MA5_up_47'] = (df['v_MA5'] >= df['v_MA47']).astype(int)
df['v_MA23_up_47'] = (df['v_MA23'] >= df['v_MA47']).astype(int)
df['v_up_MA5'] = (df['volume'] >= df['v_MA5']).astype(int)
df['v_up_MA23'] = (df['volume'] >= df['v_MA23']).astype(int)
df['v_up_MA47'] = (df['volume'] >= df['v_MA47']).astype(int)

select_cols = ["MA5_up_23", "MA5_up_47", "MA23_up_47", "v_MA5_up_23", "v_MA5_up_47", "v_MA23_up_47", "v_up_MA5", "v_up_MA23", "v_up_MA47", "RSI_Class", "target"]

data = df.loc[:, select_cols]
split_num = int(len(data)*0.8)
x_train = data.loc[:split_num, select_cols[:-1]]
y_train = data.loc[:split_num, select_cols[-1:]]
x_test = data.loc[split_num:, select_cols[:-1]]
y_test = data.loc[split_num:, select_cols[-1:]]

# 随机森林
rf_classifier = RandomForestClassifier(n_estimators=200, random_state=42)
rf_classifier.fit(x_train, y_train)
y_pred = rf_classifier.predict(x_test)
print(sum(y_pred)/len(x_test))

# 支持向量机
# 线性核
svm_classifier = SVC(kernel='linear')
svm_classifier.fit(x_train, y_train)
y_pred = svm_classifier.predict(x_test)
print(sum(y_pred)/len(x_test))
# 非线性核函数
svm_classifier_poly = SVC(kernel='poly', degree=3)
svm_classifier_rbf = SVC(kernel='rbf', gamma=0.1)
svm_classifier_sigmoid = SVC(kernel='sigmoid', gamma=0.01)
# ==
svm_classifier_poly.fit(x_train, y_train)
y_pred = svm_classifier_poly.predict(x_test)
print(sum(y_pred)/len(x_test))
# ==
svm_classifier_rbf.fit(x_train, y_train)
y_pred = svm_classifier_rbf.predict(x_test)
print(sum(y_pred)/len(x_test))
# ==
svm_classifier_sigmoid.fit(x_train, y_train)
y_pred = svm_classifier_sigmoid.predict(x_test)
print(sum(y_pred)/len(x_test))

# 决策树
tree_classifier = DecisionTreeClassifier()
tree_classifier.fit(x_train, y_train)
y_pred = tree_classifier.predict(x_test)
print(sum(y_pred)/len(x_test))

猜你喜欢

转载自blog.csdn.net/wjl__ai__/article/details/131627512