股票程序化投资发展为什么远远不如期货程序化?
的有关信息介绍如下:
本打算只是随便看看,没想到看到这个两年前的问题,虽然有些年头,但是确实是挺有意思的一个问题。各位答主也都分析的挺有道理的。不知道两年后的今天,在国内目前是怎样的一个情况。我自己只是在香港的时候短暂接触过国内的市场,几乎是一个小白,所以也不敢班门弄斧。不过,这世上很多事情都有互通之处,而且我个人根据自己的浅薄经验,确实也觉得股票的程序化的复杂度可能要比期货高。但是,具体复杂在哪里呢?我试着从我个人的角度来说一下,劝当抛砖引玉。
当然,比如,T+1,还有印花税等导致的交易成本偏高的问题都是众所周知的,不过也不是只有咱们面对这个问题。比如,在股票交易成本方面,韩国也是一个例子,而日本和澳大利亚就比较好一些。接下来,我会试着从整个trade发生的cycle来看看每一步股票程序化都可能会面对哪些挑战。
假设我们考虑用机器学习来帮助我们设计交易模型。第一步是收集数据。这里就面对第一个问题,有时候research除去交易所的market data,可能还需要大量其他的reference data,这些数据的搜集工作应该是比期货要复杂一些的。数据搜集到手之后,你还面对着数据整理/清理的问题,工作量应该也是比期货研究中类似的内容要大。下一步,在具体研究策略模型的时候,你又会面对诸多问题,包括但不限于:几乎每支股票都有其特殊性,你怎么定自己的universe?然后,有其他的回答里提到不同股票趋势不一样,不能通用一个模型,那怎么办?难道几只股票就跑一个单独的模型吗?那完蛋了,碰上日本这种几千只股票的,光是把binary models load进内存,就给全吃光了。如果一定要一个通用模型怎么办?这里就涉及到在模型训练的时候,是不是需要考虑按一个规则(比如sector)对数据做一定的normalization了。也许有人会说,我要用random forest,就不用normalization了。非也非也,我这里提到的是两个不一样的概念。不然,你训练出来的模型可能会有比较大的bias,从而导致无法信赖。那么normalization怎么做呢?这可能又是做期货的时候不需要考虑的问题。是根据给定的公式,还是再套一层机器学习?是套一层supervised learning,还是unsupervised learning?除去这个问题之外,如果你考虑到在production交易速度的问题,可能还要再做sub-universe,跑多线程,或者多进程的时候,你可能又要考虑训练模型的时候要不要加cluster的概念。种种这些,会导致研究的复杂度轻轻松松就上去了。说一句题外话,我好像看到知乎里有人提用reinforcement learning来帮助训练交易模型,对此我本人是不太认可的,但也可能仅仅是我个人认知的浅薄。
模型的问题解决之后,下面在进production之前还有一系列的问题需要考虑。比如,你是跟broker走cash,还是走swap呀;比如,要建portfolio,不可能是long only啊,那你想short sell,就得找broker借locates啊,能不能借的到先放到一边不说,成百上千只股票你不可能手动去操作啊,这块儿你又得自己写script,或者小程序来自动化,而期货都没有short sell的概念;比如,股票,不同于衍生品,其本身是没有leverage的,那你就得找broker看能不能给你加leverage呀;比如,以上两点broker不可能免费给你,各种形式的financing fee,你准备好去面对了吗?比如,risk manager肯定需要你给他这个股票策略整体的risk profile,这几乎肯定也比期货交易要复杂咯;比如,不同类型的股票在具体的execution上可能需要你设计不同的执行算法,对tick stock和high liquid stock几乎不可能用同一个办法去套,他们一个tick的bp return不一样,也许会导致你在不同的stock上会面对不尽相同的对手算法。
终于可以开始进production交易了,你又会面对一些在期货交易的时候,可能不会面对的问题。比如,一个binary model的一次online evaluation可能就需要几十到几百个microsecond不等,那成百上千只股票同时交易怎么办?Latency处理不好,会严重影响fill rate,或者cancel rate;比如,整个portfolio的delta调整好了,你是不是还得调整不同的sector的delta?比如,你的hedging怎么去做,大概率上这不会是一个很直观的问题,也许需要你仔细去抠,期货的对冲可能会更简单一些;比如,同一个股票市场在不同的时段可能liquidity的特性很不一样,像Lse在美国股市开盘前和开盘后差别就比较大,你对类似这样的情况有没有proactive一些的准备?比如,同时交易成百上千只股票的话,你怎么去做更有效的monitoring?可能一个没留神,一只股票因为突发事件有比较大的波动,你怎么能做到及时发现,查到根源,做出正确的反应?同时,在股票市场,有时候也更有机会出现一些猫腻,像是在这里提到的:https://books.google.com.sg/books?id=nJJyDwAAQBAJ&pg=PA105&lpg=PA105&dq=imc+stop+order&source=bl&ots=SvAJi4CgKv&sig=ACfU3U3y4gE_yIC8kHf3BXcXQvDK3-jPOQ&hl=en&sa=X&ved=2ahUKEwiMoLbLoM3jAhWc8XMBHd2MBSsQ6AEwFHoECAcQAQ#v=onepage&q=imc%20stop%20order&f=false。IMC在2005年通过不合规手段,可以知道对手在某家股市交易所发送的stop loss order的threshold,于是可以轻松在这些股票上大肆收割。
好啦,一天的交易终于结束了,可是还不行啊,back office可能又会找你来问allocation的问题,或者是某些股票有m&a,或者split,或者dividend,问你接受怎样的option,这些你是挨个儿人为处理,还是想办法自动化呢?又或者是broker来抱怨说OTR太高了(通常期货交易的OTR容忍度更高一些,可能是觉得期货市场竞争更激烈?)。Operation上的繁琐程度,也几乎不可同日而语。
Last but not least,监管!监管!监管!公司内部有监管,broker也有监管,交易所更有监管。随时可能会联系你,要求你解释某一天某一只股票某一个order的action逻辑,满足发送的每一个order都不会有no intention to trade的合规。往往这个时候,你就又需要一个系统,能快速帮你分析交易程序发送这个order时候的具体条件了...
一个字,烦 lol



