正如之前所说,这个“基你太美”基金模拟交易系统是利用上课时间和课余时间写出来的一个小程序,用时比较短,功能暂时还比较单调。

写小说的时候,我习惯“心中所想,笔锋所致”。虽然我从来不打草稿,但是大多数时候我的手指还是跟不上我的思维。我不敢说这是一种好习惯,不过在写代码的时候,我确实也没有打草稿,而是跟着思维拨动手指,敲下代码。

说实话,虽然我之前已经接触过了C语言,Java和Python,但是大多只停留在学习阶段,并没有写过超过100行的单个程序。在写这个交易系统时,我便选择使用了自己相对熟悉的C语言,虽然掌握水平不高,但是毕竟这个系统并没有涉及太多复杂的原理和高深的知识,因此,如果大家有兴趣,可以通过阅读源码和修改源码,来达到更符合自己交易习惯的效果。同时如果各位如果能从中找出bug并帮助修正,本人将不甚感激。

我的C语言其实全是自学的,水平比较低。阅读这个程序源码所用到的水平门槛很低,大约只需要大一水平便可读懂。下面我为大家对部分代码进行解释。

临时画制参考图

因为偷懒,画图并没有太过精细。从示意图中可以看出,进入到模拟交易后,买卖、定投、复杂策略、自动加仓止盈都只是记录一个值,到了市场变化运算,选择手动、自动或随即数据后才会开始进行运算,运算完毕后自动返回到模拟交易面板。

参数设置和读取方面

第一个需要讲解的地方便是手动输入部分:

手动输入部分

第一段我们可以清楚地看出,这里设置了一个可容纳1000个量的浮点型数组,同时设定了一个叫做“jl”(记录)的值,每当输入成功的时候就会自增一次,来帮助我们确定,到底输入了几次,在之后将进行几次运算。

在读取手动输入的数据时,首先会赋值给一个临时值temp,判断是不是为0,如果为0就停止读取,结束读取功能,如果不是0,就把这个值记录到数组中。

如果希望程序能一次性读取数量超过1000的值,你可以把这个1000修改为更大的值。

第二个要讲的是自动读取部分:

自动读取部分

从代码中,大家可以看出,执行这段代码,是在同目录下读取一个叫做“date”的文件,然后读取其中的数字,一直到读取到“0”才停止。如果你拿到了一个数据样本,有100组数字,但你只用到前10个,那么你在“date”文件中,第10位数后面加一个0便可。

第三部分则是随机涨跌参数的生成:

随机熊牛

其实这几段代码的意思都差不多,随即生成一个涨跌数值。至于这个数值的大小是多少,则是由rand()所决定的。
例如rand()%150-30就表示生成一个0-150之间的数,再减去30,即生成一个-30~120的数。这个范围大部分都是涨的,而且涨的上限值也很高,符合牛市特点。至于为什么会存在-30,因为牛市也会有短暂下跌和回调,设置这样一个范围更符合实际情况。

需要注意的是,这些生成的数据都是随机的,每次运行生成都不一样,只能代表一种趋势。想要用于策略的严格运算,请手动输入参数或自动读取参数。

运算部分

首先来看复杂策略运算部分,因为代码相近,我把两段一起放上来。

复杂买入

复杂卖出

这两段代码应该很好理解,就是在jl(记录)的范围内,执行运算,并开始检测是否设置了复杂策略,如果有,再判断当日涨跌值是否超过了我们所设置的阀值。

有的同学可能会对两段代码里的-0.99和+0.999心存疑虑,这两个数的存在。是为了将不满1%的部分补全,如涨幅3.2%和涨幅4%的买入数量是一致的,因为3.2%在执行运算前,给了它一个0.99%的值,将它补全成了4.19%,取整后为4%。

至于为什么买入的时候是以价格为单位买入,例如买入5000元,而卖出的时候是以份额为单位卖出,例如卖出2000份,这是因为更符合市场交易习惯,而在蚂蚁财富等软件中,都是采用这个方式。

自动加仓止盈部分(图为自动加仓部分代码):

自动加仓

这一部分的代码比较复杂,画了好久的时间才写出来,又测试了很久,终于完成。

虽然while里面的条件名为zhisun,其实是相对于zhiying(止盈)创建的,真正代表的参数意思应该是“加仓”,我偷懒没有修改,这里大家知道什么意思就好。这个条件的执行前提是day大于1,这个很好理解,策略的执行肯定要错开前两天最开始的情况,以免造成死循环。

眼尖的同学会发现,已经设置了一个zhisun的值,但后面却还有一个zhisunkey的值,这是什么意思呢?zhisun代表的是加仓策略的开启,而后者是代表这次运算中是否满足加仓策略的执行。

如果你在研究源代码时就会发现,在第一次执行回调加仓、止盈策略时,它的波动必须是要坐在95%的以下区域或105%以上区域,因为我们想要的是在波动中获取收益,如果波动不大,我们宁可不执行操作。

而当执行一次买入操作时,程序会将zhisunkey暂时关闭,避免第二天即使出现大盘指数+1点,也进行买入操作的情况,同时记录下了此时的交易指数,下一次只有再次跌落超过这个值,并且开始回涨时,zhisunkey才会再次开启,进行加仓交易。止盈方面代码同理。

这时可能会出现一个情况,请看下图:

自动加仓止盈示意图

如图所示,我们知道经过这样一波行情后,最低交易点在2600点,最高交易点在3600,于是,在2600点——3600点这个范围内,因为没有触碰到最低、最高线,所以即使发生了从3600点瞬间跌落到2600点,且开始回涨时,程序并不会执行自动买入,即使那时的跌幅是1000点,但是并没有超过交易点,触发不了zhisunkey或zhiyingkey。

因此,我在里面加入了一个叫做zhisunsum和zhiyingsum的值,当成功加仓止盈后,这个值就会增加一次,当这个值>=2,且大盘指数超过了原始大盘指数的线时,最高、最低交易点就会重置为当前大盘指数,再次上涨或回落超过我们所设置的值,就会重新触发zhisunkey或zhiyingkey,满足连续长期波动交易。

如果你比较激进,或者数据样本中波动太频繁,你想进行更多次数的交易,你可以把这个值的条件改为>=1,但是请不要设置成>=0,因为这样会出错。相反,如果你想要更稳妥,你可以调高这个值,避免频繁交易。

但是根据我个人的见解,如果想要调整自己的交易次数,还不如修改你当初输入计算机内的回调值呢。

再然后是定投部分:

定投代码

这部分比较简单,就是判断条件有没有开启,钱够不够,并没有什么特别难理解的地方。

最后的话

交易系统的构成基本就是这样了,主要难理解的部分就是回转加仓和止盈部分,其他的应该都挺好理解。

之前一直都是自学C语言,也没有人帮忙指点,第一次写这种代码,水平较低,如果你有发现bug或者想添加什么新功能,欢迎联系。

源码和下载数据请看上一篇文章结尾,点击即可下载。本系统完全开源免费,支持个人自用和修改。如需用于商业用途,通知本人后亦可免费使用。

当然,如果你觉得我写的这个程序对你有所帮助,你可以扫码支付随意金额来支持我的工作。我所发布原创软件、歌词歌曲、小说基本都是免费公开,你所给予的赞助和支持将会是我不断前行的动力源泉。

并且,我在此承诺,所有收到的赞助打赏,全部将用于公益事业,并将赞助打赏的支出完全公开。(打赏请备注公益~)

打赏请备注公益!