如何使用机器学习在股票市场交易

如何使用机器学习在股票市场交易

FinTech社区 2022-03-25 19:54

大家好,我是Lucy@FinTech社区,今天的文章将和大家分享算法交易与深度学习。欢迎添加以下微信:fintech78,加入社群,提认知,攒人脉,求职招聘!

制定策略

股市最基本的策略是低买高卖。如果你已经投资或交易了很长时间,你就知道这并不像听起来那么容易。所以,我们想建立一个模型,尽可能准确地预测股票的低点和高点。

Image

图1:苹果股票从2018到2021的趋势。

绿点是局部极小值(低点),红点是局部极大值(高点)

 

在图1中,你可以看到苹果股价从2018到2021的每日股价变动。绿点是局部最小值,红点是局部最大值。我们的想法是使用机器学习预测数据点是绿点(0类)还是红点(1类)。我们的目标是,如果模型预测到一个绿点,就买入,当股价上涨一定百分比时卖出。

 

下面实现策略的四个步骤

 

使用机器学习模型预测某一天买入股票是否有利可图。

如果有利(绿点),买入股票。

一旦股票上涨了一定的百分比,就卖出股票获利。

如果股票下跌了一定的百分比,就亏损出售股票。

 

机器学习模型

 

这里我们将使用的机器学习模型是逻辑回归(LR)。

 

首先,我们的问题是一个二元分类问题。即局部极小值(0类“绿点”)和局部极大值(1类“红点”)。接下来,我们要确定模型的输入。一个非常简单的想法是使用股票价格和成交量作为LR模型的输入,并预测它是局部最小值还是局部最大值。

 

然而,股价和成交量包含非常少的信息,不可能只用它们来预测像股票涨跌这样复杂的事情。

 

因此,我们需要在模型中加入四个其他输入参数。

 

具体参数如下:

 

标准化股价—我们不直接使用股价,而是使用标准化股价作为第一个输入参数。股票的价格包含最高价、最低价、开盘价和收盘价(如图2所示)。

 

为了简化,我们创建一个0到1之间的值,表示所有四个值。该值由方程1计算得出。如果结果值接近1,这意味着该股票已接近当日高点收盘,而如果标准化值接近0,则意味着该股票已接近当日低点收盘。使用该值的优势在于与使用单一值(如当日收盘价或平均价)相比,它包含了全天价格行为的信息.

Image

图2:股票行情的开盘、收盘、最高价和最低价

Image

方程1

 

成交量—模型中使用的第二个参数是每日成交量。表示特定日期的交易量。

3日回归系数—下一个参数是3日回归系数。通过对过去三天的收盘价进行线性回归计算得出的。代表了过去三天的股票走势。

5日回归系数—与3日回归系数类似的参数。

10日回归系数—同上。

20日回归系数—同上。

 

训练和验证模型

 

定义模型之后,我们使用的数据集是道琼斯30指数的30家公司和标准普尔500指数的20家其他知名公司。训练数据的时间跨度为2007年至2020年。验证的数据为2021年的数据。

 

为了准备训练数据,我们首先要找到代表买入点(图1中的0类或绿点)或卖出点(1类)的数据点。这是通过算法来实现的,该算法用于搜索局部最小值和最大值点。选择数据点后,收集交易量数据,并计算标准化价格值和回归参数。图3显示了一个输入数据示例。

Image

图3 

准备好数据后,我们使用python的scikit包将数据拆分为训练集和验证集,并训练LR模型。

 

验证结果和分析

 

验证集包含507个数据样本。经过充分训练的LR模型能够预测验证数据,准确率为88.5%。

 

这个模型的准确性看起来很诱人。让我们看看模型如何在2021年度的股票上运行。为此,我们选择高盛(Goldman Sachs)的股价数据,并使用经过训练的LR模型预测了每天的股票走势。结果如图4所示。

Image

图4

 

可以看到图4,该模型预测了大量错误买入点。虽然它似乎能正确预测几乎所有的局部最小值,但它却错误地预测了买入点。如果你还记得在训练阶段,我只使用局部极大值和局部极小值来训练模型。因此,模型对中间数据点的预测非常弱。

 

这可能是一个代价高昂的投资错误。毕竟,高买低卖不是我们的本意。那么,我们如何解决这个问题,并更准确的选择买入点呢。让我们回到验证结果,看看能否找到一种方法来增加购买点的准确性。

Image

图5

 

在图5中,我们可以看到验证结果的混淆矩阵。我们的模型在类别0(买入点/局部最低)中预测了29个实例,而实际上它是类别1(卖点/局部最高)。

这些都是假阳性值(错误地将阴性识别为阳性。还要记住,在我们的案例中,阳性代表买入点)。

 

如果我们回想一下策略,我们的模型的目标是使用机器学习模型找到买入点。因此,我们可以尝试减少这些误报,并确保模型以极高准确性预测买入点。我们可以通过改变LR模型的阈值来实现这一点。
 

 

因此,为了确保我们的模型更准确地预测买入点。将模型的阈值更改为0.03。

 

图6是新的混淆矩阵。

Image

图6

 

正如你现在看到的,错误预测的数量为零。然而,这样做的缺点是,该模型忽略了许多真正的正值。在我们的例子中,模型只识别了五个入买入点,没有识别出其它买入点。

 

现在让我们使用新的阈值并重新绘制2021高盛股票的买入点。

Image

图7
 

如图7所示,现在该模型可以更确定地预测购买机会。然而,它也错过了多次购买机会。这是我们必须做出的牺牲,以便以极高的确定性买入。

 

回测与结果

 

接下来,我们用2021个股票市场数据上测试我们的策略。我们先创建一个股票模拟器和一个反向测试脚本,每天使用LR模型和给定阈值(t)扫描道琼斯30指数的买入机会。如果有可用的股票,模拟器就会购买股票并持有股票,直到达到一定的百分比收益(g)、一定的百分比损失(l)或在一定的天数(d)后卖出。最终的回测模拟有四个参数(t、g、l、d),目标是利润最大化。

 

通过改变这些参数,我们可以创建四种投资者类型。“没耐心的交易者”、“适度交易者”、“耐心摇摆交易者”和“非理性交易者”。

 

没耐心的交易者—这类交易者购买并持有股票的时间非常短。这类交易者害怕亏损,并且只为获得很小的收益。所以如果股价下跌一点点,此类交易者往往会以亏损卖出股票。所以,这类交易者的参数是t=0.3,g=0.005,l=0.001和d=3。

 

适度交易者—这类交易者购买股票并持有一段适度的时间。交易者正在寻找信心较高的股票,因此阈值往往较低。与不耐烦的交易者相比,交易者也寻求更高的收益,对损失有更高的容忍度。对于这类交易者,参数为t=0.1、g=0.03、l=0.03和d=10。

 

耐心摇摆交易者—正如“摇摆”一词所暗示的那样,这类交易者往往持有股票的时间更长。此外,交易者喜欢选择成功概率高的股票。所以这类交易者的门槛很低。这类交易者的参数为t=0.05、g=0.04、l=0.003和d=21。

 

非理性交易者—婴儿型交易者是对股票市场不熟悉的交易者。他们倾向于不合理地选择股票。因此,投资者不会使用任何策略来选择股票。这类投资者会随机挑选股票,并在任何时候随意抛售。

 

现在让我们看一下测试结果,看看这四类投资者的表现如何。这些模拟是基于2021年的股票数据,每个投资者有3000美元作为他们的起始余额。

Image

图8

 

图8显示了四位投资者的表现。摇摆型交易者能够在2021年底获得47.77%的收益,其次是没耐心的交易者获得30.41%的收益。非理性交易者的回报率最低,涨幅为13.72%。

 

Image

表1:每种类型投资者的汇总数据

 

这些结果表明,在使用LR模型时,与频繁购买信心较低的股票相比,购买信心较高的股票并持有更长时间是有益的。我们也应该注意到,在2021美股股市是一个牛市,因为即使是非理性投资者,“猿类”,也有13.72%的回报率,这表明美股市场在2021年是慷慨的。

 

与标准普尔500指数的比较

 

接下来,我们比较一下我们构造的前两个投资者模型与标普2021年的业绩。

 

Image

图10

 

图10显示了1月份向标准普尔500指数投资3000美元的表现。结果表明,投资增长了26.9%。相比之下,“耐心的摇摆交易者”的回报率为47.77%,而“没耐心的交易者”的回报率为30.41%。

 

总结

 

尽管回测结果表明该模型是盈利的,但必须对其进行实时测试,以实际验证该策略的盈利能力。

 

本期分享就到这里,如果您有任何问题或意见,请留言!