在上篇文章中我们实现了一个简单的趋势评分模型,从而可以对美股、A股、商品期货的各个标的进行评分,进而筛选到评分最高的Top N,然后再逐一进行基本面、政策面的人工核对、校验,即可大大提高全市场分析的效率。
由此可见,虽然散户可能很少有机会使用专业的金融终端,比如彭博终端、Wind,其高昂的价格确实让普通人望而却步,但是如果学习一些技术指标的编写方法,不仅可以在工具和方法上逐步接近专业投资者,还能更灵活、更准确地解读市场,有助于提高普通人在交易决策上的独立性和有效性。
首先,编写技术指标可以让普通人了解这些技术指标背后的数学原理,学习如何从历史数据中提取有效信号,增强对趋势特征和市场结构的把握。通过反复测试和优化指标,就能更清楚地了解到底哪些技术指标更适合自身的交易风格,或者说自己的交易风格更应该使用哪些技术指标,从而提升了自己的市场分析的能力。
其次,一些常见的技术指标在市场上所有人都能使用,缺少个性化,而自己编写的技术指标可以针对个人投资策略进行调整,减少和其他人使用同质化工具的风险,从而在交易中形成一定的竞争优势。
然后,掌握了技术指标的编写方法,普通人也就可以不再完全依赖一些野生国师、砖家、大V的意见,减少了盲从,能够自主辨别哪些是有效的信号,哪些可能是市场的“噪音”,从而提高了自主决策的能力。
最后,编写技术指标只是进入量化交易的入门技能,后面如果还有能力学习Python,能够创建自动化或半自动化的策略,那么随着编程能力和数据分析能力的提升,普通人也可以设计符合自己风险偏好的量化模型,从而实现数据驱动决策和量化交易。
虽然大部分金融终端功能强大,但并非所有功能都适合普通人。通过编写技术指标,普通人可以以更低的成本实现类似的功能,从而节省一笔不菲的订阅费用。
那么,接下来我们将会展示一下如何将一个技术指标改造为一个选股公式,以及如何根据自己的风险偏好改造评分模型,从而筛选到更符合自己需要的股票。最后,我们还要对其实现自动化,每天定时推送按照自定义模型优选的股票列表。
选股公式
平时大家使用的大多都是技术指标,那么选股公式与技术指标有什么区别呢?很简单,技术指标主要是绘图,要么是曲线,要么是柱图,要么是数值,要么是信号,也就是说,技术指标至少要有一个输出项。当然了,你啥都没有输出也不是不行,但这样并没有任何意义。而选股公式呢,既然是“选股”,那么它就要有一个条件,框定一个范围,设定一个条件,执行选股公式,就可以筛选出来满足条件的股票列表。
单纯文字描述可能还有点抽象,我们来看一个最简单的例子。假设我们以短期均线与长期均线的交叉作为买卖依据,即当短期均线上穿长期均线时,金叉买入,短期均线下穿长期均线时,死叉卖出。
将其编写为技术指标,因为这里只是做一个展示,所以上涨下跌均线变色的功能就先省略了。
{短期、长期的设置,可自行调整}
ST := 20;
LT := 60;
{短期、长期的均线,这里使用MA算法,可自行调整为EMA、SMA、DMA等其它均线算法}
MA_S : MA(C, ST), COLORE51883, LINETHICK2;
MA_L : MA(C, LT), COLOR7F9A00, LINETHICK2;
{金叉信号: 短期均线上穿长期均线, 在交叉点的下方绘制标识}
DRAWICON(CROSS(MA_S, MA_L), MA_S * 0.995, 1);
{死叉信号: 短期均线下穿长期均线, 在交叉点的上方绘制标识}
DRAWICON(CROSS(MA_L, MA_S), MA_S * 1.005, 2);
假设我们使用这个指标回看了多个股票的历史数据后,发现确实可以抓住一段趋势,那么我们就可以将其转换为选股公式。主要有三个步骤:去除绘图指令、保留关键计算、构建选股条件。
去除绘图指令,就是说在选股公式中,已经没有必要再保留绘制曲线、变色、标识信号这些功能。
保留关键计算,就是说对于一些核心逻辑的计算是不能省略的,要保留这些计算过程。
构建选股条件,就是说要将关键计算的结果按照既定的逻辑转换为选股条件。
那么我们按照这三个步骤对上面的技术指标做一个改造,就成了下面的选股公式。
{短期、长期的设置,可自行调整}
ST := 20;
LT := 60;
{短期、长期的均线,这里使用MA算法,可自行调整为EMA、SMA、DMA等其它均线算法}
MA_S := MA(C, ST);
MA_L := MA(C, LT);
{金叉信号: 短期均线上穿长期均线}
CROSS(MA_S, MA_L);
相信通过与上面技术指标代码之间的对比,大家也就很容易能够明白两者的区别了,如果你已经熟悉了这种方式,其实只用一行代码就可以实现上面的功能。
CROSS(MA(C, 20), MA(C, 60));
当然了,真正可用的选股公式会涉及多个维度的考量,而且还会根据实战的结果不断进行修正,所以建议大家还是从一开始就建立一个规范,免得时间一长,各种条件增增减减,自己都搞不懂具体是个啥逻辑了。
选股方法
有了选股公式,应该如何使用呢?目前在国内通达信、同花顺等平台都支持自定义的选股公式,甚至还包含了一些基本面相关的函数,比如通过FINANCE可以设定财务数据相关的条件。
在上篇文章中我们已经介绍了一个简单的评分模型,并将其实现成了一个技术指标,如果要把它转换为选股公式,则需要指定一个阈值,即只筛选大于阈值的股票。
转换的过程很简单,只需要添加如下两行代码即可。
{SCORE : (TREND_S * TREND_W + DAYS_S * DAYS_W + DIFF_S * DIFF_W + ATR_S * ATR_W + VOL_S * VOL_W + VOL_DAYS_S * VOL_DAYS_W) * TIME_W * 100, COLOR8318E5, LINETHICK2;}
SCORE := (TREND_S * TREND_W + DAYS_S * DAYS_W + DIFF_S * DIFF_W + ATR_S * ATR_W + VOL_S * VOL_W + VOL_DAYS_S * VOL_DAYS_W) * TIME_W * 100;
SCORE > 80;
毕竟A股市场有五千多个标的,所以有必要先把阈值设的大一些,方便进行观察、验证和调整。
“人生能有几回搏”,既然要发展新质生产力,那我们就从创业板、科创板里来试试好了。
在菜单项中点击“公式”–>“选股公式”将会弹出下面的界面。
首先我们选择自定义的公式,然后点击“加入条件”,即限定使用自定义的选股公式作为筛选条件。然后在“选股范围”里点击“改变范围”选择要在哪个市场、地区、行业、概念、指数等维度进行筛选。
比如我们可以筛选创业板的成分股。
还可以选择纳斯达克100指数的成分股。
还可以选择国内的期货主力合约。
确定之后,再点击“执行选股”即可开始按照指定的条件在指定的市场内进行筛选了。
选股完毕后可以看到筛选到了55个股票,其中就包括相当火爆的银之杰和指南针。
其中指南针达到了94分,从最低33涨到了最高118。
而银之杰更是达到了139分,从最低7.74涨到了最高51。
银之杰满足多头排列的时间更早,截止到当前时间的涨幅也更大,因此其得分应该更高。从这一点上来看,我们这个简易版的评分模型还没有出现太明显的问题。
但是逐个点击进行验证时,也能发现一些问题,比如像下面这个海达股份,我们看三条均线中MA60还没有上穿MA120,也就是说,其实还没有满足多头排列,但是因为它从7块多涨到了15块多,近乎翻倍,所以从涨幅这个维度来看,确实也能说的过去。
所以,关键还是看个人更注重哪个维度,如果更看重涨幅,那么沿用目前的版本即可;如果更看重趋势,那么可以通过调整趋势保持天数的权重-DAYS_W来实现。目前趋势(DAYS_W)和涨幅(DIFF_W)的权重都为0.25,如果想调整,则可以将DAYS_W设为0.4,DIFF_W设为0.1,即可将评分模型修改为更注重多头排列维持的天数。
可以看到,调整之后满足条件的股票数下降到了16个,而且,银之杰仍在其中,但海达股份这种就已经被过滤掉了。
然后我们再试试美股,以纳斯达克100指数的成分股为例。
A股主要是在924之后开启了一番暴涨,所以对于美股进行筛选时还按照原来的阈值就有点不太合适了,经测试,将阈值调整到70之后才筛选到了17个结果。
苹果和特斯拉自然不用多说,我们从剩下的股票中随便选一支,XEL,之前从来没听说过,但是看其走势,确实从均线的多头排列和涨幅来看,是符合要求的。
最后我们再来看一下国内的期货指数,相对来说,商品的基本面更稳定,因此形成趋势后一般能够保持更长的时间。
98个标的只选出了6个结果,而且这还是把阈值调到了60。不过从结果上来看,黄金、氧化铝都在其中,这就说明我们的评分模型在美股、A股、期货市场都是适用的。
最后,如果你觉得通过选股公式筛选出来的结果中没有具体的评分,还要一个一个的点进去看才能知道结果,有点不太方便。那么你可以通过 .401 的功能来对某个市场按照某个指标来排序。它的菜单位置在:功能–>报表分析–>历史行情.指标排序,然后在这个界面选择某个市场,比如纳斯达克100,然后右键,点击“更改排序指标”,选择我们的评分指标,然后点击SCORE列就可以实现按正序或倒序排列。
从图中我们也可以看到,评分大于70的有17个,这也与上面我们选股公式的结果是一致的。而且,前面说XEL看图形走势特别好,这里也明白了,因为它的评分排在了第一名。
定时推送
通过上面的介绍,相信大家已经对选股公式的基本使用已经有了一个大概的了解。当然,后面你完全可以按照自己的喜好添加更多的逻辑去设计一个更加复杂的选股公式。不过,这方面的内容我们往后放放,接下来要完成本系列文章的收尾工作:定时推送。
虽然使用选股公式和指标排序在熟练了之后也并不复杂,但是毕竟还是要学习一些新事物,而且还要每天进行筛选、分析。普通人的第一要务是工作,是赚钱,是攒够本金,所以可能并没有那么多时间去学习和操作。
所以,为了解决这个痛点,我们有必要将上面的步骤自动化,由程序完成筛选和分析的工作,直接把结果推送给我们,然后我们每天只需要对比一下持仓和最新排名的差异,进行轮动即可。
定时推送主要涉及两个步骤:定时任务与消息推送。
定时的话,需要我们有一台服务器,我们把程序部署在上面,并设置定时任务,自动拉取最新的交易数据并完成对每个股票的评分计算,最后输出排序后的结果。
推送的话,需要我们有一个支持开放接口的即时通讯工具,能通过调用接口实现对某个群发送消息的功能,经过调研和实践,企微的群机器人可以实现这个功能。
定时任务
首先我们来看定时任务的实现。
当我们使用诸如富途、通达信、同花顺这些交易软件时,它们会自动同步最新的交易数据,因此在大多数情况下,我们直接使用选股公式进行筛选即可。
但是如果是自己写程序来实现,那么就需要自己来完成交易数据的同步、技术指标的计算、筛选排序的处理。虽然这些功能并不是很复杂,但我们还是应该做一些设计,把子功能分成不同的模块,方便后续对不同的模块进行优化和扩展。
普通人也没有必要了解如何将技术指标转换为Python程序,我们就直接来看处理结果好了。
对商品期货做了个测试,黄金、氧化铝这些还都在。
对纳斯达克100指数的成份股也做了个测试,XEL排在了第一位,苹果也还在其中,说明我们的转换程序基本上没啥问题。
消息推送
对于上面的处理结果,自然是最好能够直接推送到即时通讯工具上,像Slack、Discord都支持这种功能。但是很可惜,对于我们平时使用最多的工具,腾讯却有着各种限制。
好在,它还有一个企业版,而且,企微中的群可以添加机器人,这样就可以通过机器人的Webhook地址来定时发送消息了。
如图所示,我们可以把前面纳斯达克100指数的评分前十名通过机器人推送到企微群,而且每个股票都附上了链接,点击后即可跳转到对应的页面查看详情。
还有一些网友反馈手机卡顿,实在是不能再安装更多的APP了,没关系,我们还可以通过邮件来推送。
同样的列表,同样可以点击编码跳转到股票详情页。而且,邮件可以自定义HTML的内容,相比企微机器人推送的消息,可以达到更加丰富的表现效果。
总结回顾
至此,用了三篇文章,我们把普通人可以使用的交易策略、技术指标、选股公式、消息推送分别做了简单的实现。
交易策略可能略显粗糙,技术指标和选股公式也仅仅是作为一个演示,消息推送的效果也还不够美观,但是,我们毕竟完成了一个逻辑上的闭环,验证了一种可行性。
既然这种方案可行,那么我们就可以在后面的时间里针对每个模块不断迭代和改进,从而得到一个日趋完善的结果。
免责声明:文中提到的个股仅为演示使用,不作为投资建议。
评论(0)