基于支持向量机的量化择时今有沪深300指数2016年~2017年的交易数据表和交易日历数据表其表结构及字段说明如下表4沪深300指数2016年-2017年的交易数据表表4沪深300指数2016年-2017年的交易数据表指数代马指数代马交易日期交易日期开盘价开盘价最高价最高价最低价最低价收盘价收盘价成交量成交量成交额成交额0003000003002016-01-042016-01-043725863
由于没有提供代码实现,这里提供一个基于Python的支持向量机量化择时示例:
首先,读入数据表,并计算出所需的指标:
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
# 读入数据表
df = pd.read_excel('data.xlsx', sheet_name='data')
calendar = pd.read_excel('data.xlsx', sheet_name='calendar')
# 计算指标
df['week'] = df['交易日期'].dt.week
df['week_high'] = df.groupby('week')['最高价'].transform('max')
df['week_low'] = df.groupby('week')['最低价'].transform('min')
df['week_volume'] = df.groupby('week')['成交量'].transform('sum')
df['week_amount'] = df.groupby('week')['成交额'].transform('sum')
df['last_week_close'] = df['收盘价'].shift(5)
df['week_return'] = (df['收盘价'] - df['last_week_close']) / df['last_week_close']
df['last_week_return'] = df['week_return'].shift(1)
df['last_last_week_return'] = df['week_return'].shift(2)
df['last_week_amount'] = df['week_amount'].shift(1)
df.dropna(inplace=True)
# 标准化处理
scaler = StandardScaler()
X = df.iloc[:, 9:-1].values
X = scaler.fit_transform(X)
y = np.where(df['收盘价'].shift(-1) > df['收盘价'], 1, -1)
# 分离训练集和测试集
X_train = X[:-12, :]
y_train = y[:-12]
X_test = X[-12:, :]
y_test = y[-12:]
然后,使用支持向量机模型进行训练和测试:
# 训练支持向量机模型
clf = SVC(kernel='rbf', C=1, gamma='scale')
clf.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = clf.predict(X_test)
# 输出预测结果
for i in range(len(y_pred)):
if y_pred[i] == 1:
print('第{}周预测沪深300指数将上涨'.format(i+1))
else:
print('第{}周预测沪深300指数将下跌'.format(i+1))
这里使用了rbf核函数和默认的惩罚参数C和gamma进行训练。预测结果输出每周的预测涨跌情况
原文地址: http://www.cveoy.top/t/topic/hr5l 著作权归作者所有。请勿转载和采集!