目录
1.背景和目标
2.算法介绍
3.机器人参数
4.实盘测试(进行中)
第1天实盘:10月6日,周三
第2天实盘:10月7日,周四
第3天实盘:10月8日,周五
第4天实盘:10月11日,周一
第5天实盘:10月12日,周二
第6天实盘:10月13日,周三
第7天实盘:10月14日,周四
第8天实盘:10月15日,周五
5.围观链接
该系列原发表于知乎(ChristopherShen - 知乎),但最近知乎删我文章,还不给理由,就转移来CSDN了。
1.背景和目标
上一次编写和使用小蓓机器人后,积累了一些对接实盘交易接口的经验,同时也坚定了我寻找完全自动化交易算法的决心。
跟一些朋友交流之后,得到了一些量化的思路,其中最易实现的应该是“隧道交易法”,只需2条ema即可,于是决定先编写隧道交易机器人。
2.算法介绍
据这位朋友介绍,隧道交易法出自于youtuber:金老师的看盘室
金老师讲解视频:
https://youtu.be/vu2ipEjClQc
金老师的讲解非常清晰!根据金老师的方法,我首先在TradingView上编写了pine脚本:
https://cn.tradingview.com/script/s6lXtVqy/
抽查了一些case,感觉效果很好,比如下图的SPY日线:8次预测(5次做多、3次做空),7次正确!(红线是止损线,绿线是按盈亏比1:1设置的止盈线)
算法原理如下:(摘自我的TradingView)
这是一套完全根据均线进行交易的指标体系,属于右侧交易,思路如下:
(1) 基本趋势(大趋势)
短期均线高于长期均线时,是上涨趋势;反之,是下降趋势。
暂定短期均线为ema12,长期均线为ema169。
(2) 第一种买入点(或做空点):趋势确立
从上涨趋势确立的那根bar开始,第一个出头的bar,是第一买入点。(出头,是指收盘价高于开盘价,且高于前一根bar的高点)
从下降趋势确立的那根bar开始,第一个落尾的bar,是第一做空点。(落尾,是指收盘价低于开盘价,且低于前一根bar的低点)
(3) 第二种买入点(或做空点):拉回时的买入点(或反弹时的做空点)
拉回时(回调时)的买入点,是指大趋势是上涨,但小趋势是下跌,当明确下跌结束时,可以买入。
这里需要定义2个概念:“拉回(回调)”和“下跌结束”。拉回的定义是,大趋势是上涨时,bar跌破长期均线,此时短期均线仍高于长期均线;下跌结束的定义是,出头且ema12在上升。
同理可知什么是“反弹时的做空点”:
大趋势是下跌,但小趋势是上涨,当明确上涨结束时,可以做空。
(4) 止损位和止盈位的设置
做多时:
止损位:买入点前一根bar的低点。
止盈位:止损位确定后,按盈亏比1:1确定止盈位。(默认值为1,用户可以修改)
做空时:
止损位:买入点前一根bar的高点。
止盈位:止损位确定后,按盈亏比1:1确定止盈位。(默认值为1,用户可以修改)
3.机器人参数
实盘做起来之后,发现还是有一些难点和细节需要敲定,同时也是日后迭代可以改进的地方:
- 止盈位如何确定?除了确定暂时先使用盈亏比1:1外,还加入了“移动止盈”功能,或叫追踪卖出,这一功能的本意是:为了防止卖飞,达到止盈位时不立即平仓,而是准备下一个止损单,止损价比最高价(建仓以来)低一点。我目前的参数是:离止盈位还差0.2%时开启移动止盈,移动比例(追踪比例是0.3%),即盈亏比最低值为0.5:1。这么设计也是经验之谈,看到了一些case,离止盈位就差一点,就趋势反转,止盈变止损。
- 等候天数如何确定?(是否允许过夜?)暂定为不过夜,经验之谈,对隔夜的跳空低开有阴影。
- 如何结束交易?若股价到达止损位或止盈位(移动止盈),则正常结束;但若一直未达到,则:收盘前10分钟市价清仓。
- 资金(仓位)如何分配?暂定:交给机器人1w刀,每只股票可用1k刀,即最多同时入场10只股票。弊端:第11信号出现时不能入场;股价超过1000刀的股票不予考虑(如亚马逊和谷歌)。
- 是否包括盘前盘后交易?不包括,因为盘前盘后不能下市价单,市价单可以保证买入卖出一定成功。
- bar未走完时的信号采用吗?不采用。见到一些case是bar未走完就出信号了,等bar走完信号消失,这种信号不稳定。最简单的例子就是刚开盘5分钟时猛涨,以为这根bar是阳线,等30分钟走完,变成阴线了。弊端是可能会错失较好的入场位,比如信号出现的bar猛涨,之后的bar也猛涨。
4.实盘测试(进行中)
隧道交易法,我个人感觉有一个弊端,就是信号比较少,而且持股时间不能太短,为了解决这个问题,我实盘时使用了30分钟K线,而且选股范围扩大为每日成交额的top200。
经模拟盘测试,每日信号较多,所以我过滤掉了做空信号(也担心券商对某些股票不支持做空)。
第1天实盘:10月6日,周三
前半个交易日bug不断,错失了一些信号,后半日较为稳定。
本金1w刀,收益5.86刀。
主要是UVXY和UPST亏的较多!
其中UPST就是连涨2根bar的情况,所以成本略高。
UVXY则是均线缠绕,导致TradingView和机器人的计算结果不一致,之后多积累一些case,看看此类情况该如何过滤掉。
第2天实盘:10月7日,周四
共交易43只股票(表太长,这里就不列出了),最终亏损37刀。
因信号较多,所以机器人额度从1w增加到1.5w。
机器人自己记录的情况是亏损31刀,差异的原因是:机器人记录的是市价,而且一般延迟10秒左右,人工统计的是实际成交价(市价单),市价单在金额上不是那么优惠。
反思和改进:
bug1:
未走完的bar产生的信号,如最后一根bar(15:30-16:00)产生的信号:5单里亏损4单。
而且这是之前就已经改进的点,现在又出现!明显有bug!
检查后,发现是上次修改(盘中无限循环跑→每根bar结束时跑)时没注意到的一个连锁反应。
更正后,还优化了显示问题(排序和序号)。
止损共22单,其中18单(亏损37刀)都存在bug1。
止盈共10单,其中2单存在bug1。
尾盘平仓共11单,其中5单存在bug1。
bug2:
有计算误差的信号(K线有误),即python机器人计算结果与TradingView差异较大的信号。
比如:CLF,TradingView认为13:30开始的bar才是long1信号(起涨点做多),但机器人认为是前一根(13:00-13:30),即机器人认为前一根是阳线 且 出头。
阳线算错了还能理解,因为这根bar(13:00-13:30)是十字星,开盘价和收盘价都是20.82(TradingView);富途的结果更精准:开盘价=20.820、收盘价=20.818,是阴线;机器人的结果是:开盘价=20.81、收盘价=20.84,是阳线。
出头算错则误差太大!因为前一根bar(12:30-13:00)的高点是20.86(TradingView)、20.859(富途),机器人结果是20.78!难道是行情机器人(无限循环查询市价)有误?查看其记录的价格csv文件,发现这一段时间的最高点是20.855(12:40:49和12:40:55两次记录)。
本地逐行代码地跑了一遍,问题也不能复现,所以,要么是当时的市价csv有问题,要么是当时的python计算有问题。
这种最基础的计算出现如此大的误差,不能原谅!但现在找不到原因,也只好暂时作罢。如果之后发现此类问题负面影响太大,那可以考虑将行情源从TD查询换为TD订阅,或者换为富途(曾短暂使用,放弃原因是太贵而且有订阅数量限制)。
无bug1的止损单共4单,其中3单存在bug2。
此类case还有:
TWTR 10:30-11:00,收盘价=63.645,正确值=63.93(TradingView)。
无bug1和bug2的止损单,仅1单:MDY。
另有一处可以改进的地方:
既然是日内交易,那么以昨天的低点为止损线就不太合适了,尤其是跳空高开的时候,如GS:
类似的还有ENPH和MTCH。
所以,将第一根bar(9:30-10:00)产生的信号的止损线,改为这根bar的低点,而非前低。
第3天实盘:10月8日,周五
本日交易15笔(一次买入+一次卖出=一笔),共亏损16刀,本金1.5w。
前半个交易日因为K线数据有误而荒废,且原因未知(我真是太菜了),猜测可能是因为W底机器人本日上线,两个机器人有某种冲突吧。
后半个交易日恢复正常,所以交易笔数略少:
分类总结与反思:
止损5笔:(亏损22刀)
- XLU:起涨点后第15根bar才发出long1信号,改进措施:起涨点后5根bar外的long1信号舍弃,因为说明涨势不强!同理应用到回调点和回调结束点,即long2信号,以及short1和2信号。
- ATVI:long2信号晚了一根bar,原因是K线有误:12:00-12:30的收盘价应该是78.06,但机器人记录的是77.75,所以小于前高77.80,不认为是出头。如何改进?该股票本日之前的K线收盘价都误差较小,唯独从此bar开始误差变大,原因不明。改进措施:发现开盘价误差较小,所以:非隔日bar时,当发现此bar开盘价与上一个bar收盘价相差>=0.1%时,此bar开盘价赋值给上一个bar 的收盘价。弊端:只能用于修改历史数据,对还没走完的bar无用,好在隧道机器人不看没走完的bar的信号。
- LVS:无明显bug,算法认栽!
- TNA:K线有误。类似ATVI。
- PG:K线有误。类似ATVI。
止盈3笔:(盈利6刀)
- XLP:与算法预测一致,典型正例,算法牛逼!
- NKE:因K线有误(误差较小,可接受),所以抢先一根bar进场做多,未到1倍止盈位,但按计划移动止盈,还行。
- COST:典型负例,算法认栽!好在是到了移动止盈位以后才调头向下的,最后不赔不赚。
尾盘平仓7笔:(不赔不赚)
- FAST:差一点到移动止盈开始位,半个正例,算法认栽!一个意外发现:14:00-14:30又出了一个long2的信号,但因为已经不是成交额top200,所以没有记录和交易。
- EEM:起涨点后第7根出头,信号质量较差,之后过滤此类信号。
- VWO:类似EEM,劣质信号。
- GS:无明显bug,而且值得研究,如下图所示,似乎可以考虑过滤掉这样一类信号:起涨后没多久就回调,即增长期短于回调期,说明涨势不强。先留个心眼,以后多积累一些样本再决定。
- UPST:类似EEM,劣质信号。
- HD:类似EEM,劣质信号,且K线有误。
- LOW:类似EEM,劣质信号,且K线有误。
第4天实盘:10月11日,周一
共收到做多信号29个(目前只处理做多信号),因仓位有限(最多同时入场10只票),所以前前后后共入场22只票。最终亏损105刀,是实盘测试以来亏损最多的一天!
而且,券商也让我闹心:昨晚盘中机器人突然报告买入和卖出失败,于是我手动操作,发现确实无法交易!赶紧联系尊嘉证券的工作人员,对方解释说今日是美股“半日市”,美东时间13点以后属于盘后交易,不能再用市价单了,让我等待他们修复这个问题。14点左右时通知我再试,正常。
止损9单,亏损90刀!
- SPY:K线有轻微误差,但可以接受,主要问题是开盘后第一根bar跌破ema169后迅速反弹,符合机器人对“有回调,且回调已结束”的定义,然后首bar结束后,机器人进场。没想到第二根bar轻轻涨了一点之后,第三根bar开始下跌,之后迅速跌破止损位!算是典型负例,算法认栽!改进措施:一个思路是,产生信号之前,有太多的bar在ema12之下,可能说明这个信号质量不佳。之后注意收集case,验证这个思路的有效性。
- IWM:类似SPY,入场晚,离移动止盈开始位还差一点,掉头向下,跌破止损位!
- VOO:类似SPY,主要涨幅都在第一根bar上,第二根bar才进场就已经晚了。
- IVV:类似SPY。
- SPXL:类似SPY。
- TNA:类似SPY。
- UPRO:类似SPY。
- INTC:类似SPY,且形态更差,之前有多根bar在ema169之下。
- CVS:类似SPY,且形态更差,第二根bar就开始下跌了。
止盈1单,盈利38刀。
- SOFI:典型long1正例,高开高走,顺利达到移动止盈位,而且之后也基本企稳,不存在卖飞的情况,是机器人非常喜欢的形态!
尾盘平仓12单,亏损53刀。
- XLK:类似SPY,只不过没跌倒止损位,所以耗到了尾盘。
- CLF:类似XLK。
- LOW:类似XLK,且离移动止盈开始位很近了。
- DAL:类似XLK,且离移动止盈开始位很近了。
- AVGO:类似XLK。
- AAPL:类似XLK。
- UPST:类似XLK,其实已到移动止盈位,但因为超出不多,在K线误差的影响下未识别到。
- GE:类似XLK。
- ZS:类似XLK。
- RIOT:类似XLK,且离移动止盈开始位很近了。
- SQQQ:从K线形态来说应该是盈利的一单,但诡异的是:13:30出的信号,临近尾盘才入场,导致入场价过高。原因可能是没仓位了,导致SQQQ一直排队等待,一直等到尾盘平仓时才有空位可以入场,入场后然后又迅速被机器人清场……(好不容易遇到个典型正例,结果一直排队无法入场!)
- VALE:15:00走完的bar出了long2信号,时间太短,不好评价是正例还是负例。
小结:
今日大盘形态刚好是隧道机器人的克星!先出一根大阳棒,符合long2或long1信号定义,把机器人骗进来,然后关门打狗!几根阴线迅速打到止损位。
应对措施:
- 治本:改进算法,甄别信号质量。目前机器人对于大趋势的判断只有涨和跌两种,对于震荡市没有定义。涨势之中,近期多根bar在ema12之下,甚至在ema169之下,说明涨势动力不足,此时产生的信号,质量不佳。这个改起来伤筋动骨,先缓议。
- 治标:减少止盈比例,让部分信号有机会落袋为安;减少止损比例,让无法止盈的信号不至于亏太多。这个改起来容易,可以马上实施。所以,从下一交易日开始,止盈和止损比例缩短一半,盈亏比仍为1:1;而且移动止盈开始位=止盈位。
第5天实盘:10月12日,周二
发现做多信号28个,入场23个,共亏损8刀。
止损11单,亏损28刀!
- ABNB:第一根bar出long2信号(K线有一定误差,可以接受),主要问题是出场太快:10:12入场、10:16出场,原因是止损比例太低,稍一震荡,就被震出去了。如果仍然以前一根bar的低点作为止损位,则可以撑到移动止盈开始。可能昨天缩小止损比例的做法有些片面,如何区别处理这些不同的case确实头疼!如果昨天不改止损和止盈比例的话,今日ABNB是能到1倍止盈位的!一个折中的思路:止损比例仍为1倍,移动止盈开始比例改为0.5倍,乍看之下是盈亏比为1:2,但止盈是移动止盈,或许没那么糟。
- XLP:类似ABNB,也是个“快男”,10:12入场、10:13出场!原因相同:止损太窄。短暂能到1倍止盈位,所以0.5倍开始移动止盈不错。
- DAL:入场后隔了一根bar,出现大阴棒,到了止损位。如果回复1倍止损位,则不会那么快出场,但由于其后也没能到0.5倍止盈位,所以应该会等到尾盘清仓,最后一根bar打到1倍止损位。这种case不太好处理,除非止损位恢复1倍的同时,止盈位降到0.5倍以下。从根本原因来说,还是老问题:震荡市如何识别,这个case中EMA12和EMA169缠绕有点严重,判断为上涨趋势或下跌趋势都不合适。量化方式,可以考虑:10月8-12日,大趋势(上涨/下跌)变换了4次!
- NEM:典型负例,一入场就开始跌,似乎是隧道机器人的克星。根本原因类似DAL:10月7-12日,大趋势(上涨/下跌)变换了5次!
- INFO:本来是典型正例,但入场太晚(可能是在排队等仓位吧,也可能是我中途将成交额从top200增加到top300导致的),导致涨破止盈位后才入场,最后止损离场!算不算震荡市呢?10月7-12日,大趋势(上涨/下跌)变换了3次!10月8-12日,大趋势(上涨/下跌)变换了2次!暂定一个震荡市定义:之前3个交易日,大趋势变换次数>=3次。改进措施:入场的限制条件加一个:今日最高点未到止盈位。
- IGV:从TradingView来看图形是典型正例,但机器人的做多信号晚了1根bar,推测是EMA计算的误差。这有赖于机器人计算精度的整体提高,很复杂,治标的方法可以考虑增加bar数来提高EMA精度,但计算耗时会增加。考虑到目前计算比较快,决定将bar数从500根增加到1000根。
- INMD:典型负例,但有一个典型特征:今日跳空高开,然后13:30的bar时才EMA12>EMA169。改进措施:出现做多信号的bar的高点,必须>=当日高点。
- IWM:典型负例,出long1信号的bar,刚好是起涨点bar的第4根,即打了上次调整阈值的擦边球。改进措施:找做多信号的范围,从起涨点、回调点后的5根bar,缩短到4根。不过,在检查了指标csv文件后,发现机器人是认为这根bar就是起涨点!老问题:EMA计算精度不够。应对措施:扩展到1000根bar后看看效果再说。
- SNAP:典型负例,且无明显特征,暂无应对措施。
- SE:典型负例,且无明显特征,暂无应对措施。
- IJR:典型负例,long2信号,特征是:近期在EMA169之下的bar有点多,最近10根bar里面有6根低点<EMA169。即,跌破EMA169后没有迅速涨起来,而是停留了一段时间,说明EMA169的支撑作用不强。所以,改进措施:long2信号增加一个过滤条件:最近10根bar里面,跌破EMA169的bar,必须<=5根。
止盈8单,盈利15刀。
这4单是支持恢复1倍止盈位的:
- XLY:K线有一定误差,可以接受。主要问题是移动止盈位太低、移动止盈比例太低,所以入场4分钟后就出场了,错过了1倍止盈位!而二者太低又是因为止损比例太低,1倍止损比例仅0.26%,0.5倍仅0.13%。改进措施:暂无,因为现阶段的目标是消灭止损单,以后再来考虑如何拉伸止盈单。
- SNOW:与XLY有点类似,仅持股11分钟,两个原因:一是移动止盈太敏感,出场太早,错失了后面的1倍止盈位!二是中途我把成交额top200增加到top300,所以晚了1根bar入场,导致成本偏高。改进措施:标出移动止盈的绝对金额变化,为之后的改进积累一个印象。
- ACN:EMA有一定误差,可以接受。持股仅11分钟,原因同样是移动止盈太敏感,出场太早,错失了后面的1倍止盈位(紧随其后的bar)!
- SHW:持股仅18分钟,原因同样是移动止盈太敏感,出场太早,错失了后面的1倍止盈位(紧随其后的bar)!
这4单是支持维持0.5倍止盈位的:
- UAL:典型正例,几乎完美,入场再快些,成本应该能更低。这个case没到1倍止盈位。
- MDLZ:一个因祸得福的正例,成交额top200增加到top300后入场,入场晚了7根bar,这反而是好事,如果紧接着long1信号入场,则第二根bar就到止损位被洗出来了。如果恢复1倍止损位的话,不会被洗出来。这个case没到1倍止盈位。
- IYR:EMA有一定误差,可以接受。当日最高点105.41几乎刚好是移动止盈开始位105.40,如果移动止盈位再高一些,此单将变成止损单。这个case体现了当前移动止盈开始位的正确性。
- VNQ:EMA有一定误差,可以接受。这个case没到1倍止盈位。如果移动止盈位再高一些,此单将变成止损单。这个case体现了当前移动止盈开始位的正确性。
止盈单小结:止盈位1倍vs.0.5倍,现阶段我还是维持0.5倍。
尾盘平仓4单,盈利5.5刀。
- GOLD:一根大阳棒把机器人骗进来以后就不涨了,开始下跌,好在没跌倒止损位。而且是成交额扩量以后才进来的票,所以入场时间晚,反而降低了成本,亏的不多。改进措施:2个典型特征:开盘第一根bar涨幅巨大,这个不好改进,因为不能确定后面还涨不涨,如果改成bar没走完时就入场,倒是可能蹭到一点肉,但也会打到止损位;特征2是距离拉回点隔了4根bar,之后这类信号会被过滤掉,因为拉回太慢说明支撑不强。
- FAST:成交额限制放开以后才来的,入场晚了,错过了止盈点。以后限制“今日最高点未到止盈位”,就不会再入场了。而且这个case支持维持0.5倍止盈位。
- GLD:15:00的bar产生的信号,不好判断正负例。典型特征:最近10根bar里面,跌破EMA169的bar有4根!回调迟迟不结束,不是好信号。
- IAU:与GLD类似。
改进措施小结:
- bar数从500根增加到1000根。(已落实)
- 找做多信号的范围,从起涨点、回调点后的5根bar,缩短到4根。(已落实)
- 止损比例仍为1倍,移动止盈开始比例改为0.5倍。
- 标出移动止盈的绝对金额变化。
- 之前3个交易日,大趋势变换次数必须<=2次。
- 今日最高点未到止盈位。
- 出现做多信号的bar的高点,必须>=当日高点。
- long2信号增加一个过滤条件:最近10根bar里面,跌破EMA169的bar,必须<=3根。
第6天实盘:10月13日,周三
今日发现信号20个,入场14个,共盈利25刀。
先看排除掉的6个信号,排除是否正确?
排除类型1:未入场,今日高点已涨破止盈位,放弃入场。
- MSFT:开盘一根大阳棒,直接涨破止盈位296。改进措施:若要挽救的话,马后炮地说:按照狼群yoyo的建议,以出现信号的bar下降一半时为入场位,这样的话,等下午涨回来以后就能盈利了。算是被错杀的正例。但为什么它下午就肯定会涨回来呢?因为EMA12有一定的支撑作用。这个思路先存个档,等以后止损单被消灭了再来考虑。
- OKTA:有误差,可接受。马后炮地说:可以进场。下降一半入场,可行。但之后可能会被移动止盈震下来。类似MSFT,算是被错杀的正例。
- WDAY:与MSFT类似的是一根大阳棒开局,涨破止盈位,而且之后连续下跌,不同的是:下午未能回到止盈位。庆幸机器人没有进场。
排除类型2:未入场,已涨破止盈位,放弃入场。
- GME:信号bar之后的bar猛涨,涨破止盈位,所以未入场。如果开着移动止盈入场,怕变成损失出来。马后炮:如果开着移动止盈入场,能赚到一点肉。算是被错杀的正例。
- LIN:马后炮:进去就是山顶接盘。改进措施:若要挽救,就得信号bar未走完就马上入场。略激进,对现在的计算架构改动较大,下一阶段再考虑。
排除类型3:股价太贵。(超过1000刀的票)
- SHOP:马后炮:若入场,则高点离止盈位还差一点,尾盘平仓时略有盈利。放弃了也不可惜。
然后再来看入场的14个信号。
止损单:1单,亏损5刀。
看来现阶段消灭止损单的各种改进措施起了作用,不过也可能只是因为大盘昨日阳线。希望能稳定几天再说。
- ZM:典型负例,算法认栽!改进措施:从这个case的典型特征入手:之前长期处于下降趋势;今日开盘连续7根bar疯涨,才把EMA12拉到EMA169之上,进入上升趋势。马后炮:强弩之末。连涨X根bar以后不可入场?多积累一些case再说。
止盈单:6单,盈利25.5刀。
- CRWD:典型正例。马后炮:移动止盈太敏感,导致错失了之后的1倍止盈位。改进措施:计算30min的ATR,为移动止盈比例的设定提供参考。若下降一半入场,不可行,没有入场机会。
- SLV:典型正例。马后炮:移动止盈太敏感,导致错失了之后的1倍止盈位。若下降一半入场,不可行,没有入场机会。
- TWLO:典型正例。马后炮:移动止盈太敏感,导致错失了之后的1倍止盈位。若下降一半入场,不可行,没有入场机会。
- TIP:K线和EMA计算有误差,导致与TradingView信号不同,好在最后成功止盈,就是利润太少。如果计算正确的话,能提前2根bar进场,即一开盘就进场,利润更多。马后炮:移动止盈太敏感,导致错失了之后的1倍止盈位。这个case的1倍止盈比例也才0.14%,再换成移动止盈比例,就更加敏感了。改进措施:对于止盈比例太低和太高的case,应有特殊处理,如把<0.1%的转成0.1%。若下降一半入场,可行,跟现在的成本价差不多。
- VEEV:典型正例,而且支持现在的移动止盈比例设置。因为这个case没能到1倍止盈位,且得益于移动止盈设置,几乎是卖在了最高点。不过,如果改为1倍止盈的话,虽然不能止盈,但尾盘平仓的收益也跟现在差不多。若下降一半入场,可行,有1根bar的机会。
- TGT:典型正例。马后炮:移动止盈太敏感,导致错失了之后的1倍止盈位。其实现在的出场位已经跟1倍止盈位很接近了。若下降一半入场,可行,有1根bar的机会。
尾盘平仓:7单,盈利4刀。
- NIO:克星,开盘一根大阳棒把机器人骗进来,然后横盘,再然后下跌。改进措施:如果按yoyo的建议下降一半再入场则差不多平本出来;典型特征:之前跌破EMA169的bar很多,不过这是long2信号才看的指标,这次出的是long1,大趋势变换近期只有2次,刚好能通过之前加的各种过滤条件。真是克星。能这么克机器人的case应该不多,暂不改进,case多了再说。
- PDD:类似NIO,克星,信号bar之后全是下跌和横盘。典型特征:开盘第一根bar暴涨。改进措施:暂无,此类case多了再说。下降一半入场可以平本。
- ZEN:10点半的bar出的信号,12点才入场,可能是因为成交额变动,这个case从非top300升入了top300。无意中实现了“下降一半入场”的效果!甚至下降多过一半,接近止损位时入场。虽未达到止盈位,但浮盈很多,抵消了前面两位克星带来的浮亏。如果紧接着信号bar入场,则可能会平本出。所以,该认真思考“下降一半入场”的问题了。
- UBER:因为计算误差,晚了一根bar入场。信号质量不好,提早一根bar入场,也达不到止盈位。另外,因信号bar之后的bar急速下跌,所以机器人入场的成本不高,也是无意中实现了“下降一半入场”的效果!甚至下降多过一半,所以亏的不多。
- UNH:因计算误差,TradingView显示的是long2信号,机器人显示的是long1。若是long2,则近期跌破EMA169的bar很多,会被过滤掉。若下降一半入场,则没有入场机会,不过也不可惜,最后差不多是平本出的,因为信号bar以后就是横盘。
- VGK:因EMA计算误差,导致晚了3根bar入场,即横盘期入场,最后差不多平本出来,略亏。若下降一半入场,则略有盈利。
- XLRE:又是EMA计算误差,这种震荡期信号没被排除掉,而且信号晚了一个bar,上涨期结束,进入横盘期。最后差不多平本出来,略亏。若下降一半入场,则略有盈利。
改进措施小结:
- 关于“下降一半入场”:尾盘平仓的7单都是质量一般的,都支持下降一半入场,或有小盈利,或减少亏损。但是,对于成功止盈的6单来说,一半反对、一半支持,且支持的那些收益增加也不明显。所以,此法暂不推行。
- 关于消灭止损单:连涨X根bar以后不可入场?多积累一些case再说。
- 关于找寻更多的正例:已经排除的那些case和方法,可以再商榷,如市价已涨破止盈位、今日高点已涨破止盈位、bar未走完时入场,另一着手点是:移动止盈怎样才能不那么敏感?
第7天实盘:10月14日,周四
今天收到信号59个,入场23个,盈利21刀。
关于延迟:
- Bar走完后,等1分钟,指标机器人启动。
- 指标机器人耗时4.6分钟。
- 警报机器人耗时6分钟。
- 上述3步合计约12分钟,所以交易机器人进场时已晚了12分钟。
- 当然,“浮盈减半就跑”在测试,占用了服务器的资源,导致计算变慢,也是原因之一。所以,决定停止此项测试,停止后,各项耗时为:1+3.4+5,约为10分钟。
因为这种延迟,导致开盘第一根bar就猛涨的4个信号作废了:未入场,今日高点已涨破止盈位,放弃入场,或者:未入场,已涨破止盈位,放弃入场。
止损单:2单,亏损19刀。
- FIVN:买在了最高点,然后就是下跌,三根阴线,损失惨重,克星。之后一直在止损线以下了。支持下降一半买入!典型特征:之前长期在下跌趋势中(0927-1013)。改进措施:多留心此类case,看是否应该集体排除。
- AVGO:也是买在了最高点,然后就是下跌、横盘,临近收盘时跌破止损线,克星。与FIVN不同的是,它没有长期在下跌趋势中,而是两种趋势交替出现,但又不是需要被过滤的那种频繁切换。典型特征:信号bar是今日连涨的第5根bar,不止今日的话是连涨第6根bar,联想到昨日的ZM是连涨7根。改进措施:连涨X根bar以后不可入场?多积累一些case再说。支持下降一半买入!
止盈单:10单,盈利47刀。平均每单4.66刀。
止盈单复盘,需回答3个问题:是否支持下降一半买入?是否支持1倍止盈位?是否有负例特征(连涨X根)?
- PM:计算误差,信号晚了一根bar。典型正例。不过也因为延迟而导致成本略高,已十分接近止盈位。不支持下降一半买入,因为那样就没有机会入场了!支持1倍止盈,且实际卖出价已超过。(连涨第3根bar)
- XLI:典型正例。不支持下降一半买入,因为那样就没有机会入场了!不支持1倍止盈。(连涨第3根bar)
- VTI:典型正例。不支持下降一半买入,因为那样就没有机会入场了!不支持1倍止盈。(连涨第3根bar)
- XLU:典型正例。支持下降一半买入!不支持1倍止盈。(连涨第4根bar)
- NEE:计算EMA误差,信号晚了一根bar。典型正例。支持下降一半买入!支持1倍止盈。(连涨第4根bar)
- RSP:计算EMA误差,信号晚了一根bar。典型正例。不支持下降一半买入,因为那样就没有机会入场了!不支持1倍止盈。(连涨第3根bar)
- IBM:典型正例。支持下降一半买入!不支持1倍止盈。(连涨第4根bar)
- IWD:典型正例。不支持下降一半买入,因为那样就没有机会入场了!不支持1倍止盈。(连涨第4根bar)
- SPY:典型正例。支持下降一半买入!不支持1倍止盈。(连涨第4根bar)
- AMC:典型正例。支持下降一半买入!不支持1倍止盈。(连涨第4根bar)
尾盘平仓:11单,亏损6刀。
- X:克星。亏损较大。支持下降一半买入!典型特征:之前长期在下跌趋势(正例中也常见,暂不过滤)。
- DASH:平本出。应该降低止盈位,或下降一半而买不到。支持下降一半买入!
- DIA:平本出。应该降低止盈位,或下降一半而买不到。支持下降一半买入!
- VTV:计算误差,信号晚了一根bar。应该降低止盈位,或下降一半而浮盈。支持下降一半买入!
- UDOW:略有盈利。应该降低止盈位,或下降一半而买不到。支持下降一半买入!
- AIG:略有盈利。应该降低止盈位,或下降一半而浮盈增多。支持下降一半买入!
- EL:小亏。计算误差,信号晚了一根bar。应该下降一半买入而降低亏损。支持下降一半买入!而且信号bar是连涨第5根bar。
- ASML:略有盈利。应该降低止盈位,或下降一半而浮盈增多。支持下降一半买入!
- SMH:小亏。应该下降一半买入而平本出。支持下降一半买入!
- SOXX:平本出。应该下降一半而浮盈。支持下降一半买入!
- FIS:平本出。应该下降一半而浮盈。支持下降一半买入!
未入场:(部分)
- MRK:典型正例。因延迟未入场,已涨破止盈位,放弃入场。
- NUE:未入场,已涨破止盈位,放弃入场。
小结:
- 为维持高胜率,牺牲了盈亏比(目前为0.5:1,忽略移动止盈的话),再加上信号有延迟,所以FIVN一个止损单就能吃掉17刀的利润!是否“消灭止损单”的目标有失偏颇?值得反思。
- 止盈单方便:一半支持下降一半买入,且这一半的每单收益均值是6.80,高于止盈单总均值!所以计划下周改为下降一半买入,但也要结合周五的实盘情况再看。支持1倍止盈的只有20%(2单),所以暂不采纳。
- 买入信号新增一个过滤条件:连续5根阳线(包括信号bar)的信号去掉。下周一统一改。
第8天实盘:10月15日,周五
今日发现16个信号,入场11个,盈利37刀。
止损单:没有!
- 实在是太幸福了!
止盈单:5单,盈利29刀。
止盈单复盘,需回答3个问题:是否支持下降一半买入?是否支持1倍止盈位?是否有负例特征(连涨X根)?
- QCOM:典型正例。而且几乎卖在了最高点。下降一半能买入,但若有误差,也可能买不到。目前成本较高、利润较薄,下降一些时买入是更好的。不支持1倍止盈位。连涨第2根。之前曾经长期处于下跌趋势。
- WMT:幸好及时止盈,否则变成止损单。不支持1倍止盈。下降一半时已过止盈点,后面是止损点,但已有“今日高点涨破止盈位则不入场”的规则,再加上此单其实是平本出,所以支持下降一半买入。连涨第2根。
- EWY:卖飞了。支持1倍止盈。止盈比例太低,使得进入移动止盈阶段过早,很快被洗下车,错失了1倍止盈。不支持下降一半买入,因为没有入场机会,下降一些也不支持。改进措施:对止盈比例太低(此单=0.12%)的case应有特殊处理。连涨第2根。
- RBLX:今日主要盈利来源。支持1倍止盈。大约到了1倍止盈位以后因为移动止盈而出场。因计算误差,提前1根bar入场,成本更低,感谢误差!不支持下降一半买入,因为没有入场机会,下降1/4也不支持。连涨第2根。改进措施:到了1倍止盈位后立即平仓,即移动止盈只适合0.5-1.0倍止盈位之间。
- HPQ:今日主要盈利来源。支持1倍止盈。大约到了1倍止盈位以后因为移动止盈而出场。支持下降一半买入,而且因为信号bar之后的bar是大跌,所以无意中实现了下降一半买入。连涨第4根。改进措施:到了1倍止盈位后立即平仓,即移动止盈只适合0.5-1.0倍止盈位之间。
尾盘平仓:5单,盈利8刀。
- CAT:典型正例。平仓时已进入移动止盈阶段,没有跌到移动止盈出场位,所以一直持仓中。不支持1倍止盈。支持下降1/4入场。连涨第2根。
- EWZ:小亏。典型特征:第一根bar涨太多(2.09%)。之后的涨幅很小,所以没到止盈位。但也没跌,所以等下降1/4也等不到。改进措施:降低止盈位,或bar未走完时入场,或用下降1/4不入场,或排除掉第一根bar涨太多的case。连涨第2根。
- FISV:首bar涨完以后横盘,尾盘几乎平本出。支持下降一半买入,这样的话止盈位也会相应下降,有机会变成止盈单。连涨第1根。
- LCID:小盈利。支持下降一半买入,而且因为信号bar之后的bar是大跌,所以无意中实现了下降一半买入。连涨第4根。
- JPM:因为误差,晚了一根bar入场,即便没有误差,信号bar也是连涨第6根了。入场后横盘,最后平本出。支持下降一半买入,而且因为信号bar之后的bar是大跌,所以无意中实现了下降一半买入。
未入场:
- AMZN:股价太贵而未入场。若入场,则支持1倍止盈位。而且,因为误差,可以早一根bar入场,成本更低。支持下降一半买入,若没有误差则不支持。连涨第3根。
- INTC:已涨破止盈位而未入场。因误差,可以早2根bar入场。支持1倍止盈位。支持下降一半买入。连涨第2根。没入场的原因可能是:在排队等仓位,或多次计算结果不同(实际信号时间太晚)。
- ADI:信号bar之后便迅速涨破止盈位,所以未入场。若入场,则支持1倍止盈位。支持下降一半买入。连涨第3根。属于被过滤规则“误杀的正例”。
- EWH:信号bar自己就已经涨破止盈位了。若要挽救,只能在bar未走完时入场。若入场,则支持1倍止盈位。支持下降一半买入。连涨第1根。
- TWTR:信号bar自己就已经涨破止盈位了。若要挽救,只能在bar未走完时入场(若如此,则不存在下降一半买入的问题)。但信号bar之后迅速跌破止损位。所以买入和卖出都必须在信号bar内完成才能盈利。不支持1倍止盈位。(若如此,则不存在下降一半买入的问题)
- SBUX:典型负例,信号bar之后迅速跌破止损位。连涨第1根。
改进措施小结:
- 为了消灭止损单,设置了很多过滤条件(如今日涨破止盈位则不入场、bar未走完时不入场),这些条件也错杀了一些正例。若大盘下跌时,隧道机器人也能盈利,再考虑放开这些过滤条件。
- 昨日计划的买入信号新增一个过滤条件:连续5根阳线(包括信号bar)的信号去掉。今日未发现反例,通过。
- 从今日case看,下降一半买入,可能错失一些正例,所以改为下降四分之一买入。
- 虽然连续3天获利,但必须清醒地认识到这三天也是大盘连涨的三天,而且机器人盈利率不如大盘涨幅,即直接买大盘收益更高。所以机器人的路还长,不能沾沾自喜。
后续实盘记录:Python美股量化交易填坑记录——13b.Vegas隧道交易机器人(实盘记录)_ChristopherShen的博客-CSDN博客
5.围观链接
机器人布置于国内知名的量化平台——FMZ网(发明者网),机器人状态已设置为公开可见(请先注册FMZ网,免费):FMZ - 发明者量化交易平台