昨晚想到要开发量化
实现低价股提前挂单的网格交易
东方财富证券目前可以支持掘金量化接口
模拟盘的话没有资金限制
实盘呢需要300万开通
我目前想从模拟盘入手
刚才也仔细思考了具体的实现逻辑
在纸上写了过程
现在形成文字
方便查阅和修改
总体原则是
实现低价持仓股的提前挂网格单以及成交后自动挂反向买卖单功能。
总保险,为了防止程序出错造成的困扰:
0、如果量化程序上实盘,记得在东方财富的APP与PC段关闭该低价标的的网格单,
最好也关闭其它条件单,以免造成困扰与混乱,
同时如果盘中想手动操作,请先关闭量化程序
1、模拟盘的低价持仓股模拟运行至少3个月
每天分析是否出现异常情况,后续才考虑上实盘。
2、每只低价股的资金设置上限
比如电信总持仓股份数不超过10万股之类
3、某只股票如电信,每天程序产生的委托单和成交单也做限制,以免产生过多的无效或重复的单子
比如委托单总数大于8笔、成交单大于5笔时,
量化程序当天不再操作电信
但大秦如果没有触及这些限制,仍然可以继续;
4、为了尽量简化程序开发,建议不同的低价股开启不同的量化程序实例。
即可能是一套代码,但是分成2个程序,方便控制,减少互相干扰。
一些小保险:
4、如果某只股票当天可售数量<200股
则当天不再生成该股票的卖单;
5、如果当前可用资金 < 标的股价 * 数量
则不生成此笔买单
特殊情况:
6、如果当天开盘后跳空高开或低开
多笔买卖单成交,则按挂牌价生成多笔对应的反向单;
7、如果当天开盘或盘中极短时间出现暴跌又迅速拉回
则可能在3秒内同时成交了买卖单,
系统扫描时可能根据成交的卖单如6.70元卖出成交,生成了6.6元的买单
同时根据成交的买单6.50元生成了6.6的卖单
那么再提交之前需要先进行合并,做“中和”处理,实际上两个6.6的买卖单都不提交
~~~
量化程序具体逻辑
开盘前(也可以前一天晚上)挂初始单
有两个办法
A、手动挂单,就像现在一样;
B、使用量化程序生成,需要手动指定中枢价位;
开盘后(盘中)处理逻辑,
以下以
中国电信为例。
监控电信的成交情况,理论上有2种方式,一个是不断扫描电信当天的成交单
另一个是以消息订阅的方式,即如果有成交的话,量化程序将会收到一条消息
具体哪一种待补充。
现在就针对卖单成交与卖单成交分别处理。单位5000股,价差0.10元
昨晚中枢价位 6.60 , 挂了 6.50 、 6.40 买单, 挂了 6.70 、6.80 卖单;
1、卖单成交,成交价 6.70 元,成交数量5000股(即完全成交才继续,否则视为未完全成交,不用继续往下)
那么计划挂 6.80 卖单,挂 6.60 买单;
2、买单成交,(假如说盘中经过了一系列其它的操作,又挂了 6.70 买单),成交价 6.70 元,数量 5000 股,即完全成交。
那么计划挂 6.80 卖单,挂 6.60 买单
从上述1和2可以看出
无论成交的买单还是卖单,对应的都是上面一格挂卖单,下一格挂买单。
那这样后续的逻辑就简单很多。
当然,因为电信总体来讲,盘子大,极端情况出现行情反复变动速度超级快极低概率情况下,导致需要提交中和单,即6.70价位可能同时生成买单和卖单
这种情况极其罕见,我觉得不用做特别处理,就是提交了中和单,最多就是损失一些手续费,完全可以接受。
那总结上面的情况,
A、发现一个成交单子的情况,如 670 卖单成交,生成 660买单和 680 卖单。
这时需要扫描(已提交但)待成交的单子,发现 6.50买单 、 6.40 买单, 6.80 卖单
那么这里 680 卖单重复了,剔除重复的 680 卖单后
实际只需要提交 660 买单。
如果接下来 680 卖单又成交了,生成 670买单和690卖单
此时待成交的单子有: 660买单、 6.50买单 、 6.40 买单
没有重复的,那么就直接提交 670 买单和 690 卖单。
B、如果同时发现2个(或跟多)单子,就针对2个单子分别生成买卖单,累计4个单子;
好比说 NEW_DONE_QUEUE : 6.70和6.80卖单都成交了。
那么生成 GEN_QUEUE : 660买单、680卖单、670买单和690卖单
系统目前待成交的单子是 WAITING_QUEUE: 6.50买单 、 6.40 买单
理论上来说 680卖单应该剔除掉,但是按照什么方式比较呢,还要仔细思考下
也许应该:
1、跟前述扫描到单个消息时逻辑一样,先从待成交的单子里剔除
GEN_QUEUE - WAITING_QUEUE , 但是因为 两个集合没有交集,所以结果还是 GEN_QUEUE
2、再从 NEW_DONE_QUEUE 中剔除,即
GEN_QUEUE - NEW_DONE_QUEUE 可以剔除 680 卖单,剩余的结果集合是
660买单、670买单和690卖单
这个逻辑其实也可以应用到一次扫描识别出新的单个成交记录的情况
即 B 其实是包括 A 的。
至此基本分析完成。
接下来再仔细检查下上面是否有疏漏或错误。
再考虑安装掘金量化客户端