个人做量化交易靠谱吗_

一说到量化交易,一下子蹦出一堆牛逼的词汇,比如:FPGA,微波,高频,纳秒级别延迟等等。这些都是高频交易中的词汇,高频交易确实是基金公司做起来比较合适,普通人搞起来门槛比较高。但是,需要明确一点量化交易不等同于高频交易。

交易如果根据频率来划分的话,可分为:

高频:ticke纳秒级别的 1s级别

中低频:1s~1h级别

超低频:1d~1w 等长线投资

高频交易对延迟,性能和稳定性要求非常高,需要大量的硬件的成本和人工成本。但是中低频交易对硬件要求就会低很多。个人与基金公司差距主要体现在算法上,普通程序也有能力捕获到这一频度的交易信号。

老夫废话不多说,就一个字,直接干!

如果想要分析A股,或者比特币,就需要自己搭建一套环境。一般搭建一个量化平台需要这些步骤:开设证券账户>开发环境搭建>数据准备>交易策略开发>回归测试>模拟交易>实盘交易

一、开设证券账户(此处略过)

二、开发环境搭建

目前主流的两种平台是,python和R语言。这两个语言有提供回测框架,时间序列分析,统计分析的库,(C++ 和 java也可以,不过门槛相对比较高)。

Python:目前应该是最普遍的个人量化技术首选语言,因为相关的开源框架相当丰富。

R:高级算法比较方便,社区比较活跃。

我选择的是Python,常用的回测框架用的是ZipLine和BackTrader。

三、数据准备

国内的股票数据,有一些服务商提供,比如通联数据、tushare;国外证券数据可以从 xignite.com获取。还有一些信息,比如新闻,汇率。需要自己写爬虫去抓取,如果用爬虫你就能体会到Python的好处了,爬取数据还是很方便的。

得这些数据后就可以导入到数据库去。关于数据库的选择,一般使用Mysql ,如果数据量比较大(>100G)可以使用mogodb,一般个人不会这么大数据量。

四、交易策略开发

说到交易算法,往往会联想到机器学习、马尔可夫模型、大数据分析、深度学习、神经网络等这些牛逼的AI词汇,但是,普通玩家基本用不到。对于普通交易者可以选用简单高效的算法:

1、将自己操作和想法程序化,比如:三连阳 ,买低价股 或者你听说过什么神奇的操作手法都是用代码实现,然后使用历史数据进行回测。

2.传统的指标交易:均线,MACD ,布林带等,蜡烛图理论,RSI, 波浪理论。这些纯技术分析指标需要在特定的场景才能有作用,大家都听说过海龟交易法,可能都觉挺有道理的。但真实情况如何,用A股或者外汇数据测试一下,就会发现长期收益率不是特别好。

3.多因子选股:每个股民都有自己的选股理论,比如有人会看市盈率,换手率,市盈率,行业情况,成交量。这些筛选因素很简单,但要是从几千股票里去筛选,往往需要大量精力。程序就能特别好解决这些问题。

如果你是高级玩家也可以尝试一下高级算法。比如机器学习,大数据分析等。大数据在金融交易领域应用还是处于开始阶段。从目前信息来看,大数据基金收益的还算不错,比如百度和广发证券合作的百发指数基金,腾讯和嘉实合作的大数据基金。

五、回归测试

如果回测效果不错,收益率,最大回撤率,Sharp值,等指标,都在可接受的范围内容,你肯定就会兴奋,急着要上真实交易,甚至开始计划成立私募基金 ,但是,别急,最好模拟交易一下。

六、模拟交易

但在实盘交易前,还需要做一两个月模拟交易(paper trading) 。很多回测效果很好的策略不一定在模拟交易时候就表现的好。历史数据是固定,回测的时候可以通过不断调整参数,让各项指标趋于完美,有时候会导致算法过度拟合,因为市场总是千变万化,太过意死板的算法是无法适应市场变化。模拟交易最终效果一般取决于你的程序是否灵活,是否良好的风险和资金管理算法。

总结:至于说个人做量化交易是否靠谱,上面的流程已经说明了具体可执行方案,靠谱性不言而喻。至于能不能挣到钱,就看个人的修为了。

要相信:总有高手在民间。

我已经成功了,一个人搞定,刚好用时12个月开发,目前实盘验证了1年,几个策略回报达到预期,分别年化在XX%~XX%,无论市场牛熊。(renew39说的有道理,不要公开收益率引起不必要的竞争)

个人做,大概受到一些限制,比如:

只能采用中低频策略,或者是趋势交易策略。因为承担不起硬件和数据的高昂成本。

硬件:我的开发设备是几台PC和一个自己习惯用的笔记本。几台PC是作为算力集群,一般是24小时连续运算。我大概估计累计运行时间有2/3年。实际生产环境一台cloud server就够了,我的配置非常低,每个月花不了几个钱。

数据:购买一些价格比较实惠的基础数据,然后自己加工。自己加工倒不是为了省钱,是因为市面上大多数据都有bug。需要自己买几套,然后用机器做校验和修复,才有真正敢使用的数据。比如FUTU的日K都有错误,很多大网站的复盘都不对。

编程:需要自己具备非常全面和专业的编程能力,同时有良好的工程化能力。比如我在一年的时间中,有差不多一半的时间是在完善工具集和压力测试系统。顺便说一下,我是自己开发的量化框架,个人感觉要正式做这个事情,还是要自己做框架。那些开源的框架,离真正的应用还是差的比较远。如果用到一些开源工程,经常需要自己进行修改才能正式使用。我项目的代码量,前两天刚统计过,10万+。所以一定要善于coding。

数学:非常好的数学基础,尤其是高等数学。实际开发过程中,总有绕不开,需要自己发明指标和数学工具的时候。而且这些都是必须突破的关键点。常用的金融指标的数学含义必须自己完全理解,并能够自己编程实现。因为经常要对某个指标进行数学变形。

必须学习经济和金融知识。而且越深入越好,要了解经济运行规律,金融资产底层逻辑,金融工具和衍生品的关系和极限边界。才能保证自己有足够的设计灵感,以及安全措施。我是阅读了大量的专业书籍,尤其是交易相关的部分,完全要吃透。虽然最终是程序运算,但自己已经达到了能脑补各种金融图表的程度。这是进行假设的关键一步。重点,一定要啃那些晦涩难懂,一堆图表公式的大部头书籍。那种畅销书是帮不上忙的。

启动资金。小规模测试大概需要10~20万人民币,这笔钱要做好为验证不断亏损的准备,可能一个晚上损失20%,反正我是发生了不止一次。

资本金要充足。因为,你看到我前面说的这么多投入,还要计算上你自己的人力成本一年也是大几十万。所以要回本,return要足够多。

能吃苦。我是春节无休,每天差不多工作16个小时,睡4、5个小时,连续突击2、3月,才能取得几个关键性突破,才有现在的结果。

倒数第二条,非常关键!争取家人的支持!我也是花了很大的功夫,顶着很大的压力才得到家人的支持。因为人都不愿意冒险,尤其是放着稳定的工资收入不要。所以,这也和第8条有关,你一定要有足够的资本金需要花这么大代价去维护。

最后一条,极度关键。你是不是相信自己一定能成功!如果你的成长经历中,不是一个极度自信的人,建议就不要去冒这个险。我中途每2、3个月就要面临一次彻底失败的处境。也就是每次这样,我都要面临代码推翻80%,知识体系重构的窘境。真的是到最后1个月才突然出现转机。因为我有事先和家人约定的1年期限,所以最后快到期的那2个月,我是每天吃饭和去卫生间都顾不上,睡觉都是15分钟一个闹表。在极度紧张、压力、绝望和希望中闯荡。如果让我再来一次,我大概也不想再重复了。

这条路水很深,竞争很激励。绝对是比我以往任何一段打工或创业经历都磨练的多。我是把这个项目当成自己的又一次创业来做的。选择个人来做,也是实属无奈,因为找不到合适的partner。

本来只想写几句评论,结果写成了一大篇。也好,算是给自己过期这段时间做了个总结。也希望能给愿意走这条路的人提供一个参考的样本。希望有朋友也能靠自己成功。不过,即使不成功,也可以去加入公司,靠一个团队来做。

我正在制定新的冲击计划,准备把自己的量化工具再提升到更高的return,把drawdown拉的更平。现在正在筹备时间,因为我知道,一旦启动计划,应该又是动荡的一年。也祝我自己好运吧!

精简讨论区有价值的内容

很轻松就能搞出年化50%以上的,且走势超稳定的策略。

警惕!可能已经落入陷阱了。以下是我入坑的经历。

我开发的第一个季度,经历过2次你说的这个情况。我拿第一次的经历举例。

我的第一个版本,用了2周时间就开发完成,上线了。而且实际运行的那个月,还赚钱了。这个版本的策略回测收益也是在50%,和100%以上。而且我也在上线前做了反复的测试,发现就是这么好。所以当时我是信心满满,而且以为自己发现了金矿。

但是,以我过去做产品的经验,我心里一直非常不踏实,钱不会这么好赚的。10年、20年之前就都在做量化了,我一个外行,不太可能这么容易捡漏。所以我一点没敢耽搁时间,马上各种方式去搜集信息。还真找到了一个启示,就是有人分享过关于K bar在历史数据复盘中产生的各种错误。很不幸,我当时也中招了,这是一个新手非常容易掉进去的陷阱。而且造成的过度自信,会让自己的投资灰飞烟灭。因为几乎再不可行的方案,在这个误差累积下都会让你的策略轻松突破50%以上。

经过修正之后,我之前认为很好的方案全部破产,没有一个能跑赢业绩基准的。而且后来就进入了连续苦战的阶段。

如果你的策略很轻松就做好了,而且业绩轻松跑过基准,大概率就是掉到这个误差陷阱中。这也是市面上绝大多数回测系统和框架普遍存在的问题,也是一个我要自己做框架的原因。因为大多数框架本身都带这个天生的bug,实在不敢用。当然,我还是相信有非常牛的人的。

感谢大家的讨论!

看来关注这个方向的人还是很多的。也希望在这方面有想法的伙伴们,分享一些自己的经验和看法。当然是不损害你自己利益的前提下。

谢谢大家!

【书单】

《打开量化投资的黑箱》 新手科普。适合对量化没有概念的,可以有个初步了解。

《Options as a strategic investement》 强烈推荐精读。除了介绍期权,前面部分还涉及历史上的规则变化,有助于对证券市场规则的成因有深刻认识。后面数学部分帮助很大。我通篇精读2遍,现在也经常拿来当资料查。

《债务危机》[美]瑞·达利欧(Principles For Navigating Big Debt Crises By Ray Dalio)。可以学习分析和推导的思维。我的量化标准要求符合长期有效的运作原理基础。当日大家做法不一样,不一定需要这样。

《The Federal Reserve and the Financial Crisis》入门读物。了解现代美国金融市场的机制。想炒股和担心现在股灾的,也推荐读一下。心里会更有数。

《Python for Finance-Analyze Big Financial Data》编程实操基础。学习用python写量化程序。

【2021-12-6】

提问题,或者讨论,尽量发在评论区。我希望大家能更多的一起交流信息。

私信我看的比较少,不过之前的我会陆续回复

【2021-12-7】

今天拜读了renew39的帖子,非常棒!跟我的做法和市场标的完全不同。推荐大家也去看看。

【增加的截图说明】

这个策略如果放到生产环境,会加3倍杠杆,risk会将avg放大到2%,最大回撤到10%,年化到30%。但因为我认为还存在理论瑕疵,暂时是封存状态,没有投入生产环境。

放这张图就是让大家可以体验一下感觉,正在运用的策略我就不放出来了。我做的量化策略,其实不像教科书那种一条平滑曲线一直上升,也是有回撤的。所以像图上这个策略,使用的时候就会把资金切成2份,1年放一半,规避掉这部分risk。

2020年7月31日更新

有关K线和原始数据。可能由于个人对金融领域的不够熟悉,近日在于答友们交流的过程中才发现个人写下这篇回答之初对一些概念的理解是有偏差的:

对常用的裸K这个词语有误解,本人是基于原始数据进行分析的,即逐笔或聚合后的逐笔,本回答中所有的内容都是围绕这一前提展开的,但不是裸K,个人对裸K的理解有误,如果在下方的回答或者评论中遇到我提到裸K的描述烦请按照逐笔原始数据来理解。

仔细重新审视了一遍回答中的各项内容或思路,这里需要特别指出的是,回答中几乎所有的内容对于基于K线(或其它形式的特征提取后的Bar)的分析都是不适用的,不但不适用,而且可能会给实践者带来不必要的困惑,甚至得出错误的结论。包括交易策略和软件两个方面,例如:如果使用K线,即便是同时监控1000个交易对,很高概率不需要类似配置的硬件设备。例如:如果使用K线,是无法看到我称之为动态周期的形态,或者,有很高的看错几率。例如:软件回放(仿真)是无法通过K线来实现的。例如:滑点对个人策略的影响基本可以忽略不计这个结论如果基于K线数据的话是错误的。等等。我一度认为大家有共识的量化交易大概率默认是基于逐笔数据的,但实际情况的确存在各种差异。

本人回答中提到的各种思路可能在仅提供K线数据的各种量化平台上无法尝试或实践。

基于K线数据的可视化样例(K线周期:30m)基于原始数据的可视化相同样例(采样聚合周期:50ms)两种不同的数据的可视化叠加与差异比较

2020年7月28日 更新

如果是刚开始,选择哪个市场比较方便:推荐数字货币这个市场,因为:

各大头部交易所都提供相对完备且符合主流的API接口,且,无任何门槛(无资金门槛、无链路门槛、无许可门槛)。

其中有一个交易所还提供完备的历史逐笔数据,对于研究量化交易无须购买。至于哪一个交易所,自己百度或者谷歌一下很容易知晓。

数字货币的交易是7x24小时的,其连续性提供了相对完善的交易样本的多样性。但也因此缺失了开盘收盘阶段的特殊情况。

具备典型意义的交易对:BTCUSDT、ETHUSDT,基于历史数据的分析,BTC的共识度在过去的两年中持续上升从未下降过,故BTCUSDT交易过程多空交锋激烈、干扰信号相对较多,而ETHUSDT相较BTCUSDT特征更为明显一些。或选择24小时成交额在2000万美元以上,1-2个亿美元以下的交易对作为起始的研究对象,但最终样本不要拉了BTCUSDT。

数字货币交易买入卖出都需要承担手续费,建议仔细研究各个交易所的费率表及影响到费率的各种条件,存在少量交易所向Maker提供负费率,有这方面策略倾向的可以关注。

几乎所有的数字货币交易所都支持:现货(仅支持做多)、交割合约、永续合约、杠杆等特性或细分市场,对于侧重不同类型策略的研究都可以找到适合的对象。

数字货币的特殊时间点:凌晨0点、凌晨4点、凌晨5点、上午7点-8点之间,在这些时间点发生行情的概率会相较于其它时间点略微明显,但不代表行情仅在这几个时间点。

重要的事情说三遍:不建议参与炒币、不建议参与炒币、不建议参与炒币!研究数字货币或作为资产购买并长期持有主流数字货币是有一定价值共识的,但是不建议在不了解的情况下参与炒币,风险比股市要大不少,特别是不了解基本面或基本面不清晰的AltCoin。

不要向本人询问有关行情的信息,本人不做预测和分析也没有这个能力,本人仅仅是个独立宽客,不是股评家。

无法访问交易所:请自行百度或谷歌解决方案。

建议多少了解一下类似于:区块链、公链、分布式账本、智能合约、挖矿、去中心化金融等基本的概念,虽然不需要从事区块链的开发工作,但对于理解数字货币的基本面还是有帮助的。

如何获取数据以及获取什么数据,并开始研究:

每个交易所的Website的下方都有API Doc的连接,并且基本每个交易所在GitHub上都有自己的资料库。

几乎所有的交易所都支持RESTFUL接口,绝大部分交易都同时提供WebSocket接口,但是不同的交易所对接口的访问频度有不同的限制要求。

交易所中的接口是分类的,有行情接口、交易接口、钱包接口等等,如果你需要K线、逐笔、深度、Ticker等市场的常规数据都可以在文档中找到相应的内容。

每个交易所通常一种协议会对应一个访问地址(有些交易所不同协议不同IP,有些交易所不同协议复用IP);有些使用的是CDN网络(几乎是固定的几个入口IP),有些使用的是自己的负载均衡体系(数百个IP,并且还会随着时间的推移而变化),总之,确实存在一些方法,让你能够对这些资源的使用更加的Smart,在结果层面总是以完整、最优的方式拿到数据。下面有一些交易所不同协议在提供服务的资源情况作为示例供参考。

不推荐通过代理服务器在实盘中使用,稳定性和性能都很糟糕。如果你使用的是本地代理,且目的仅仅是为了对自己的交易系统解耦,请留意有些代理软件对于CONNECT方法默认是不通过443以外的端口的,需要自行添加。否则,有些交易所的WebSocket端口不是默认的443,不添加则无法正常通过本地代理连接。

个人认为最有价值的是逐笔数据(有些交易所还提供聚合后的逐笔,这类数据与逐笔在个人实践中未发现差异能够对计算结果带来显著的影响,但可以降低数据获取的次数和总流量),个人如果需要K线或不同级别的K线都是自主生成,但不同偏好的同样可以在交易所获得现成的数据。

个人做过多个物理城市多个运营商的链路测试,测试结果不完全一致,基本都能够把到内存延时控制在100ms以内,但最快也未优于20ms,且这个20ms中还存在有少量的误差。

部分交易所提供完整的历史逐笔数据,这对于通过逐笔数据研究量化策略来说是一个方便的途径。可以通过交易所提供的库附加自己的少量编码获取,或自行编码获取。

某交易所RESTFul服务地址示例某交易所WebSocket服务地址示例另外一个交易所RESTFul服务地址示例

说明:上述示例中的Ping延时不等于实际数据传输延时,这是两个概念;WebSocket的Ping延时代表的是Connect连接完成的延时,部分交易所WebSocket Server不可Ping。

2020年7月24日 更新

几天前回答了这个问题之后,由于个人在回答中列出了许多具体的细节,也由此引发了一些朋友的询问,个人把在互动过程中认为原贴中缺失的内容会以更新的方式逐步补充进来。等未来累计到一定程度之后,个人会全面重新整理一下,并关贴供喜欢这个行业的朋友参考之用。

有关成本问题,整件事情剔除个人的时间成本、学习相关知识采购书籍、向专业交易人员请教的社交花费这些软成本之外,还是有一些硬成本的,我大概罗列一下,供参考:

什么决定了你的成本:你的目的和主交易思路决定了你的成本,高频交易、中低频量化交易、自动化交易、辅助分析但人工交易等目的与场景不同,需要的装备构成不完全相同。当目的和主交易策略确定下来之后,操作的资金量大小相当高概率会以正相关的形式影响到你的成本,并且这种正相关不一定是线性的。本人的目的是纯自动化交易,下方谈及的成本也都是服务于这个目的及其所需要的交易策略的。

场所:目前个人有两个物理地点不同的普通商品房,集群的不同物理节点分别部署在这两个不同的地理位置。可能有朋友会问,为何不使用云?我个人的观点很明确:无论如何不要使用云服务,这件事情与成本无关,除非你在学习和探索过程中。能否主机托管?这取决与你的系统架构,如果你的系统架构能够很容易解耦出来一部分去托管而不是全部,且,你有办法彻底的保护好你的交易策略(如自毁)。我目前举例的这种场所不适合进行高频交易,高频交易的客观条件远不满足。

链路:主要的交易场所:2条普通200M的家用宽带,1电信1联通,热备的交易场所:1条普通200M联通。链路需要热备。这三条宽带均摊到每个月的成本大概200元左右,而现在这些运营商都有一些和手机绑定的套餐供选择。

计算设备:自己组装的Server x4,每台的配置都差不多,两个CPU,都是E5 2696/2697 v2的,512G内存,800G左右的U2硬盘,其中有两台物理位置不同的Server配有HDD阵列,一个20T一个40T,不单独计算了,4台所有东西合计在一起个人购入时累计总成本接近11万元。配件除了HDD硬盘全新之外,剩余的基本都是洋垃圾。所有这些设备计划使用3年(实际应该高于3年,3年后个人另有打算),按月折旧大概每个月大约3000元。这些设备的利用率反映出来的必要性如何?这里需要说明的,你的设备的配置需要按照行情峰值时测得的结果来估算,而不是按照均值,在交易系统软件结构优化比较彻底的前提下,一般只看CPU就可以了(因为剩余的都是可以提前优化或者加量的),目前我这个配置在极端行情的时候是接近75%的满载——即48T的CPU Linux捕捉的CPU利用率75%,时间是今年的3月12日,这种极端行情一年也不会有几次,但你得准备着。

UPS,两边各有一个,APC的,一边独立使用,另一边通过主Server管理所有设备,只能撑3分钟,主要解决断电时主要现场的保存和安全关机,其它的数据在断电时不保存,丢了就丢了,不碍事。每个650元,两个合计1300元,一次性投入就不算均摊折旧了。

网络设备:没有路由器,用的软路由;没有额外的网卡,选主板的时候选的都是4网口或2网口的主板;主交易场所有一个8口的交换机,大概300元。内网全为千兆,考虑未来将分析服务器到桌面升级为万兆(提数速度加快);两个光猫,运营商给的。这部分总计费用很少,也就不计算入成本了。

冷备设备:群晖1515+,60T硬盘,主要用来冷备各种数据、代码、分析过程等。设备+盘,大约15000元,这部分计算使用5年,盘也选的5年换新的,按月折旧大约250元。

索引节点:购买了1个阿里云VPN(1U的),一次购买了5年,主要看中阿里云永不断电、断网的特性,其上没有放置任何交易系统的服务,仅放置了一个自己写的索引服务,该索引服务主要解决不同物理集群的关键信息索引问题,进出流量都很小,所以购买的按流量计费的带宽(搞笑的是,实际流量太小,月月被抹零,开始存了5元进去,到现在还没花完)。这个VPS的成本可以当做0了,没多少钱。

电费:Server的电源配置两台600W两台750W,NAS功率很小,所有设备都是24小时运行,但并非所有设备24小时都是满负荷运行,有个有意思的现象就是:有时候功率表上的数字与行情大盘数字是同节奏的。费用给不出分项的数字,只有一个总数:每月约1000元左右的电费(按经验扣除了家里的其它用电费用)。

购买数据:没有这部分成本,数据都是交易系统自己获得的公开数据,没有购买过。

备品备件:U2 SSDx2(1500),内存条x10(4500),HDD硬盘X3(4000),独立PCIE千兆网卡x2(300),合计约10000元。按3年折旧,每月约300元。为什么要备这么多内存条,因为:1)洋垃圾买的多了,难免遇到有问题的,并非所有的情况都可以换货或者来得及换货。2)我所在城市比较潮湿,有一定几率遇到金手指氧化的情况,定期维护的主要内容之一就是清理内存条的金手指。

暂时想到的就是这么多,如果有遗漏,以后再补充,以上整个算下来大概费用是:4950元/月,如果所有3年折旧的按5年折旧计算,费用约3500元/月。所有的这些费用的前提是一切都在自己家里完成,个人计划未来能够自己建一个小小型的机房,解决好温度、湿度、用电之类的设备管理问题。这个是目前个人的状态,只要你的交易系统和交易策略可以,去Cover这个成本还是相当容易的。当然,如果刚开始,不需要折腾这么多,最好是你意识到缺什么的时候再采购什么,上述内容仅仅用来做一个参照。

有关动态周期,回答作出后有关回答中提到的动态周期是询问和争议最多的一个词语,我承认这个词语是我自己创造的,因为我找不到一个更合适的词汇来描述这种识别结果,但这个词汇的确带来了不必要的无解,这里重新梳理一下,动态周期:

它不是指数据的采样周期,不是指数据的计算周期,不是指特征提取的数据范围——即:不是一个Bar的概念。它指的是市场交易过程中的一个冷热周期,长短无法指定。

在我的交易系统里面没有Bar的概念,因为个人认为无论怎么设定Bar的大小都不能满足交易机会发现及时性的诉求。

交易系统会实时计算动态周期,但是不会实时预测动态周期,动态周期的计算结果是非常精确的,这种非常精确的误差仅依赖于事前设定的参数,最高误差可以等于1ms,我目前在用的是50ms。但是,这个动态周期结束与否的信号是滞后产生的,这种滞后在不同周期里面滞后的大小也不相同,这也是个人说无法预测的原因。为了弥补这种滞后,才叠加了价格摘要的预测。两种方法合在一起,其实说明的是一个简单的逻辑:市场是不可预测的,我们唯一能做的就是无限逼近,让当下对趋势判定的结论与真实趋势相一致的时间百分比尽可能的高,然后选择中段部分进行交易,在两头部分止盈或止损。

有关软件复杂度的必要性,和我之前遇到或预计的差不多,还是有蛮多的朋友不理解为何一个个人金融交易系统要把软件部分做的如此复杂,我相信这是一个认知问题,截止到目前个人完成的软件部分差不多都是被倒逼出来的,并非主观臆想出来的,并且也庆幸熬过了最难的阶段。对于这个话题我相信有相同经历的人一定会有相同的感受,而通过文字,个人觉的能做的就是多举几个例子:

目的不同,产生的对软件结构的要求自然不同,目的是否是全自动化交易会是软件结构的一个很大的区别,在知乎上有关量化交易的帖子里面看到一位同行描述自己踩过的坑:因为软件的一个Bug,让在15分钟内亏损了30万(这个帖子还在,可以自行查找,我这里就不贴链接了)。在我看来,这不是编程是否仔细的问题,这是软件结构的问题,看上去复杂的软件结构的目的就是让每一个部分的边界十分清晰(解耦),只有让每一个部分的职责非常专注和有限的时候,Bug才是可以受控的,否则——很难。对纯自动化而言,交易策略、仓位管理、风控策略,所有这些看上去高大上的名词在Bug面前,一文不值。当然,良好的软件结构设计不仅仅在于控制软件的质量,还在软件的延展性、灵活性、鲁棒性、可维护性上有巨大的不可见收益。

不晓得其它朋友如何解决滑点问题的?当然,滑点与策略有关,不同策略对滑点诉求和敏感程度不同,但是我见到但凡谈到量化交易,多多少少都会涉及这个话题。我不太清楚其它朋友或者机构测试滑点是用历史数据测试?还是实盘模拟测试?还是实盘交易测试?历史数据直接挂载肯定无法测出来滑点的大小;有些交易所提供模拟成交测试接口——但模拟成交与真实成交的差异就是模拟成交实际上并未成交;实盘交易测试,这个测滑点需要花费成本吧?而且滑点的测试结果与你的下单数量、下单密度和单一订单大小也有关系,我不晓得这个成本需要花多少钱,但至少在我觉得或许有更好的方式——这就是实盘回放这个模块存在的原因,它能够在家里面完全仿真实盘的发生过程,来验证或解决滑点的问题。虽然结论是目前的策略对滑点不敏感,但是我没有足够的验证我怎么能确认这个结论从而放心让程序去替我交易呢?这个例子其实就是有那么一些时候,有那么一些成本,你花了没有意义,但是你不花可能真不行。

不晓得别人如何定义样本的,个人觉得仅仅是交易对+时间维度的样本定义是不足的,在很多时候解决一个策略的某个问题往往需要有高针对性的大量样本,且不要有无关样本的干扰。例如:测试做多时策略对暴跌的闪避能力与闪避成本平衡点,如果你没有大量的暴跌样本,或不能够快速从一个未知样本中提取到全体的暴跌样本切片,这个测试就很快速难完成,闪避成本的平衡点也很难找到。

验证成本,策略研究,特别是包含有各种自定义指标的策略研究,往往你的想法的第一个门槛就是如何验证、有没有机会验证、整个验证从想法产生到得到结果需要花费多长时间,两个背景相同经验相同智商相同的分析员有了相同的想法时,差异可能仅仅在验证时间的长短上了。一个良好的软件结构能够给你提供尽可能短的验证周期,从而让你的想法早日变为现实。例如:个人觉得基于Bar的BOLL在Bar的时间范围内的变化我看不到,我想看一下在Bar的时间范围内上下轨是怎么变化的,或者让30分钟的布林带三条轨道全部变成连续的、即时更新的?现有的公开的BOLL计算模式可能就需要一定的调整。当然,这个诉求对有些场景是有价值的,而也有可能没有任何意义,问题就在于有了这个想法之后你手边的工具会支持你去验证这个想法吗而不需要纠结额外的时间开销吗?甚至你可以说这种想法很无聊,但真正有价值的自定义指标往往就是在众多看似无聊的尝试中发现的。

延展性,如果你的策略的主要盈利要点来源于普遍撒网、重点捕捞,可能就会对延展性产生特别强烈的苛求,最典型的通俗的例子就是搬砖,但并非只有搬砖有这样的诉求。最近出来一个新的交易所,提供了一种新的交易模式或者服务,一下子流量高的不行,但是对接这个交易所却需要花个十天半个月甚至更长,那还是会有遗憾的。虽然个人完成一整套交易系统的目的不在于卖、不在于合作也不在于承接资金托管,但是总会有一些比较奇葩的情况让你这个系统与外界产生交互,比如你非常好的朋友不要你的交易策略但希望你能给他提供基础的数据服务、你父母问你能不能给他/他们开个账户之类的,等等吧,当然,这些问题仁者见仁,智者见智了。

总之:软件设计的合理性是一个无止境的话题,他取决于你的目的、你的时间、你的经验,但个人认为它的重要性不亚于交易策略的研究,因为软件平台其实就是一个工具箱和物料库,不同的工具箱与物料库能够提供给策略研究的可能性与速度差异还是蛮大的。

2020年7月23日 更新目的、收益率与交易频度

昨天写完之后发给好友给点建议,好友看后建议多解释下什么是自动化交易,这里做个补充:

个人花了自认为确实非常大的力气在软件架构设计与实现上,可以说和交易策略上花的时间不相上下,或许这对于一些原本从事金融研究的同行有些不理解。。。。。。这里不得不说下个人认为的量化交易的意义——更多在于一种生活方式的选择。这不是矫情,看完下面的例子或许每个人都有自己的选择,三种生活方式:

IT企业高管,或者自己就是企业的老板,一年能有一个一百万或几百万甚至更多的收入,但是可以停下来休息的时间不多。年收入就按200万算。

基金经理,或专业交易员,虽然不需要996,但是至少也得做到工作日打开大盘打开工具,收集数据,做出分析,给出一些干预,决定是否要进行交易并执行,最终获得收益。而如果要获得50个点以上的年化收益,可能比这个描述要忙不少。年收入也按200万算。

自动化交易软件:开账户、存入资本金(不需要很多)、买电脑、拉网线、开机、启动程序,然后再长达几个月的时间里面都不需要任何干预,你可以去做任何你想做的其它事情,但每个月只有不少于4、5万块钱的收入,一年下来也就50万收入。但一年365天里面至少有350天可以自由支配。

如果是你你会选择哪种?我更向往第三种,这也是个人这个交易系统的目标,目前虽不能说一年365天可以休息350天,但实际时间支配能力与这个目标已经不远了。所以,同为量化交易,是否实现稳定的收益取决于交易策略,是否能够实现100%的自动化7x24交易且无须人工干预取决于软件架构+交易策略,个人下面帖子中大量有关软件的描述和解释都是服务于这一目标的。

有关收益率,就像前述帖子中的内容描述一样,个人比较隐晦的表达了不愿公开收益率的想法,因为收益率只是个结果对于了解或者探索宽客这个职业没有太大的实际意义,还会带来不必要的争议,削弱帖子中其它内容的重要性,唯一可以说的,据我所知的几个做自动化的独立宽客,是不会拿年化这样的指标来衡量收益的,基本都用日收益率或者更短周期。个人发这个帖子也是希望和热爱喜欢宽客这个身份的人分享交流,只关心收益率的朋友可以直接略过。

有关交易频度,本人的这个交易策略属于嗜血性比较强的策略,偏好振幅比较大的行情,而不在乎是上涨行情还是下跌行情,如果振幅连续很弱,策略触发交易信号的频度也会极低,大致频度可以描述为:监控3个交易所,合计1000多个交易对,但标准意义上的并发活跃交易对在单个瞬间并不多,平均下来每个交易所大致8-10个,合计就是25-30个瞬间活跃交易对,交易笔数不同行情不同交易对差异非常大,最小某交易对单日1-2笔,最大某交易对单日3000笔左后,均值在80笔/活跃交易对/24小时(正常行情,不热不冷)。

2020年7月22日 原贴的补充说明

看了一下其它的帖子,认为还是需要明确一下本人后面所谈及的内容:

本人做的交易策略的核心:

套利:不是套利,不管是搬砖还是三角套利,都不是。

高频:不是高频,延时在100ms以内就可以接受。

低频:但也不是纯粹的中低频,交易的周期完全依赖于动态周期,或长或短,完全跟随市场。

重心:策略的重心主要在动态周期和价格预测为主,趋势预测为辅。

滑点:滑点对这个策略产生的影响,与期望值比较,以订单计算小于5%,以实际收益计算与预期收益偏离度小于2%,后来就不管滑点这个事情了。

思路:个人策略中认为最重要的一点:如果我打算揣着10万元去挣1万元,我不会花时间去研究一只绩优股并等待他上涨10%。我会同时监控1000只股票,并且选择在恰当的但十分确定的时机买入其中的100只(时间上有差异,不是同时,但也相距不算远,但是单只买入时机需要精确到毫秒),每只买1000元,每只每次只挣不少于10元(不是挣了10元就卖,而是最少挣10元),然后把这个过程重复不超过10次。或者,认为每次挣10元太难,那每次只挣1元,把这个过程重复100次。而真实的情况每次挣的大多不止1元,5块8块的情况还是挺多的,偶尔也有二十三十的情况。

自动化:已经完整实现纯自动化交易,7x24小时(数字货币无休市),集群启动后无须人工干预,停机维护周期不短于60天1次,每次需要差不多1天时间。

心态:没有心态,自动化交易的目的就是彻底剔除人和人性在交易中的因素,100%剔除,既然都剔除了,就没有啥心态可言了。

手续费:手续费和策略密切相关,务必重视。资金周转率和手续费是负相关的,想尽办法提升资金周转率等同于打压手续费等同于提升收益率,不要小看这个哦。

2020年7月22日 原贴

先说个人几点比较深刻的感触:

1)除了技术开发之外,软件建模、数学、物理三个方面都很重要甚至更重要。这里,特别想建议大家重视软件建模能力,或许大多数认为开发一套量化交易系统或开发一套可盈利的交易策略很难,实际上开发一套具备支持策略持续改进的策略建模系统或许更难。而交易策略能否持续改进有可能是量变到质变的一个要素。

2)相信我,除非你在早期的学习、了解、尝试阶段,否则不建议使用现有的任何与数据采集、指标计算相关的库,因为它们终将成为你能够实现稳定收益路上的一个障碍。依据自己对系统和数据的理解逐步动手开始写,慢慢积累最终形成适合自己策略的完整系统,这事没什么捷径。举个例子:看到一种有关行情分析的说法,叫:脱离周期谈趋势都是耍流氓。而个人认为,所谓人为确定的周期才是耍流氓,5分钟?15分钟?4小时级别?120天均线。个人认为都是一厢情愿,市场中存在周期,但周期是动态的,虽然有不少的散户或者庄家会参考K线,但这改变不了周期是动态的这个结论,所以:根据今天日线是否收阳或收阴做出的任何判断与扔硬币没多大区别,所以:之所以想尽一切办法追求纳秒级的延时或尽可能减少滑点带来的影响无非都是对周期的动态规律未能量化的折衷。

3)即便是一个支持双向T+0交易的市场,做多和做空并不一样,不是把图表颠倒过来看的关系,在基于数据的行为分析中,做多和做空十分不同,这种不同的量化认知有助于对周期的动态规律予以界定。

4)同样,如果你认为周期是动态的,那么,市场中只存在两种行情:上涨和下跌,不存在横盘这种行情,如果进一步,可以分为:值得介入的上涨和下跌周期,以及,不值得介入的上涨和下跌周期。因为基于动态周期的考量,所谓的横盘,价格必须是一条直线,这种情况除了停止交易外不可能存在。

5)最后,略微拗口,但个人认为有意义:忘掉价格,如果在整个交易策略的影响因子中还能够见到价格这个因素,这对于分辨交易行为产生的数据在时间流逝过程中的本质来说是一个障碍。同样,忘掉价格需要你的交易系统支持,也就是在软件建模过程中解决的问题。一个交易策略,不论应用在股票、数字货币、期货还是其它市场,需要调整的应该是你交易系统或策略中的一些特有、独有的参数,而不是剔除交易策略之后仍然存在的因素(例如价格、成交量等)。

再说说个人具体的实践

自主开发一套完整的量化交易系统并在实际交易中,先后历时近30个月(含策略),代码行数累计接近未超过20万(不含交易策略,策略只有一个,目前演进到第41个版本,每个版本非框架代码大概只有500-1000行)左右,仅挑一些特别的地方说说:

工具及性能

用的啥工具?都是常见工具:python、redis、mysql、django。大致就这些。个人做了20多年的软件,认为完全不需要担心python的胜任能力问题,运行效率太低?不存在的。我认为抛开交易策略,仅谈基础架构的话,软件建模的重要性大概能占到60%,而工具本身有个10%就差不多了,今天很多时候性能的问题大多都可以通过设计来解决,而一个顺手的工具在这种时候可能更重要,你顺手啥就用啥,个人基本使用过大部分市面的编程语言,目前顺手Python就用了python。举个例子吧,用Python写了一个分布式的socket服务,使用了python自带的socket库,在其上进行了进一步的封装,实现了集群和节点之间的点对点通信、支持多端口、多线程、拆包拼包、极端情况下仍然无粘包,总之做简单的消息队列同样在本地网络速度优于redis5的速度并且一样可以实时持久化(注意:并非说这个东西优于Redis,Redis是一个通用中间件,我做的这个只是服务于我自己的集群,并非商品或产品,这还是两个概念,只是说在我的这个集群的需求中我定制化开发了一套更优化的组件),就如同即便有了这个组件,在集群的另外一些场景我依然会选择redis一样,各自定位和侧重不同。

交易策略的性能?也不存在的,交易策略的性能更不依赖是python还是C++了,量化交易往往计算的是一个时间序列的结果,如果时间序列是固定的(例如:8:00:00~9:00:00),那python和C++确实有区别,但如果时间序列的范围是实时推移的,性能主要依赖算法设计的问题,哪怕是求一个简单的SMA,能不能在动态时间序列范围的前提下把时间复杂度降低至O(1)才是本质区别,而不是工具,实际实践中使用了大量的空间换时间的做法,来解决性能的需求。

使用django的原因是,整个集群中有大量的model、参数、任务需要管理和配置(看了一下,仅配置项大概有几百项),django,快,搭起来快,改起来快,结构清晰,可维护性好。需要注意的是:django只能用来做管理,django中的对象与交易节点中的对象不是一回事,不能图省事直接用django中的对象在交易节点中计算,甚至交易节点为了性能的极值,连对象都不存在。

mysql,做数据持久化,虽然整个系统没有什么东西是需要用mysql进行分析的,但数据一旦关系化之后在对数据的使用上、以及利用数据的软件设计上带来的便利很多的。慢?不存在的!目前mysql大小大约在1.5T磁盘容量,跑在一个虚拟机里面,最大单表3.3亿条记录,查询任意间隔(间隔最小步长:毫秒,为什么要这样小单位的精度?例如:基于标签的样本分组与自动切片——提取2019年的某交易对的所有暴跌切片)1小时的数据,毫秒返回,任意间隔1天的数据也就是几百毫秒,一年的逐笔数据,仅受网络吞吐的影响,mysql本身的性能影响不大,完全在可接受范围内。当然,你也可以使用其它的持久化方式,但是对于精确化查询和调阅,真没有关系数据库用着顺手。如果说需要注意的话,那就是mysql建库之前一定要考虑周全,做好设计,分库分表分区一个都不能少,my.cnf该调的参数应仔细调,该买的内存不要省,磁盘如果还在用HDD或者SATA的SSD那还是得换,如果有经验,做好索引字段的编码工作,好的索引编码对提高查询速度有额外的功效。

基础架构:

支持对不同市场、不同交易所的快速对接,只要对方提供常用标准协议,整个对接过程1-7天可完成,数字货币所有交易所都可以在1天内完成,对接完成的标准就是可以开始交易。系统也可以针对其他市场、交易所增加新的协议。

支持服务端限频类接口的限制规则自动测算及自动适应,并支持对请求次数的动态分配。简单说来,该快的时候快,该慢的时候慢,该快的交易对快,该慢的交易对慢,不超标,不浪费。

整个系统不需要DNS,完全自主自动管理目标交易所的访问资源并作出最优选择。(数字货币独特需求)

同时监控交易对数量仅受带宽限制,目前同时监控3个数字货币交易所,近1000交易对的逐笔与深度信息(不需要ticker)。交易对上架、下架、暂停交易、恢复交易自动化(几乎无发现延迟)。

支持多集群部署与统一管理,同一个集群内的所有节点(管理、采集、计算、交易、智能链路、数据服务、缓存、持久化、备份)可以任意无限扩展、热插拔、异地部署、多份部署,其中多份部署能够最大限度的解决数据完整性与数据及时性的矛盾。

支持交易对漂移。

集群状态和交易行为全部服务化:即,如果希望开发自己的展示界面、移动端、与其它系统驳接十分方便,但是由于这个系统仅仅个人自用,暂时没有做太多移动端的活。

自我保护:支持交易策略自毁保护(任何非授权的主机访问或干预,包括断电、断网、U盘插入、机箱开启、异常登录等均会导致交易策略自毁并由异地无缝接管)。

实时持久化(数据落库延时可调,最快小于1秒),且直接持久化入关系数据库。

支持一键部署:一个空白的CentOS,跑个脚本就能把集群的各种节点、各种组件、各种环境与数据的初始化完全构建起来,同时,跑的这个脚本也是系统自动生成的。不要小看这个功能,能够节省下来大量的时间供你去研究交易策略。

交易策略:

详尽的策略要点应该不会有交流的机会,这里只捡一些比较特别的说说。

1.没有K线、没有SMA、没有EMA、没有RSI、没有MACD、没有BOLL,所有我能记得住名字的指标都是最终被我抛弃的指标,我不是搞金融出身的,最开始和大多数人一样去了解这些,后来抛弃的原因只有一个:给人看的东西不适合给计算机看。这是我的感觉,也许因为我对这些指标的了解还不到位,我也相信有人利用这些指标达到了很好的效果,但是我确实没能依赖这些指标收获有价值的结果。(这一观点也与我的交易策略有关,我的交易策略设计的前提是用确定的输入得到精确的输出,我认为慢牛、瀑布、有效突破这些描述必须找到有效且反复可用的模型能够定义,否则对计算机而言就是不存在的)

2.可调且可动态调整的计算采样率,最小采样率为1笔(数字货币中个人经历的最大并发1毫秒2592笔成交记录,发生在2019年6月27日凌晨4点半某数字货币交易所,时间戳18,成交金额.美元),支持按时间、按笔数、按手数或组合的计算采样模式。

3.动态周期自动识别,基于资金池的动态周期自匹配。动态周期前面说过了,这里稍微说一下资金池与动态周期有啥关系:动态周期并不存在一个固定的大小,小到可以很小,一个周期最小大概只有几秒,大到可以很大,几个小时,几天,理论上甚至可以达到几周。动态周期越小,周期内盘面支持的资金容量越小,资金周转率越快;反之,周期越大,周期内盘面支持的资金容量越大,资金周转率越慢。周期的大小不是我或者我的交易策略决定的,周期的大小是由那一段时间市场里面所有参与交易的庄家、机构、散户们的行为共同决定的。

4.分层价格预测:预测当前周期结束时的价格摘要(此处不预测涨跌,不预测发生的时间,不知道周期啥时候会结束),一般会根据算法给出1-5个摘要并按照优先级排好顺序,每个摘要有一组用来捕捉的参数,认定价格与摘要是否匹配需要一个特定的方法,而不是简单的比较相等或大小,一旦认定匹配则会触发交易行为,摘要最多5个,结果一定是命中5个摘要中的某一个。为什么一定会命中5个中的一个,因为周期是动态的,周期拉长就会产生新的价格摘要,再拉长,会再产生。那价格摘要会不会无休止的发散下去?这个问题我回答不了,大概类似于苹果的股价会不会永远没有尽头的涨下去这种属性的问题?

5.趋势预测:对趋势的定义严格与动态周期挂钩(周期结束点就是趋势反转点,这里不存在反转和反弹的文字区别,反转的意思就是相反方向)、与资金容量挂钩,没有横盘这个趋势,只有涨跌两。这里的趋势以及趋势的变化不会产生交易信号,或者说交易信号不直接依赖趋势,趋势影响的是价格预测方法,价格摘要和摘要匹配认定结果出发交易信号。

6.实时仓位管理、动态成本计算等,这个没什么新鲜的,对于我的策略必要但不是很重要,所以做的结果也没什么特色。

7.策略启动需要3-5分钟的预热时间以及约1分钟的步调协调时间,这是个问题,但目前的策略只能缩短这项时间,无法回避。策略的在线升级如果不需要重新预热则无缝升级,如果需要重新预热则须重复预热过程。

8.支持对一只股票或一个交易对当前所处的市场周期做出精确的定义:我不晓得是否有同类的或相似的描述,这里的市场周期指的是:同一只股票即便是达到某个历史价位所说明的问题不一定一致,我这里对市场周期的定义大致分为初创期、上升期、稳定期和退出期,与一个公司的生存周期基本相符,但定义这个周期的目的不在于去研究一个公司处于哪个周期,而是用大量验证后的特征描述当前周期后,优化交易策略的偏宏观参数,这个参数能够指导交易策略的利润诉求表现的更加激进、保守以及无利润诉求。该项工作目前仅在研究和调试中,尚未实际投入使用。

分析回测

1.支持策略的定义、调试、回测、评估、可视化、比较、在线发布、在线回滚(注意:是在线发布,就是直接发布到计算节点上去并且立即替换,支持这个能力目的并非在于要频繁发布,而是在于不停机,尽最大努力减少停机)。

2.支持基于行为的标签化的样本分组与自动切片提取与自动持续追加,例如:暴涨、暴跌、诱多、诱空、画门、阴跌、慢牛、绝对底、绝对顶等标签。但需要注意的是,这里的标签和标签分组后的样本不是人工定义的,而是通过定义的特征自动切片并选取的,且,选择了足够数量的样本结果人工复核确认过特征有效性。换句话说,机器能够事前判断、事中处置的前提首先是能够事后认定。既然已经支持了基于行为标签的分类样本定义,肯定支持基于行为的批量样本回测与评估。(注:绝对顶或者绝对底是我自己的叫法,它基于效果的判断标准就是满仓和平仓一定不会错的位置,但由于这样的认定结果同样依赖于动态周期,所以虽然有这样的标签,但实际符合结果的认定次数并不多,而且这里的绝对顶和绝对底都有衰减时间,一定会获得利润但也一定无法获得最大利润。与通常股评里面的绝对顶和绝对底不是一回事)

3.支持任何分析行为的过程自动纪录(使用到的样本、使用到的策略、具体的样本和策略内容、使用了啥指标、指标值、指标代码片段、跑的结果如何等等)。说到底,策略最终最有价值的是通过一系列艰苦的探索和实践留存下来的一些常量(当然,前提是先得有模型),而在探索过程中,有价值的常量不一定是当前这个,也不一定是下一个,而有很高概率是上一个、上上一个、上上上。。。。一个。

4.高性能:50ms的计算采样率算1个交易对1年的数据(约1亿条),大概一顿饭的功夫(不超过60分钟,不同交易对有差异),如果把计算采样率提高到30s,大概只需要不到20分钟,50ms连续3日数据大概1-2分钟。当然,分析的性能与策略本身有很大的关系,这里是说除了策略之外,在软件架构上同样有很大的提升空间。

5.支持实盘回放:我说的不是回测,我说的是实盘回放,要求成交顺序、间隔、延时与实盘在逐笔上完全一致,算是一个比较简单的仿真。如果你对滑点没有信心,实盘回放的结果和实盘交易的结果被证明几乎没有误差。那,实盘回放并未包含当时在深度里并未成交的挂单啊?不影响,或者说至少在我的交易策略里面不考虑这个,我只考虑能够确定的内容,所有我确定不了的内容都不会成为分析的对象,具体到这个问题,那就是如何精细化测算当前以及更长时间的资金容量问题。冰山订单你在深度里面看不到,但是在交易结果里面却是存在的。

其它建议:

1.用机器学习或相关技术来分析股票或者金融衍生品:我不建议这么做!我对机器学习没有偏见,这项技术的用武之地也比比皆是。不建议的原因是:对交易趋势(或价格或其它交易策略的主要内容)的分析最最重要的个人认为不一定是分析方法,最最重要的是你分析的对象,意思就是,生产工具重要但不是最重要的,生产资料才是。可能有人会说,生产资料不就是那些数据吗?价格?成交量?深度?时间?。。。。。个人认为,还真不是。。。一个数据是数据,但是一串数据讲出来的或许是一个故事,而不是数据本身。所以,使用机器学习当你把数据扔进去使用某种方法开始跑的时候你就已经假定了你扔进去的数据是有相关性的,至少你认为你手中掌握的十来种数据一定能够支撑你设定的分析目标的,但如果这个假定不成立呢?再或者,如果一定要使用机器学习,那也应该是已经解决了成分分析中的成分问题,这部分个人感觉目前似乎只有靠人。举一个例子:或许有人认为交易行为存在一个密度的指标、且其是可以被量化的、且其在某个方面是具备解释意义的,而另外一些人认为不存在这样的指标或这样的指标无意义————不论观点是啥,有一点是明确的:交易密度这样的指标在交易所提供的数据中是不会有的,甚至你我对交易密度的定义都有很大的差异。同样,现实生活中惯性等于质量乘以加速度,那么股价的波动有惯性吗?惯性该如何描述呢?再比如,你确定我们对交易烈度的定义一致吗,你确定我们认为交易烈度的可用价值一致吗?真实波幅(ATR)真的能反映价格的真实波动幅度吗?在我的策略里面认为不可以,在其它一些交易员的策略里面被证明可以。所以,个人认为弄清楚生产资料后,用不用机器学习都可以,个人有个人的偏好。或者说,机器学习能够告诉我隐藏在数据中的规律,但我并不太指望机器学习能够告诉我隐藏在数据中的数据。

想到哪写到哪写了一大堆,可能会有人问目前实际效果如何?个人对策略的执行效果是比较满意的,最直接的感受就是如果做量化交易,衡量收益水平,就不应该再用”年化“这个指标了,太慢了。但又不可能去过多谈及有关交易策略的内容,所以我也不太清楚写这特帖子有啥意义,大伙权当看个热闹,或者对这个行当感兴趣的朋友直观感受一下大致的范围、难度以及工作量,不用当真,纯属兴趣而产生的交流,不是广告,不是入行建议,系统不卖不租也没有合作的意愿,不用推荐不用点赞也不用转发。

斟酌半天,选了一些便于”大致看看“的截图,见谅:

一个典型的正在运行的集群(D01,开发与分析集群,142与本帖无关:-)持久化数据库磁盘占用集群的控制台这个集群的主机:2U48T 512GRAM 19.2THDD+800G U2.SSD

最后,用一张图来说明如何解决Python和C++的原生性能差异,娱乐一下:

DDR3 都是单条64G的,主频不需要高,但延时要低。

第一我不是做量化的,我只是个交易员出身,但我确实早在15年前就在量化公司做交易。

我对量化的理解是。交易标准化,参数化,模式化。最主要的是交易因子的利用。和底层逻辑框架的构建。

那么来说说我的经历

刚才看了一篇在量化公司交易员的一些对量化的阐述。

突然想到了自己学交易的的早期阶段,那么就讲讲经历和理解。

因为大学时期,我并没有什么投资的钱,但热爱交易的我,只能去应聘一种职业叫美股交易员。

这行的启蒙是一位在华尔街的操盘手带回中国的,叫高山。

简单的说就是把人培养得像机器一样。然后稳定获利。那么还有一本书也是个华尔街的交易佬所写,操盘华尔街。

这段经历是个非常好的启蒙,包括现在国内流行的T0工厂或者公司都是照搬其模式。

我所在的公司是个加拿大的小券商,公司除了在我们这,在其加拿大也有分部,那边也请了很多华人交易员,公司老板是程序员出身,交流培训还是用的SKYPE,每个人都有一个英文名。那时候整个A股还没有所谓的高频量化,我们公司其量化策略在某一年获取了2Y美元的骄人战绩(08年以前)

那时候应聘比较好玩,让我知道了什么叫开放性,公司并不在乎我们学历,并且只要在校的大学生,第一天去面试已经到达凌晨,给我们做了很多题(几乎全是数学题和逻辑题),然后比较心系扑克玩的怎么样,游戏打的好不好。

后来老李的逻辑性,和对简单事物规律发展的研究体系少不了这些经历,为什么老李对市场的拆解和对策略研究和别人不一样,因为早在0几年老李还是个大一大二学生的时候就接触到了多因子!

虽然我们是个培养交易员的公司,因为公司老板还是挺有实力的,所以每天给我们亏损的上限是同行内极高的,你上岗第一天每天可以亏200美金左右,当然有时候亏的更高。老板希望每个交易员可以在高频后发现一些规律,反馈到总部,他们来做交易模型。

我记得我最有成就的一个有趣的小策略,(如果你是做策略的你的亏损额度公司会安排)。后期我做了个比较有趣的策略(可以说现在的量化公司国内还没有开发研究此对冲策略的,我写下来估计又给A股市场可能带来新的发展了。想当年16年前的时候,大家看到现在的昨曾涨停,昨日涨停老李自己就把表格制造共享在了互联网上,当时确实有国内顶尖的金融科技公司猎头猎过老李做投顾产品设计,也许后来有程序员把指数开发出来后拿了巨额奖金,也应该来感谢下老李提供的思路吧)

我把多头排列的选出40只股票,空头排列的选出40只股票,在盘前和开盘竞价阶段,同时买入。因为老李本来就是金融专业,实盘经历也多,对应着自己所学概率论,平均每隔5-10分钟,假如市场是空头行情,那么老李认为下个5-10分钟,延续空头行情的概率略大于多头。那么在这个组合里,多头组合具有劣势因子。我会卖掉多头组合里某个序列2只票,而空头只卖掉某序列1只(里面用到了去除多头组合里涨的最好的和跌的最多的,就是理智取分法,因为最极端的具有很强的趋势性他逆势的概率更大。所以在非情绪端,去做序列),留下一点点空头敞口。每隔几分钟做一次类似的处理,直到当天完全清仓。

当然以上策略只是一个小插曲,也代表了量化对冲交易,他是纯模型的概率,只是开发人的底层思维的展现,他具有助涨助跌性,为什么呢???等于在这个策略下,每一次空头行情端,我会选择去减掉教多的多头持仓,我也相信,绝大多数的量化策略,都是动量交易,趋势跟踪为主,那么在庞大的市场上助长助跌就非常明显了。当然更严谨的策略开发和参数校对,肯定更复杂。。。。但老李这个底层量化策略,应该是至今还没有干的。而且老李在15年前就开始干了。。有心的量化公司看到老李的贴,估计就上面几段话就可以受到一些新的启发,在现在量化底层同质化的市场,是不是感觉又有新东西可以研发了?!

------------------------------------------------------------

还是话回正题,虽然老李也许擅长搞策略开发与研究,但事实上,老李更喜欢的是独立交易,哪怕交易能力算是弱项。那么老李是传统的学的大单突破(爆大单),还有一部分交易员学的刷单。。那时候美股市场很多毛票,比如F(福特汽车),C(富国银行)等等。在里面赚取1分钱的差价,其实和做打板有点像,就是要以最快的速度在一个单子快爆完的时候立刻填上去抢位置。

当然这于量化无关了,跟量化有关的是在公司有一批人是做特殊手法(暗盘),所谓的暗盘,美股市场和A股市场不一样,并不一定报价通吃,他有很多交易通道商,不同的通道商费用不一样,有的通道并不能吃别的通道商的价格,有的可以通吃,甚至还有返费通道(成交可以赚手续费)。不过老李一般用最贵的通道,通吃所有我记得叫BATS,老李天生就是想做就干,不计较成本。

那么来说很多通道很有意思叫暗盘,所谓的暗盘就是挂单不显示,或者默认显示1,就是你在L2的报价里,美股你可以看到每个通道商在不同价位的报价,但是暗盘可以不显示或者显示1,仅有一手。

在交易的时候你会发现很多上面报价只有1手,但无论买盘10手还是100手价位就是打不穿,那么就是遇见暗盘了。大量的暗盘只存在最大的可能就是(程序单,也就是量化交易,那时候业内的名词叫黑盒子)

直到后来TWAP,VWAP才传导到国内,那么公司最赚钱的一批人并不是做技术的,而是做暗盘的,也就是赚程序的钱。

所有的程序都是在执行计算机的交易模型,在高盛,大摩,等等这样的公司,很早就启动了算法交易,甚至现在国内的公募也开始大量的使用,如果你用L2你会发现现在很多很多很多票里面经常出现(大量1手2手3手的反复挂撤单),甚至很多小票都有,这就是这几年大量量化交易的表现。

我们先还是来说当年我们如何赚量化盘的钱,首先通过一些小资金的打单,去找一些小票(大票博弈太深),去测试哪里有程序单,也会有些主动性的扫盘的程序,一般都用C单(暗盘扫货),目的就是不让你自己他买了多少,或者挂了多少。

第一种策略,找寻有量化托底的个股,简单的说一只成交量很小的股票,进入了某个公司的股票池,但是因为量太少,他策略不是扫货策略(扫也扫不到多少),于是他会在买1,挂暗盘。在价格波动的同时,我们也用暗盘去测试,他是不是在拖股价需要货。

简单的说他的策略可能是今天需要买1000万,但很少主动扫货,一个股票10块,如果到了10.01,这个单子就顶在了10.01,如果在10.02他就去了02,简单点就是说也许他的机器首先今天要买1000万的资金,主要是放那么里给空头砸,在10.01到10.1他都要,这就好办了,我们自己去扫价格,每次去砸一下发现还在,继续往上扫,然后某个价位他不跟了,那么开始慢慢出货。当然去找这些量化单,是有手法的,包括去拉升去测试都是有手法的。

第二种策略,有些程序单,他是急着要货,主动扫盘的,他会以C单的形式,比如上面有一个大的挂单,他会自己去扫,那么你就主动性的跟着他拿货,后来我们找到技巧,他用什么通道,我们也得用一样的,他用什么单,我们也得用什么单,这样机器会认为你是自己人,为什么程序会这样,我们也不理解。

当然以上谈的只是利用程序的一种,还有很多利用量化盘赚钱的策略,比如说以前收集了一大堆数据(我们的服务器是很贵的当时),发现今天大量的程序盘是空头,逻辑猜想,今天一整天行情里,超级大资金(量化)是主多(美国的日交易里面机器人比重比A股多的多),他们可能在一天的行情里,没有完成他们的目标,那么最后几分钟他们会有集中扫货行为,那么我们在最后的2 3分钟开多单,竞价平仓,赌概率(这个策略哪怕在前两年都非常吃香,我身边还有很多活跃在美股市场的交易员就做尾盘竞价年收入过千万。(不过后来国内研究这组数据的公司关闭的数据源,大家买不到了,估计羊毛割狠了,要不就是中美汇率关系导致数据服务的量化公司不再提供这种量化数据源) (在前几年的A股纳入某指数的时候有数个交易日,最后竞价出现了外资抢筹或者砸盘的行为,也是同理),只是我们每天都在干这个活去赚取一些羊毛。

-------------------------------------------------------

所以中国的量化到现在无非还是在复制模仿华尔街数十年前的一些东西,交易策略也无非动量跟踪,对冲阿尔法,只是因子算法对市场的砌和与改变,我今天写出老李十几年前怎么看待美股的量化市场,怎么去做策略做交易,也不写太深,只是给他们对神秘量化认知的一个科普。

量化交易有非常非常多的种类,但最终记住,他只是执行策略的本质,虽然也有反趋势跟踪,但绝大多数,都是对势的理解执行比人更坚决。

所以量化背不了市场涨跌的锅,他只是市场博弈的一份子,也许他只是在赚市场情绪的钱,他只是加速了短期的助长助跌性。甚至你自己都能去猜测这些资金的底层,做一些割量化盘羊毛的策略。而且量化时代的到来,趋势性会更完整更坚决。只是转势的时候也会更完整更坚决。

最终决定交易胜败的并不是你的对手盘,而是你自己的策略,我反道觉得量化交易的份额做大,对好的盘手更容易去理解跟随市场的趋势!

今天就讲到这吧,说说数十年前的经历,也是比较感慨了!