Python美股量化交易填坑记录——14c.W底交易机器人(实盘记录)
Posted ChristopherShen2021
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python美股量化交易填坑记录——14c.W底交易机器人(实盘记录)相关的知识,希望对你有一定的参考价值。
该系列原发表于知乎(https://www.zhihu.com/people/ChristopherShen/posts),但最近知乎删我文章(理由是:包含垃圾广告或营销信息),就转移来CSDN了。
之前两篇帖子介绍了基本的设计思路和一些case的分析,接下来就该进行实盘测试了。
第1天实盘:10月11日,周一
今天不是很顺利,盘中尊嘉证券出了点问题,机器人也出了点bug,就停止实盘了。
在半个交易日内出现了8个信号,入场了7个,共亏损19刀。
前提是放宽了筛选条件:股价范围从200-300改为50-1000,日成交额从top200改为top300。
止损4单,亏损19刀。
- NKE:典型负例,主要问题是入场太晚,按现在的机器人算法,首次可以入场的点是在上一个交易日。今天再入场,就晚了。回顾一下目前入场点的三个条件:(1)最近一个顶底标记是顶,(2)且最近一个底标记是is_lower_high_w,(3)且股价高于W顶。这个case中,条件1应改为“最近一个顶底标记是顶,而且是首次高于W顶的顶bar”。
- XLP:典型负例,而且没得救,因为此入场点之前已无更合适的入场点。
- TDOC:类似XLP,算法认栽!
- CSCO:类似XLP,算法认栽!
止盈3单,不赔不赚。
- XBI:按W底的设计思路来说,本该是个典型正例,但为什么没赚到钱呢?原因是入场略晚,而出场太快!10:15-10:30的bar还没走完,10:20就入场了,入场不算晚,若改进算法的话,可以再提前一根bar入场,不过这是次要问题。主要问题在于10:27就出场了!细查点位数据后发现,原来入场是踩着移动止盈开始位(124.52)入场的,所以一入场就启动了移动止盈,导致极其轻微的震荡(0.14%)就把机器人震出来了!出场位为124.41!改进措施:(1)提高移动止盈开始位:设置移动止盈开始位=止盈位;(2)提早入场,即便还是10:27出场,也是收益正向,但前一根bar没有顶标记,涉及修改入场位定义。
- IBM:形态不是很好,利润不多。若提早入场,如首次涨破W顶时入场,则在上一个交易日入场,尾盘时不赔不赚离场。若改为移动止盈开始位=止盈位,则也能达到。
- IWD:入场晚了,若首次涨破W顶时入场,则可以提前2根bar入场,且能打到止盈位!不过也就仅此而已了,利润一般。
第2天实盘:10月12日,周二
今日发现信号21个,入场13个,共亏损20刀。
止损7单:亏损19刀。
- MDLZ:本来是个典型正例,但因为目前采用的是0.5倍止损位,所以被洗出去了。如果变回1倍止损位(W底的前低),则这一单不会止损,而且能达到1倍止盈位。缩小止损和止盈比例,是根据上周五(10月8日)信号进行总结得到的,取样确实比较狭窄,可以考虑再变回1倍止损。高低位判断:底在EMA144之下,算是低位。
- FB:与MDLZ类似,被0.5倍止损位洗出去了。这个case离1倍止盈位差一点,应该维持0.5倍开始移动止盈。高低位判断:完全在EMA144之下,算是非常低的低位。
- TGT:典型负例,一涨破W前高就马上下跌,似乎是机器人的克星!高低位判断:底在EMA144之下,算是低位。如何提前识别呢?暂无思路,算法认栽。
- GS:类似TGT,典型负例,克星。而且还是低位。
- CP:疑似K线误差,没有算出W的前高是69.15(9:45-10:00),而错误地把68.89当做入场位。翻查指标csv文件后,问题更严重,是顶底标记判断有误!改进措施:python脚本和富途脚本再次核对逻辑。
- PYPL:类似CP,跟富途图形对不上。
- ABT:14:30的bar才出的信号,时间太短,不好评价正负例。如果变回1倍止损位,则此单会在尾盘清仓,亏损能略少点。
止盈2单:盈利18刀。
- BYND:典型正例,而且几乎卖在了最高点,支持了0.5倍止盈位的正确性,如果换回1倍止盈位,则无法到达。高低位判断:底在EMA144之下,算是低位。
- MRNA:典型正例。但能到1倍止盈位。改进措施:移动止盈太敏感,之后应考虑结合ATR,让各个票的移动止盈比例不同。不过当前阶段的重点仍然是消灭止损单。
尾盘平仓4单:亏损19刀。
- ACN:跟富途图形对不上。
- UAL:典型负例,克星,入场后仅隔了1根bar,马上开始下跌。
- PEP:入场后有上涨,但未到0.5倍止盈位,仅到0.39倍,然后一路下跌至尾盘。改进思路:因为这个case在EMA144之上,算是高位W,以后只入场低位W。
- TWLO:入场后最高点为0.26倍止盈位。改进思路:经Fermi兄提醒:这属于“窄幅震荡”波形。
改进措施小结:
- 恢复1倍止损位,但移动止盈开始位仍为0.5倍。(已修改)
- 只入场低位W。(已修改)
- 核对python逻辑:CP、PYPL、ACN。
- 给出“窄幅震荡”的定义,然后排除此类信号。
第3天实盘:10月13日,周三
今日发现信号21个,入场15个,共亏损1.11刀。
关于如何消灭止损单,Fermi兄给出了一个终极解决方案,从源头上消灭止损单:利润减少一半,立即清仓!市价一旦低于成本价,立即清仓!
这样做的话,就不需要根据W的底和顶来决定止损位和止盈位了。
个人觉得,这个思路很保守,极端厌恶损失,优势是几乎不会亏钱,劣势是可能会卖飞。
盘中最后2小时,在模拟盘上放了一个这种机器人,简称为“利润减半就走”机器人。最后再来说它。
止损单:2单,亏损10刀。
- XLB:一开盘就是一根大阳棒,直接从W底涨破W顶,机器人立即追进去,然后马上变成阴棒,后面又来两根阴棒,跌破止损位,这次是正儿八经的1倍止损位(W底)!真是机器人克星。最关键的是:没到移动止盈开始位81.97,最高位是81.88,就差一点!然后又涨回来,最高点到82.28,突破止盈位81.97!突破一倍止盈位82.25!改进措施:对跳空高开单独处理?(比较棘手)或者采用“利润减半就走”的玩法?或者扩大止损比例?多积累一些case再看。这种类型命名为“跌破止损的正例”。
- BK:也是跌破止损位后涨回,但没到止盈位,不算正例。如何提前识别呢?暂无思路。
止盈单:7单,盈利25刀。
其中6单的信号来自开盘第一根bar。
- TSM:开盘大涨,非常幸运地到了移动止盈开始位,然后下跌,离场。典型正例。而且未到1倍止盈位110.18,说明现在的0.5倍止盈设置合理。
- SQ:类似TSM,非常幸运地到了移动止盈开始位,之后高位横盘。典型正例。而且未到1倍止盈位244.07,说明现在的0.5倍止盈设置合理。
- BNTX:类似SQ,典型正例。但移动止盈太敏感,导致错失了之后的1倍止盈位249.62。
- XLU:开盘就出了信号,但预计那时不在成交额top300里面,所以机器人未进场,刚好机器人避开了上午的下跌,下午涨回入场位,机器人入场,几乎是卖在了最高点,感谢移动止盈,卖点已破1倍止盈位。即便上午入场,没破止损位,也能撑住。典型正例。
- XLC:类似XLU,开盘涨破入场位,然后大幅下跌,但没破止损位,下午涨回入场位。机器人下午入场,几乎是卖在了最高点,感谢移动止盈。而且未到1倍止盈位79.87,说明现在的0.5倍止盈设置合理。
- JNK:与XLU类似,上午出的信号,下午才入场,不同的是,上午跌破止损位,下午涨回入场位,机器人幸运地躲开了!算是“跌破止损的正例”。但移动止盈太敏感,导致错失了之后的1倍止盈位108.52。不过跟现在的出场位108.43也差不多了。
- ACN:计算有误差,实际是一开盘就涨破入场位,机器人只看到是11:30涨破入场位(也可能是后面的记录覆盖了前面的)。非常幸运地躲过了上午跌破止损的大洗盘。算是“跌破止损的正例”。下午几乎是卖在了最高点,感谢移动止盈。而且未到1倍止盈位244.07,说明现在的0.5倍止盈设置合理。
尾盘平仓:6单,亏损16刀。
- DKNG:类似XLB,有大涨,但非常不幸地,没到移动止盈开始位50.65,最高到50.49,又是就差一点!这时我的心情就很想支持“利润减半就走”的玩法,虽然此法也有弊端。一根大阳棒之后就是下跌、横盘,所以机器人买在了山顶,浮亏严重!改进措施:对跳空高开单独处理?(比较棘手)或者采用“利润减半就走”的玩法?
- MS:克星。一开盘就产生的信号,13点多才入场,推测与动态成交额筛选名单有关。幸好上午没进场,否则跌破止损位割肉离场。如何提前识别此类非正例?暂无思路。
- AVGO:典型非正例。出了W形态,但横盘,不涨!克星。改进措施:暂无思路。
- MRVL:克星。几乎是典型负例,离止损位很近了。出了W形态,但马上下跌!改进措施:暂无思路。
- MDY:计算误差较大,这个W不是higher low,不应该通过信号过滤!
- CI:类似克星,涨到入场位就开始下跌。不过时间较短,可能第二个交易日会涨。
小结:
- 越来越多的“克星”case被发现,不知如何改进,让我开始怀疑W底理论的正确性。
- 跌破止损的正例,让我看到了庄家洗盘的凶残,暂无应对措施,一旦放宽止损,恐怕亏得更惨!
“利润减半就走”机器人
虽然只在模拟盘上跑了2个小时,但收到信号31个,其中8个是“未入场,已跌破止损位,放弃入场”,入场23个,亏损4.5刀。
盈利的只有4单,盈利2.5刀。
亏损的有16单,亏损7刀。
其中亏的最多的是XLU,入场价64.965,出场价64.900,15股,亏损0.98刀,亏损率为0.10%。入场时间2021-10-13 14:20:53,持股时长6分半。查看分时图,确实那几分钟是持续下跌的。
而且此单的标记不是“已止损”,而是“已移动止盈”。说明判断逻辑有问题,更正后再试。
第4天实盘:10月14日,周四
今日发现信号4个,入场3个,亏损9刀。
止损单:2单,亏损12刀。
- JPM:类似前一日的XLB:一开盘就是一根大阳棒,直接从W底涨破W顶,机器人立即追进去,然后马上变成阴棒,跌破止损位!马后炮:扩大止损比例,最后能到止盈位!甚至能到1倍止盈位!特殊类型:跌破止损的正例。改进措施:暂无思路。
- MRK:克星。入场后又涨了一根,然后一路下跌,跌破止损位。改进措施:计算有误差,开盘破了新低之后,此W便不是higher low了。
止盈单:1单,收益3刀。
- WMT:典型正例。未到1倍止盈位,但感谢移动止盈,几乎卖在了最高点,跟1倍止盈位很接近。
未入场,已涨破止盈位,放弃入场:
- FB:马后炮:涨破止盈位也可以进啊,因为还会接着涨!
小结:
W底机器人,对克星形态和大洗盘(跌破止损的正例)仍然没有应对思路,周五再试一天,还亏的话就放弃这个机器人,专心做隧道机器人。
另外,“利润减半就走”机器人试了2个票,没赚到钱,然后就放弃了,因为服务器难以支撑同时跑3个机器人(及其配套的子机器人)。
第5天实盘:10月15日,周五
今日发现信号11个,入场7个,盈利9刀。
上午只入场了1个,下午放开了价格限制(50-1000刀)。
止损单:1单,亏损3.6刀。
- UAL:放开价格限制以后出现的信号,但那时已经涨完了,一路下跌,然后跌破止损。若是首bar就进场,则支持1倍止盈位,就在首bar内触发移动止盈,并跌至移动止盈出场位,则此单变为止盈单。改进措施:放开价格限制;今日到过止盈位的票不进场。
止盈单:3单,盈利10.8刀。
- JNJ:典型正例。不支持1倍止盈位。几乎是到了最高位然后移动止盈的,不存在卖飞。但因为成本太高,所以利润微薄。改进措施:入场再快些。(可能是计算耗时而耽误了)
- DIS:今日利润的主要贡献者。典型正例。支持1倍止盈位,且实际出场位已超过1倍止盈位。改进措施:入场再快些。(晚了一根bar,否则成本更低,可能是计算耗时而耽误了)
- VXX:误差较大,跟futu的图形对不上,但是因祸得福。支持1倍止盈位。改进措施:更正python机器人逻辑。
尾盘平仓:3单,盈利1.86刀。
- ABT:误差较大,这个W不是lower high,应该被过滤掉。放开价格限制以后出现的信号,但那时已经涨完了,之后横盘,最后几乎平本出。但此票价格不应被限制,为什么上午没见到它的信号?可能是成交额从非top300进入top300。如果首bar进场,则可以到止盈位,此单变为止盈单。改进措施:当信号较少时,放宽成交额限制。
- RTX:进场时已经涨完了。如果首bar进场,则可以到止盈位,此单变为止盈单。改进措施:当信号较少时,放宽成交额限制。
- BILI:误差较大,W的顶没有采样正确,所以低估了顶,过早入场。
未入场:(已跌破止损位)
- PFE:克星。涨破入场位后一路跌破止损。幸好上午此票被价格限制挡住,否则又是一个止损单。
- MCD:若是首bar入场,则变为止盈单。但不到1倍止盈位。改进措施:当信号较少时,放宽成交额限制。
- LUV:若是首bar入场,则变为止盈单。但不到1倍止盈位。而且如果采样没取到止盈位,导致没有开始移动止盈,最后可能变成止损单。改进措施:增加采样精度;当信号较少时,放宽成交额限制。
未入场:(已涨破止盈位)
- MELI:股价超过1000。典型正例。支持1倍止盈位。
小结:
- 当信号较少时,放宽成交额限制。
- 虽然克星和大洗盘依然存在,且依然没有应对思路,但W底理论仍然有一定的盈利能力。若时间和精力允许,应继续实验,调整机器人参数。可惜本人目前还是一个上班族,所以只能选择盈利能力更前的隧道机器人进行维护和迭代。
- 若以后隧道机器人稳定盈利了,或本人全职炒股了,再回来把W底机器人捡起来。
围观链接
机器人布置于国内知名的量化平台——FMZ网(发明者网),机器人状态已设置为公开可见(请先注册FMZ网,免费):
查看买入信号:https://www.fmz.com/m/robot/368168
查看交易状态:https://www.fmz.com/m/robot/369376
以上是关于Python美股量化交易填坑记录——14c.W底交易机器人(实盘记录)的主要内容,如果未能解决你的问题,请参考以下文章