更多精彩内容详见个人量化交易专辑索引
本文通过tensorflow建模挖掘个股资金流向和个股股价之间的关系,个股资金流向使用的是东财的数据,结论是:
主力资金流入比例和巨量资金流入比例与涨跌幅正相关;
小量资金流入比例与涨跌幅负相关;
中量资金流入比例与涨跌幅微量负相关,比小量资金流入比例小一个数量级;
大量资金流入比例与涨跌幅不相关,比中量资金流入比例再小一个数量级;
本文预测的是当天资金流向和股价的关系,不涉及对下个交易日股价的预测。
1. 数据准备(可以直接从资源中下载)
每行数据格式如下:
|涨跌幅|主力资金流入例|小量资金流入比例|中量资金流入比例|大量资金流入比例|巨量资金流入比例|
2. 加载数据
df = pd.read_csv('fflow_data.csv')
3. 训练集和测试集采样
n = len(df)
train_df = df[0:int(n*0.7)]
val_df = df[int(n*0.7):int(n*0.9)]
test_df = df[int(n*0.9):]
x_train = train_df.drop('change_rate', axis=1)
y_train = train_df[['change_rate']]
x_val = val_df.drop('change_rate', axis=1)
y_val = val_df[['change_rate']]
x_test = test_df.drop('change_rate', axis=1)
y_test = test_df[['change_rate']]
4. 定义并训练模型
weight_layer = tf.keras.layers.Dense(1, kernel_regularizer=regularizers.l2(0.1))
model = tf.keras.Sequential([
weight_layer,
])
model.compile(optimizer=tf.keras.optimizers.Adam(),
loss=tf.keras.losses.MeanAbsoluteError(),
metrics=[tf.keras.metrics.MeanAbsoluteError()])
early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10, mode='min')
history = model.fit(x_train, y_train,
validation_data=[x_val, y_val],
epochs=2048,
batch_size=512,
verbose=2,
callbacks=[early_stopping])
5. 用测试集评估模型
performance = model.evaluate(x_test, y_test, verbose=2)
6. 打印权重
'''
[[ 0.04289039]
[-0.03468578]
[-0.0044735 ]
[-0.00070245]
[ 0.04196407]]
[0.33311036]
'''
weight_Dense,bias_Dense = weight_layer.get_weights()
print(weight_Dense)
print(bias_Dense)