财之道 - 分享付费文章

量化交易入门保姆级手册

其他 ·

量化交易入门保姆级手册

来自:
生财有术

2024年04月17日08:02

这个主题,我在生财搜索了一下,没有任何一个人分享过。但众所周知,用钱生钱是最快速的一种生财方法。作为一个谈钱的社群,怎么就没有一个人分享量化投资呢?那就让我来开这个先河。需要声明一下,不是看完本文就能学会量化,而是给到你一个最简路径,去学习量化。

什么是量化投资?普通人投资凭感觉,但是,全球大部分的基金,都已经是量化基金了。通过数据分析、回测,能够做出更有效的投资策略,跑赢大部分人。

以下是百度百科的定义:量化投资是指通过数量化方式及计算机程序化发出买卖指令,以获取稳定收益为目的的交易方式。在海外的发展已有30多年的历史,其投资业绩稳定,市场规模和份额不断扩大、得到了越来越多投资者认可。从全球市场的参与主体来看,按照管理资产的规模,全球排名前四以及前六位中的五家资管机构,都是依靠计算机技术来开展投资决策,由量化及程序化交易所管理的资金规模在不断扩大。

量化投资难不难?我觉得如果你数理逻辑好,其实是比较容易上手的。做量化,需要2条腿走路,1条腿是写代码的能力,我学习了3个月左右,但我会把量化常用的一些代码模块告诉你们,精简之后,也许学习2周-1个月就能入门了;而另1条腿,是策略,优秀的策略大家都敝帚自珍,我会分享一些常用策略,而更优秀的策略,需要你自己来打磨。

一、代码的入门

我使用的是python,也是最容易学的语言。我是看《Python编程——从入门到实践(第2版)》这本书自学的。书中需要学习的部分,我给大家圈出来了,其余部分在量化交易上没什么用。

第1-8章全部内容:共139页,基础知识,必须学。

第9章使用的情况很少,快速看一下知道干嘛的即可。第10章全部内容:共22页

第15章15.1-15.2.3:共5页,用来画图表的,快速过一下即可,如果你不需要画图来直观看收益,也可以不看。第16章16.1:共14页,这个需要学一下。


第17章17.1:共7页,API必学。

附录A、附录B:共9页,必看。

所以444页的书,你总共需要学的也就196页,连一半都不到。

二、数据获取

如果是做A股,数据可以在JoinQuant获取:https://www.joinquant.com/default/index/sdk非常简单,三行代码即可获取,可以申请免费试用。

如果是美股、虚拟币,每个平台都有api文档,举两个例子。

老虎证券:https://quant.itigerup.com/openapi/zh/python/overview/introduction.html

OKX:https://www.okx.com/docs-v5/zh/#overview

仔细观察上图数据可以发现,最重要的7个字段:time、open、close、high、low、volume、money,分别对应了K线开盘时间、开盘价、收盘价、最高价、最低价、成交量、成交金额,基本上有了这7个数据,我们就可以做任何分析了。

三、数据处理

1、首先我们需要计算指标,我们经常会用到的库叫talib,这个库不能在线安装,需要自行搜索talib的whl文件,然后pipinstall本地文件路径进行安装。

安装好后,几行代码就能轻松计算指标,比如macd,我给个示例。

如果是一些talib不支持的指标,那么需要自己手动计算,比如日本K线图,我也给个示例。
2、很重要的一点,其实我们无论是回测,还是交易,其实都是在对一张表格进行处理,在python里,用的是pandas库,表格被称为dataframe。上文推荐的学python的书,没有讲到这一块,所以需要补充学一下这个。可以参考这篇文章:https://blog.csdn.net/suiyingy/article/details/119768140另外,我使用dataframe,经常要用到的功能如下,可以自行搜索使用方法,其实写代码就是这样,我也是遇到不会的或者忘记的,就去搜索一下对应的方法怎么使用,而并不是一步登天,全部都学会,或者都记在脑子里:

varnothingloc()函数和iloc()函数:用来取表格里的数值,或者修改表格里的数值,这两个是有区别的,一定要搞清。

varnothingset_index()函数和resetindex()函数:用来设置表的索引,以及重置表的索引,非常重要,因为没有索引就无法定位到表格内数据具体的位置。

varnothingnumpy.where()函数:需要引入numpy库,用来对符合条件的特定值,进行修改。

varnothingastype()函数:用来修改数据的格式,改成int、float、str等等。

varnothingdrop()函数:舍弃某行或某列。

varnothingsort_index()函数和sortvalues()函数:根据索引或者内容来排序。

varnothingrename()函数:重新命名行或列。

varnothingread_csv()函数和to_csv()函数:从csv文件载入数据,将数据保存为csv文件。

varnothingmerge()函数和concat()函数:都是将2张表拼接,不同的是merge是根据某一字段来拼接,concat是直接拼起来。

varnothingcopy()函数:复制一张表。

varnothingdropduplicates()函数:去重。

varnothingpct_change()函数:计算百分比变化。

varnothinggroup()函数:分组。

四、策略回测

什么是回测,回测就是拿历史数据,来验证你的策略,看历史数据跑出来,你策略收益情况如何,只有回测数据好,
才有进行实盘的必要。

但回测要注意很多地方,以下这几条非常重要,要反复读反复看背出来:

1、历史数据只代表历史,不一定代表未来,一定要明白这件事。我们只是通过数据分析,在做一件大概率的事情。

2、策略的容量是多少,假如你回测的标的整体市值很小,单位时间的交易金额也很小,当你投入大资金的时候,直接会影响它的价格波动,这时候策略会失效。同样的,一个策略,用的人多了,也会失效。

3、如果一个策略回测结果很完美,大概率是你过拟合了。我估计每个做量化的人都犯过这样的错,就是通过调整各种参数,会出来很完美的回测曲线。但上了实盘就会被吊打。

4、回测的时候,要把手续费考虑进去,很多策略没手续费一飞冲天,算上手续费就是垃圾。

5、回测的时候,要把爆仓风险考虑进去,很可能2根K线收盘价-收盘价还是盈利的,但是按最低价会爆仓,如果不加以考虑,那么实盘会死很惨。

6、回测周期要足够长,并且每一段的表现是相对稳定的,否则不能证明策略有效性,也无法穿越牛熊。

7、不要迷信单一的数据,比如说胜率很高,但是每次盈利金额很小,每次亏损金额却很大,那么一旦实盘你无法保证这个胜率,很可能死得很惨;比如说胜率很低,每次盈利金额很高,每次亏损金额很小哦,那么一旦实盘你盈利的时候吃不到那么多利润,也会死得很惨。一定要综合去看所有的情况。

8、通常,回测要看以下数据,胜率、平均每次盈利百分比、平均每次亏损百分比、总的平均盈亏百分比、连续盈利次数、连续亏损次数、夏普比率、最大盈利百分比、最大亏损百分比、年化收益率、年化收益/最大亏损百分比。

9、不要开天眼用到未来函数,比如某个指标,是根据500条K线算出来的,假如你先算指标,再用for循环一行一行去运行,那么运行到第400行的时候,他是依赖过去的400行+未来的100行算出来的,等于已经开了天眼。开了天眼,回测结果当然很好了。

10、再说一遍,不要迷信回测结果,它只代表历史,历史会重演,但如何重演不一定。

下面贴一段我回测的代码,仅供你参考,不构成任何投资建议,不保证盈利。


五、实盘操作

实盘的时候,美股、虚拟币都有API,可以直接交易。如果你要交易A股,需要下载电脑版的类似按键精灵的软件,让代码控制按键精灵去交易,就是模拟鼠标的点击行为去买卖。

实盘的时候要注意以下事项:

1、实盘和回测是不同的,要处理好各种报错的情况。如果容错不行,会死很惨。

2、如果有模拟盘,可以先操作模拟盘,再操作实盘。

3、小资金测试,稳定了再上大资金。尤其是有些策略无法回测的,更要先用小资金。

4、注意API的限速,不要过度请求了。

5、高频的量化和中低频的量化是2个领域,刚入门别碰高频,非常依赖硬件、网络,需要优化到ms级别,可能也不适合用python来交易,这一块具体我也不懂。

6、不要迷信别人的策略,外面有很多租策略的,但他不会告诉你策略的原理,有些策略过拟合,有些策略用到了未来函数。即使这样的情况都没有,策略对你来说也是黑盒,也可能有黑天鹅的情况发生。我自己也中过招,一开始一直写不出好策略,就去租别人策略,然后爆仓了。

7、控制好杠杠倍数,这太他妈重要了,在生活中,一件事我觉得有80%把握就行了,100%是浪费资源,但是,投资你要做到120%安全,爆仓就归零了。而且,举个例子,虚拟币平台,比如你开100倍杠杠,并不是跌1%你就爆仓,他为了防止穿仓风险,是提前强平的,他要预留一部分保证金,而且这个保证金他是没收的。在这种情况下,你开的杠杠越高,爆仓风险不是匀速递增的,而是加速递增的,开100倍杠杠,跌.0.5%就会爆仓。

8、有些平台是能分多账户运行的,比如虚拟币平台,那么如果你跑多币种、多策略,建议分账号运行,会大大降低策略的难度。尤其是不要作死,在一个py文件下,写多个策略,难度几何级上升。在一个文件下,写多币种策略,也把我搞得半死不活。

9、一定要做好止盈止损,见过太多人,入场时机选得很好,但会做止盈不会做止损,或者会做止损不会做止盈,不会止盈止损,你永远无法盈利。

下面贴一段我实盘的代码,仅供你参考,不构成任何投资建议,不保证盈利。






六、策略介绍

这里我介绍一些常见的策略,只是做个科普,并不保证盈利。

1、定投策略:定投顾名思义,就是固定每天/每周/每月对一个标的进行投资,其实定投手工也能完成,为什么需要量化呢?因为量化可以对定投做优化,比如当价格低于近N天均价时,我们加大定投金额;当价格高于近N天均价时,我们降低定投金额。

2、择时策略:其实大部分的策略,都是择时策略,我们选择在某个指标发出信号的时候买入做多(比如macd金叉),在某个指标发出信号的时候卖出(比如macd死叉),这用代码是很容易完成的。

3、套利策略:比如期现套利、跨期套利,利用期货和现货、不同期的期货之间的价格差,进行套利,因为期货和现货的价格是不同的,但随着期货临近交割日,他会越来越接近现货价格,这中间就有套利空间;比如三角套利,外汇使用得比较多,假如美元兑人民币、人民币兑英镑、英镑兑美元之间,有价格差,就有套利空间,这种空间稍纵即逝,几乎不可能人工取操作。

4、网格策略:选定开仓的价格为网格0点,往上涨比如1%就是一格网格,将价格切成若干个网格,可以做顺势网格,往上涨就加仓,往下跌就减仓;也可以做逆势网格,往上涨就减仓,往下带就加仓。利用价格的反复震荡来获利。
5、对冲策略:同时开多仓和空仓,当涨的时候加仓多,跌的时候加仓空,发生震荡行情,那么多空会对锁,降低你的损失,出现单边行情,则盈利离场。6、中性策略:做多你看好的股票,做空大盘。这是基于这样一个假设,你选中的股票,会跑赢市场,那么当大盘涨,你选的股票涨得比大盘多,你赚钱;当大盘跌,你选的股票会比大盘跌得少,你同样赚钱。7、选股策略:代码可以帮你从几千只股票里面,选出盈利情况良好,但市盈率偏低的股票。你也可以整合任何指标,

做出你自己的选股策略。

七、常用的库

我们写代码,并不是每一功能都要自己写,这是不现实的,使用别人封装好的库,能提高你的效率,下面我给大家介绍一些量化常用的库。

varnothingpandas、numpy、talib:上文已经介绍过了。

varnothingrequest:爬虫、API都需要用到。

varnothingschedule:定时函数,需要定期执行的交易需要用到。

varnothingdatetime:获取时间需要用到。

varnothingtime:一般是用来程序休眠几秒用到的。

varnothingjson:处理json格式的数据。

varnothingos:处理系统文件的路径,和本地文件交互需要用到。

varnothinghmac、base64:账户签名加密解密需要用到。

八、量化常用的一些网站、资料

1、发明者量化:https://www.fmz.com/一个综合性的平台,如果不想自己学python,也可以使用发明者的实盘交易功能,他也有社区功能。

2、TrandingView:https://cn.tradingview.com/这个实在太强了,是量化最强的工具。他的很多指标、策略都能看到源码,不过他使用的是pine语言需要简单学习,也可以用chatgpt翻译成python。

3、TVCBOT:https://www.tvcbot.com/一个交易机器人,可以接受TrandingView的策略信号进行交易。

4、缠论:https://github.com/waditu/czsc不知道你们有没有听过缠论,比较有名的一个交易理论,有大神把他的指标啥的写出来了。
九、畅想

回测是量化交易中很重要的一步,而很多人由于没有代码能力,要么手工去回测,极度耗费时间,要么凭感觉去交易。如果一个没有代码能力的人,也能够快速回测,验证自己的策略是否靠谱,那该有多好。

我在想,gpts开放后,有没有可能封装一个插件,让普通交易者,通过自然语言就能回测他的策略,如果可以,将会有巨大的赚钱机会。

再次声明,量化只是一种方法,可以提高你的盈利概率,但别觉得看了本文,你就能赚钱了,仅供你参考,不构成任何投资建议,不保证盈利。

以上是我自己做了一年半量化的一些分享,有想要交流策略的朋友,非常欢迎。

知识星球

#无标签