首页 » 99链接平台 » 副业量化!公开我的量化程序的开发代码!(策略程序量化收益股票)

副业量化!公开我的量化程序的开发代码!(策略程序量化收益股票)

admin 2024-11-02 08:47:56 0

扫一扫用手机浏览

文章目录 [+]

但是我很快就想到另外一个思路。
我曾经设计过不少版本的交易系统,我何不用这个程序来验证一下那些交易系统到底靠谱不靠谱,原来设计交易系统的时候只是随便找自选股中的一些股票,看着图形就算了,这些交易系统我自己也不知道究竟是否靠谱。
于是我很快花了一两天时间写了一个简单的回测程序(看了一下,这个程序还在我的硬盘里,1000行左右的代码,逻辑比较完整,不但可以回测,还可以暴力搜索参数,也是开始回测我设计的那些交易系统。

接下来,我开始对这个程序比较感兴趣,而python明显不是我喜欢的语言,于是很快用nim语言将程序重新实现了一遍,开始了我自己的量化程序的开发过程。

总结:回顾第一阶段的过程,我觉得最大的价值就是让我从头开始去写整个回测的程序,而不是用各种开源的框架或者网上的线上回测,这使得我后面可以亲历每一个策略实现的细节,对我理解整个交易系统的执行过程以及各种细节的关键性非常重要,从而为我建立对自己交易系统的信心打下坚实的基础。

副业量化!公开我的量化程序的开发代码!(策略程序量化收益股票) 99链接平台
(图片来自网络侵删)
二、初始策略

一直到2020年下半年的时候,虽然程序已经改了很多版,功能也开始有很大的增强,但是策略却没有很大的突破。
那个时候主要的买入卖出策略考虑以下几个因子:

均线方向,均线方向是向上还是向下的均线交叉,金叉还是死叉MACD,0轴上,dif和dea的关系等股价突破,股价突破n日高点或者低点股价和均线的关系,在均线上还是均线下时间周期,当前处于哪个时间周期

最后回测下来,买入的条件就是简单的股价突破,卖出的条件是均线向下,并且股价跌破某个均线,那是用的是30分钟周期的数据回测的,从2018年到2020年下半年,我记得大概A股所有股票的平均收益是110%,还有那时候的回测结果的图保存着:

策略主要的执行方式是手工,股票池是手工选的,每个周期结束的时候实时获取股票数据,计算是否有买点,如果有买点就通过邮件发送出去,我可以在手机上收到邮件,根据邮件中的股票和买卖价格手动进行下单。
不过这个阶段并没有很好的去执行这个策略,因为虽然看上去回测收益还不错,但是我对它还是没有任何信心。

总结:回顾这个过程,最大的价值是我从一开始就坚持A股所有股票一起回测,而不是针对某一些股票去单独回测,我的目标是随机选股,建立一个适用于所有股票的交易策略,而不是依赖于选股的策略。
当然这个过程中也暴露出很严重的问题,就是没有按照最终希望的交易过程去建立回测过程(回测和实盘不一致,回测策略终究不靠谱),这使得接下来的一个阶段一直停滞不前。

三、策略停滞阶段

这个阶段大概是从2020年10月份开始一直到2021年底,觉得程序写差不多了,然后策略也没有明显可优化的地方了,实盘也一般般,有时照着执行,有时凭感觉。
接下来一段时间主要是以优化代码为主,各种代码的重构,外围功能的增加和完善,比如和同花顺的交互,交易信号告警的优化等。
策略的变化主要通过变换周期来调整,从30分钟周期调整到5分钟周期最后到15分钟周期,但是因子还是原来的一些,又增加一些新的突破类型。

总结:这个过程其实蛮无聊的,整个量化策略没有任何实质性的进展,个人对此也没有任何信心,也没想过这个东西最后真能帮我赚钱,只是凭借着对写程序的兴趣,无聊时用于打发时间而已。
我觉得另一个原因是缺乏志同道合的人进行交流,很多想法是需要通过相互碰撞出来的,一个人想很快就会到达黔驴技穷的阶段。

四、策略突破

时间到了2022年春节,上海出现了疫情,只能在家里上班,每天通过远程会议工作。
这段时间,我开始重视轮动策略的开发,因为这个才是和实盘一致的交易模式。
于是我推翻了原来的实现方式,重新按照实际的交易模式设计了轮动回测过程,在这个过程中意识到了非常重要的一点:在全A平均模式下,我追求的最大收益和在轮动模式下追求的最大收益是不一样的,在轮动模式下,只有单笔交易收益率高,轮动策略的收益才可能高。
于是我开始调整交易策略,把参数优化的方向往单笔收益率高的方向靠拢。
很快,交易策略在轮动模式下回测结果已经能够达到我的期望了,随机选取A股的100只股票作为轮动股票池,2018-2022四年的年化收益可以达到31%。
然后随后几天我再接再厉,策略中增加大盘指数的判断,年化收益上升到48%,用2010-2018年的数据回测,年化收益也有38%。
于是我知道我的策略终于突破了,正如我在其它回答里说的那样,在那一刻,我改掉了我的一切关于交易的坏毛病,从此以后我的交易里只有策略,没有我,策略说买,我必须买,策略说不买,我绝不买。

总结:策略的突破其实很快,其中没花几天时间。
当然从我的角度来说,最核心的其实是我的程序的性能优化工作。
在很早以前,我已经写了轮动策略的回测程序,但是那时候程序执行的太慢,每一次执行大概要花十五,十六秒左右,我五、策略起飞

接下来大概从2022年5月份开始,我又进行了一系列的策略优化,其中非常关键的就是对出现信号的股票进行排序,能够把潜在收益高的股票排到前面,这个非常重要。
当然这个过程也不简单,主要还是在各种因子的尝试上,我设计了10个左右的排序因子,然后通过调整权重不断地尝试,最后选定了几个因子和相应的权重。
排序的加入使得策略的理论收益进一步提高,该收益已经远远超过我的预期。
在这个过程中,量化程序的其它方面也都有了很大的提高,周边的各种功能都被我加入到了程序中,我个人比较喜欢一个小程序搞定一切的方式。
由于感觉一切都差不多了,我后面就把自动化交易这部分给加上了,从此以后,所有的买卖都是程序自动化完成,我在手机上只是偶尔看看程序发过来的买卖信号而已。

总结:自动化交易是一个非常关键的步骤,在没用自动化交易前,需要手工下单,这个过程又麻烦,效率又低,而且潜在诱惑破坏规则的可能(我破坏过一次,没有卖出信号,我卖出了,结果第二天大涨),自从自动化交易完成之后,觉得整个人特别轻松,看行情我就是一个旁观者的心态,无论涨跌都和我无关,反正自动化程序会帮我搞定一切。
另外自动化交易要求自己的自己的策略非常有信心,而且要求自己对自动化程序很有信心,中间不会出任何纰漏。

六、持续改进

从2023年开始,我觉得自己的量化程序应该都做的差不多了,接下来可能没有太多的开发和策略调整的事情了。
不过检查了一下我的gitlog,2023年我的程序还是提交了700多次,虽然大的调整很少,但还是有各种零零星星地改进和调整。
现在策略已经基本上到达很难改进的程度了,而且理论收益也已经到了我无法更加满意的程度,至于说后面还能有什么改进,我想看机缘吧。

对了,最后说一下程序的规模。
程序主体大概4w行,其它辅助代码1w行。
代码比较简洁,换成其它语言,代码规模应该会增加,换成C++,代码规模应该2倍或者3倍左右。
另外命令行参数大概700个,主配置文件150行,策略配置文件1000行。

补充信息

1. Python代码

前面说的python版的初始代码我已上传github,地址是:

GitHub - slangmgh/stocktest,请需要的同学自行下载。

2. 回测性能数据

补充一下有关性能的数据。

首先回测全A平均收益和轮动是不一样的。
所谓全A平均收益回测,是指用交易策略对每一个股票单独进行回测,每个股票是独立的,所以可以利用CPU多核并行能力。
而轮动策略(我的轮动和网上的那些轮动可能不是同一个概念)是指在固定股票池,固定买卖资金份数的情况下,根据规则产生的买卖点进行买卖的过程,所以股票池里面的股票无法单独独立进行回测(因为有资金份数的限制在那里),因此只能单线程按照时间一步一步推进进行回测。

这个是全A平均收益的回测速度,1.5秒5900万条K线:

这个是进行轮动回测的速度,2.6亿条K线,大概8秒左右完成:

目前使用的机器是一台笔记本,thinkpad p15,cpu是 i7-11850H。

3. 关于实盘和回测

关于实盘和回测的关系,其实以前专门写过一篇: 小马哥:说说回测和实盘,这里再总结几个观点:

1. 实盘的结果必须和回测的结果基本一致,所谓基本一致就是99%是没有差别的。
实盘和回测结果不一致的策略其实是没法用的,你永远不知道哪个细节在实盘中会把你的收益全吃掉。

2. 你对策略的信心必须建立在回测结果之上。
回测必须建立在长时间的大数据之上,这样逻辑经过充分验证,策略才是可信的。
至于实盘,策略实盘运行的那点时间,靠这个来建立信心,验证策略的可行性,那是本末倒置。
实盘就是用来赚钱的。

4. 关于策略执行的心态问题

其实没有啥心态问题,在任何时候,你永远都是“知行合一”的,你所谓无法执行的问题本质上就是你认知没有到位的外在表现。
具体到交易执行过程中,你无法严格执行你的策略原因只有一点,你对你的策略无法100%的信任,所以又回到上面的那个问题了,你如何建立对自身策略的信心,在我看来短时间的实盘(3年或者更长时间以内)无法让你建立充分的信心,只有策略的底层逻辑和基于长时间大数据的回测才能。

标签:

相关文章