按照以往的规则,昨晚娃与同学去打球,之后在一家拉面馆吃面。回来途中有些冷,或许是吸入了凉风,晚上便感觉肚子不适。一两点时在沙发上坐了会儿,后来还是吐了。今早起来状况好了些,今天大概得好好休息。
现在嘛,自然是抓紧时间和同学一起玩王者荣耀开黑啦。
关于自动化交易这一块,基本已确定方向。接下来主要从实现层面着手,将各个环节与细节都弄清楚,然后尝试用 Java 代码进行操控,主要是模拟鼠标点击,比如导出文件并读取文件内容再加以分析,还有模拟键盘输入。理论上,这些环节不存在技术难题,但其中也有些细节,我刚才也在反复思索。
其一,获取当前可用资金余额有两种方法。第一种是直接对我的持仓进行截图,接着使用 ocr 服务识别,Java 代码可调用 Java 的第三方库,这种本地调用方式可能更快些,不过识别率会稍低一点,但因其文字较大,我觉得本地调用识别应该问题不大,可以一试。第二种则是调用阿里或
亚马逊云的识别工具,在那上面识别,一是有费用,二是速度会慢些,好处是识别率较高,而我本地的都是标准文字,所以识别率应该也不会有太大问题。总体而言,如果要用 ocr 识别,我倾向于直接使用第三方库。
另一种方式是计算,先给当前总市值一个大概数值,例如 250 万,写入配置文件,然后计算当前持仓,把当前持仓列表中每支股票对应的市值减去,再减去当日已报或待报这类状态的委托单总金额,最终得出的就是当前可用金额。这种方式有个小问题,若持仓总市值发生变化,比如突然转入或转出一笔钱,或者市值自然增减,那持仓总市值就得适当矫正。当然,还有另一种办法,就是每天手动将市值的实际数值输入到配置文件中,这样就是最新的值,只是稍微麻烦一点,不过这问题不大,解决方案至少有这两套。
另外一个问题是对成交的判断,主要是将当前委托单与数据库里记录的委托单作对比,若发现其状态从已报变为已成,就表明该单子已完全成交,那就得准备挂反向单,这难度不大,但却是关键要点。
第三个是挂反向单的逻辑,比如刚成交的单子,无论是向上突破卖出成交,还是向下跌破买入成交是,都是在更高一档挂卖单,更低一档挂买单。也就是完全模仿银河的加强版网格。但这里有个小问题,要先生成的卖出单价位和买入单价位,得与现有的挂单对比一下,若发现现有已报状态的挂单里已经有对应价位,那就不应再挂单。
具体价位也要注意。因价格计算存在一定偏差,我打算将每个价位固定住,给每个价位编个号,且把价位数字作为编号一部分,比如 20241208_40.5 就改成 20241208_405,这样的好处是能与数据库直接匹配,我无需再计算。并且在类似字典表中设置每支股票的代码、名称、价位编号以及价位本身,如此在程序里基本只需用价位编号作为键,取值时取出对应的值即可。再者,再给个序号,即每个价位都有下一个价位,取出序号就能自动获取其下一位或上一位价位,如果取不到,就代表已到最高位或最低位,那就无需操作。这样能避免临时的手工计算和电脑计算,因涉及浮点数容易产生误差,现在直接取值就是固定值了。
程序启动时从数据库字典中直接加载数据放到内存对象中保存起来。
除此之外,还有个好处,若手动挂单成交金额与程序预先设置的价位列表不相等,若有成交就做特殊标记,即认为是人工挂单成交,将其忽略,人工挂单成交若不是标准价位,就让其对应人工再反向操作,这样现有的整套逻辑总体不受影响。不过这里有个小问题,人工操作会影响持仓量和当前可用量,这是个弊端,但总体来说问题不大,若涉及人工操作,最好先暂停自动化交易软件,做完人工操作后,后续主要是人工反向操作,理论上应尽量避免人工操作,因其相当于临盘决策,不太合理。
第四点,若整个股票软件能顺利运行,我就无需量化策略了,每天只要开启程序,它就能自动帮我交易,还能实现特定网格交易,比如跌到某个价位,对应的买单和卖单数量是多少,这些都能提前在数据字典里配置好,到了相应位置就自动按逻辑买卖,这样能尽量避开情绪干扰。
第五点,如果程序运行稳定,我将重点使用
东方财富,目前正准备适配其自动化交易。它的最大优势在于软件稳定且人性化,还有 vip 交易服务,也开通了
融资融券,后续若要使用融资,可人工操作或扩展程序适当介入融资操作,不过要格外谨慎。
第六点,我打算先使用 pc 版东方财富证券里的模拟盘,只要菜单相似即可。使用模拟盘的好处是能随意折腾、挂单,不会对实际金额产生影响。当然,也可以间接操作,真要测试时,选一只价格较低且稳定的股票做网格交易,用自动化程序实现,练一两个星期,把遇到的问题尽量解决好,资金大部分先转至银河证券,等这边稳定运行后再转回来,这样更稳妥。
第七点,如果股票交易稳定,日后尽量集中使用一个账户,若有更多账户需要操作,可考虑同时登录多个账户。东方财富有个功能,按键盘上的 or + 1 可显示当前账户,or + 2 显示另一个账户,几个账户间可切换,但这会增加程序复杂性,较好的方式是用多台电脑,每台电脑单独控制一个账户,若账户规模较小,设置网格单条件单或人工操作即可,若同学账户资金规模较大,就有必要设置自动交易,毕竟其参与标的多,成交数量可能也多,若自动化交易能实现,可节省大量人工操作。这样理论上也能接入更多账户,若每台笔记本电脑操作一个账户,准备两三台笔记本电脑基本足够,且每台电脑若都是东方财富证券交易,代码基本无需改动,只需在取鼠标区域坐标位置时,因不同电脑分辨率有差异而稍作调整,若想更便捷,可购买几台型号相同的笔记本电脑,调好一台后,其余可参照设置。
除了操作股票,理论上按此思路也能操作期货,前提是期货的交易委托单等都能导出为 Excel 文件之类的,若可以,这些理论上都能达成。这样每台电脑开一个自动化程序控制一个账户,理论上控制七八个甚至十个都没问题,若一个人同时看两三台电脑,或三四台电脑,两三个人来看七八个或上十个电脑也可行。如此一来,之前所说让机器、电脑模拟操作,告知其操作逻辑,就相当于通过自动化程序实现了这一点。从这个角度讲,自动化交易与量化交易存在极大区别,量化交易一般包含自动化交易,但自动化交易很多时候不属于量化交易,我的策略非常简单,无需像量化交易那样做很多诸如当前符合某个技术指标、涨速等临盘分析决策。当然,我的方式也有缺点,因很多是通过导出文件再分析数据,尤其是导出委托单那部分需反复操作,所以实际操作时速度没那么快,但估计 5 - 10 秒处理一个成交单的反向单应该足够,所以理论上比人工操作还是要快些,且更安全可靠。