小白快速入门量化交易的自学路径

今年已然过去一半了,年初立的flag都实现了吗?

据我多年来的观察,很多小白萌新开始学习量化,特别是年初的时候立下“宏图大志”,但有相当一部分最终没能"上岸",从入门到放弃,从然后到没有然后,并不是因为他们不够聪明或不够努力,原因有很多,我觉得大部分只是方向或方法没对。

特别是对于没有编程基础的萌新,为了入门量化,先买了一本厚厚的Python编程书,看着看着就昏昏欲睡,这个很正常,这的确很无趣,因为这只是为了学习而学习,记住了很多知识,却感觉无法落地。

就跟很多国人从小学到大学学了十几年的英语一样,记住语法单词只是为了考试,觉得很无趣,要是说你附近有一群漂亮的外国妹子,你要用英语去勾搭她们,一个个是不是就来劲了。

一开始,你只能一个一个单词往外蹦,什么"hello"啊,什么"welcome"啊,什么"beautiful"啊,可能一个主谓宾的整句都说不了,加上肢体语言,不妨碍你们的大体沟通。

跟她们混久了,听着相互之间的沟通,慢慢就会短句了,再过久一些,不仅长句复合句会了,连口语发音味道儿都正了。

你瞧瞧,同样是学英语,为什么一个是无趣至极,一个是相当来劲呢,他们之间的差别主要在哪里?

我个人觉得主要是两点:一是目的动机,二是即时反馈。

高效率做事讲究"以终为始",要紧扣目标,不要走弯路跑偏了,以考试为目的,not cool,因为大部分人感觉自己都是被动应付考试,勾搭妹子,very cool,因为你觉得自己在做一件自己认可且有趣的事情。

图片

你以提高考试分数作为学习目标,但是努力学习到分数明显提高之间有非常大的时间间隔,也就是你要在这段长时间里面忍受无趣,而跟外国友人学英语,学了马上就能用,别人提了一个新词儿"pretty",你转头就能对妹子说"you look so pretty today",换来莞尔一笑,也就是这种即时反馈,将无趣碎片化了,从忍受变为享受。

用高大上的话来说就是"正向飞轮",在这个学习的过程中,你学了一个知识点,然后学以致用完成了一件小事儿,完成这个行为给你带来了满足感和正反馈,激励你乐乐呵呵学新的知识点,如此反复循环,像滚雪球一样,滚着滚着你就不知不觉入门了。

那学量化交易也是如此,首先要想清楚自己为什么要学量化。

是看到媒体宣传量化对冲基金赚钱,自己也想从事该行业?

看到身边有人学习量化交易,自己也想学习一下?

自己有投资想法,想形成交易系统,并用量化分析方法验证其准确性?

自己已经有稳定的盈利系统,想解放双手和坚持纪律性,用程序化自动交易?

学量化的动机和目的是什么都可以,关键是看自己的渴望掌握这项技能的程度,为自己的学习赋予自己认可的意义。

比如说,你学量化纯粹是为了赚钱,入门量化需要学100个知识点,你预计将来可以提高交易胜率,多赚或少亏10w,这样一个知识点就相当于多赚或少亏1000块钱,这样一换算,是不是学习动力就足一点了。

学习量化,为了交易赚钱可以,为了谈资装X也可以,为了勾搭宽客也可以,只要自己足够认可足够渴求就可以了,这样咱就能保持着未来燎原的星星之火。

接下来,最重要的就是打造出能有即时正反馈的学习路径,形成正向飞轮,入门量化就跟滚雪球似的。

上面都是虚头巴脑的大道理,都是自己浅薄的想法,以下正式唠唠具体的学习路径:

交易想法 -> 量化基础 -> 量化平台 -> 量化策略

这是抽象的概括,下文会把每个步骤详细讲讲,这里需要确定快速入门的学习原则:适度学习,够用就行

最新版《新华字典》中,收录了13000多个汉字,而日常生活中只需要用到其中3000多个,也就是说,不用啃完编程书籍等大部头才可以开始,按常用按需学习就行。

一、交易想法

很多人做量化,都是因为自己有初始的交易想法,想验证正确性提高交易胜率,或想解放双手追求效率,全自动程序化盯盘交易,量化跟人工智能AI一样,都是手段,用来实现自己想要的目的,不是为了量化或AI本身而学习。

有初始的投资想法,在开始学习的时候有一个好处,就是可以在学习量化时有的放矢,听到相关的知识点的时候,脑子就会在想,我想要的功能可不可以这样实现。比如,你想实现均线交易策略,那么你在学习pandas模块时,听到rolling和mean函数,就会有“确认过眼神,找到对的人”的赶脚。

如果在交易想法这边还是没有感觉,可以多看一些交易书籍和研报论文,这里我可以给大伙儿推荐一些,相信以下这3个交易策略合集类资料能给量化萌新一些交易思路方面的启发,粗粗算下来,这3份资料里面的策略/指标思路合计下来不少于1000个。

首先映入眼帘的是前NASA登月科学家、现量化先驱佩里•考夫曼的量化神作《交易系统与方法》,说起这老爷子,国人可能觉得很陌生,但在量化圈子里,或多或少都听说过“考夫曼均线”,学名为“自适应移动均线”(Adaptive Moving Average,简称AMA),这就是他的杰作之一。

《261个策略/指标,萌新Quant在这本量化神作中学到的》

在此书当中,披露了老爷子数百个交易策略和技术指标,而且全部都有对应的源代码,虽然用的是国外的TradeStation平台,但其编程方式非常口语化的,只要能认识简单的英文,不敢保证你能顺滑地编写策略,但是看懂策略的交易思想是铁定没问题的。

第二本也是一位量化大牛的神作,其中涵盖了股票、期货、期权、外汇、加密货币、ETF等投资领域的151个交易策略,那就是Zura Kakushadze的《151 Trading Strategies》,作者另外一本名著就是《101 Formulaic Alphas》(坊间俗称“Alpha101”)。

最初是2018年8月发表在SSRN上的同名论文,后来在同年年底整理成书,目前全网传播较多的是361页的论文版本,但个人感觉阅读效果较好的是480页的电子书版本,不仅标签完善,而且参考文献跳转非常顺滑。

《推荐一本量化宝藏书籍,内含151个量化交易策略》

书中内容的组织形式是,每一个小节对应一个量化策略,开头会三言两语引入策略,然后概括出核心规则/公式,最后给出策略的构建方法,其间会穿插很多参考文献,告诉你策略idea的来源和为什么这样设置,所以很多人说这本书只是一个目录,那2000个参考文献才是本体。

第三个就更厉害了,它是一个被称为量化神集的github项目,在这里面,策略数目直接就是696个,关键是通通都有高清源码,除此之外,还有量化书籍、量化库、视频课程、博客等。

图片

这个github项目的贡献者/维护者是Edouard d'Archimbaud、James Munro和GrimyFishTank,所有的量化资源都被分门别类、整整齐齐码放在那里,静静地等待有缘人驻足观看,可惜的是,以前是统统免费,现在部分内容要付费订阅了,如果你依然感兴趣的话,可以去瞅瞅。

《分享一个量化交易神集:696个策略,55本书,97个库...》

二、量化基础

这里面主要包含两大部分,一个是量化通识,另一个是编程基础。

关于量化通识,看量化故事类的书籍都可以有所了解,以前我也列过一个书单,有时间的话可以挑自己感兴趣的慢慢看。

《量化投资书单推荐(20本)》

如果一开始没有那么多时间,想快速了解量化投资的方方面面,一开始只看《打开量化投资的黑箱(第二版)》(Inside the Black Box: A Simple Guide to Quantitative and High Frequency Trading,Second Edition)就够了,注意,这里特指的是第二版。

原书英文版是在2009年出版,2012年翻译成中文引入国内,第二版是在2013年出版,2016年翻译成中文引入国内,第二版除了对第一版错误进行修正外,关键是加入了『高频交易』这一部分的内容,内容也从原来的13章扩展到了17章。

《萌新量化投资入门的第一本书》

关于编程基础,因为不同量化平台的编程语言都不一样,这里只好拿在量化界广泛使用的Python举例。

对于Python的快速学习,墙裂推荐廖雪峰老师的Python教程,不仅免费写得非常简单易懂,而且每个小节之后,都有编程互动小题目给你即时反馈,非常有趣,不用再想着自己啃完编程大部头再去编写策略。

教程链接:

https://www.liaoxuefeng.com/wiki/1016959663602400

图片

廖老师的教程非常详尽,连Web开发都讲了,但是再次重申咱的快速入门学习原则:不贪多,够用就行。对于量化基础而言,学到“错误、调试和测试”章节就可以了,后面等有时间再看。

图片

因为写Python就跟写文案一样,都是写作,但也分为散文写作、小说写作、营销写作等,虽然基础一样,但不同领域用到的方法技巧各有侧重。廖老师的Python教程比较侧重于互联网开发方向,对于量化分析入门而言,后半部分初期的时候还用不上,等需要用到的时候再学习也不迟。

遗憾的是,里面没有讲到量化当中常用的numpy、pandas、matplotlib和sklearn等Python库,这个可以在学了廖老师课程之后,再单独度娘学习一下。

Numpy:它是Python的一个开源的数值计算库,计算当中常用的数组和矩阵等数据类型,以及它们之间的运算,都可以依靠这个库快速实现。

Pandas:它是基于Numpy 之上封装的数据分析库,它能让数据分析和量化分析任务变得更加简单,打个不恰当的比方,它就相当于是Python界的“Excel”,是Python量化当中最离不开的一个库。

Matplotlib:它是Python的一个绘图库,它能帮助你将价格序列、因子数据、净值曲线等数据快速可视化展示出来。

Sklearn:全称是scikit-learn,是Python当中的机器学习库,它涵盖了大部分机器学习常用的算法,并且还包含了样例数据、预处理、特征选择、模型验证等模块。

其实,Python量化当中涉及到的库非常多,这4个库是其中经常被用到或提及的,萌新可以快速浏览一下我之前的这3篇文章,感受一下它们之间的关系和作用。

《手把手教你,利用机器学习模型,构建量化择时策略》

《手把手教你用机器学习预测黄金ETF价格》

《量化交易领域10大高效机器学习算法盘点》

初学的话能学好前3个库就算不错了,一般的入门量化分析任务已经难不倒你了,Python量化当中其他可能涉及到的库还包括但不限于:scipy、statsmodel、talib、tushare、akshare、backtrader、quantstats、empyrical、pyfolio、tensorflow、pytorch、keras、tsfresh、qlib......不用急着都学,遇到的时候,或有需要的时候再学就可以了。

三、量化平台

对于量化初学者而言,不建议自己搭建量化框架/平台,应该以实现量化策略为主,把数据获取清洗、回测框架搭建和对接实盘接口等工作交给专业团队打理,因此强烈建议使用现成的第三方量化平台,这里给大伙儿推荐一些。

如果你打算做股票量化交易,可以选择以下6个量化平台,在他们的官网的“帮助中心”里面,可以找到对应的上手教程和策略模板。

聚宽JoinQuant

https://www.joinquant.com

优矿Uqer

https://uqer.datayes.com

米筐RiceQuant

https://www.ricequant.com

掘金量化

https://www.myquant.cn

迅投QMT

http://www.thinktrader.net

在支持该量化平台的券商官网下载和开通

PTrade:

https://www.hs.net

在支持该量化平台的券商官网下载和开通

 如果你打算做期货/期权/大饼的量化交易,可以选择以下5个量化平台。

交易开拓者TB

http://www.tradeblazer.net

vn.py

https://www.vnpy.com

文华

https://www.wenhua.com.cn

金字塔

https://www.weistock.com

MultiCharts

https://www.multicharts.cn

 TB研究策略和回测什么的都是免费,只有开启实盘时才会在基础手续费上加收一些,以个人观察,现存的很多系列源码,都是以TB居多。

vn.py是一款基于Python的开源量化交易系统开发框架,后来更名为VeighNa,不过大伙儿还是习惯地称之为vn.py。由知乎量化大V『用Python的交易员』开发,定位是量化交易平台,提供从交易API对接到策略自动交易的完整解决方案,对接了国内外诸多不同类型的金融市场:证券、期货、期权、外汇、数字货币等。

后面三个就都是收费的了,优点就是编程相对简单一些,缺点就是贵,大伙儿也可以去看看。

四、量化策略

有了编程基础,又选定了量化平台,恭喜你,你终于有能力实现自己最初的投资想法了,量化策略是交易想法的逻辑化和程序化展现。

由于每个人的交易想法不尽相同,只好举一个简单的双均线交易策略为例进行描述,因为“双均线”这是一个接触到投资交易,都基本会听过的词儿,“专家”告诉你在金叉的时候买,在死叉的时候卖,那实际效果到底是怎么样的呢?

在聚宽JoinQuant量化平台上,拿茅台作为交易标的,咱定义5日均线和20日均线在出现金叉的时候,第二天一开盘就全仓买入,出现死叉时,就把所有持仓全部卖出,策略代码如下。

# 导入函数库
from jqdata import *

# 初始化函数,设定基准等等
def initialize(context):
    # 交易的股票
    g.stock = '600519.XSHG'
    # 长短均线参数
    g.short_len = 5
    g.long_len = 20
    
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 过滤掉order系列API产生的比error级别低的log
    log.set_level('order', 'error')
    # 打开防未来函数
    set_option('avoid_future_data', True)
    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    # 开盘时运行
    run_daily(stock_trade, time='open', reference_security='000300.XSHG')

## 开盘时运行函数
def stock_trade(context):
    stock = g.stock
    short_len = g.short_len
    long_len = g.long_len
    # 获取股票的收盘价
    # 当取日线数据时, 不包括当天的, 即使是在收盘后,没有未来
    data = attribute_history(stock, long_len+1, '1d', ['close'])
    # 计算双均线数据
    data['ma5'] = data['close'].rolling(short_len).mean()
    data['ma20'] = data['close'].rolling(long_len).mean()
    # 昨日MA5和MA20数值
    ma5 = data['ma5'].iloc[-1]
    ma20 = data['ma20'].iloc[-1]
    # 前日MA5和MA20数值
    pre_ma5 = data['ma5'].iloc[-2]
    pre_ma20 = data['ma20'].iloc[-2]
    # 取得当前的可使用的资金
    cash = context.portfolio.available_cash

    # 如果昨日出现金叉,则今日开盘买入
    if (pre_ma5 < pre_ma20) and (ma5 > ma20) and (cash > 0):
        # 用所有资金买入股票
        order_value(stock, cash)
        # 输出买入信息
        log.info(">>> %s 买入 %d 股 %s" % (str(context.current_dt), 
        context.portfolio.positions[stock].today_amount, stock))
    # 如果昨日出现死叉,则今日开盘全部卖出
    elif (pre_ma5 > pre_ma20) and (ma5 < ma20) and (stock in context.portfolio.positions.keys()):
        # 输出卖出信息
        log.info("<<< %s 卖出 %d 股 %s" % (str(context.current_dt), 
        context.portfolio.positions[stock].total_amount, stock))
        # 卖出所有股票,使这只股票的最终持有量为0
        order_target(stock, 0)

如果已经看完廖老师的前几章课程,这代码就大概能看懂七七八八了,剩下的再结合平台的API说明就能全部弄清楚了。

大概的实现流程就是,在初始化函数initialize中设置了交易标的、策略参数和交易费率,以及定义了一个每天在开盘运行的函数stock_trade,并且开启了“防未来函数”功能。在stock_trade函数里面,计算昨天和前天的5日均线和20日均线,如果金叉就买入,死叉就卖出。

运行策略,就会不断输出自定义的交易信息。

图片

并且在运行过程中,收益率曲线也在不断地生成。

图片

大伙儿觉得这个回测绩效怎么样?双均线策略算有效吗?你可以自己贴代码跑回测试试,同时再调整交易标的和双均线参数试一试,一般情况下回测很快,不需要一首歌的时间。

虽然我这里以JoinQuant策略为例,但所有量化平台的实现逻辑都是相通的,你只需要定义自己的函数,告诉系统“你要在什么时间?交易什么标的?交易数量是多少?”,你只要解决这3个“什么”的问题,所有的量化平台你都可以玩得转了。

如果你能完全理解并且复现出这个双均线策略,可以说明量化已经初步入门了,可以着手去实现你最初的交易策略了。如果此时还没有初始的交易想法,但又想量化练手,那就去复现金融工程研报吧,往往一篇研报至少包含一个量化策略,看看自己的复现水平能不能向“正规军”看齐,这一part可以参考一下我之前的手把手系列,全都有参考源码。

《复现网红阻力支撑指标RSRS,手把手教你构建大盘择时策略》

《(续)复现网红阻力支撑指标RSRS,手把手教你构建大盘择时策略》

《手把手教你构建与改进轮动策略(十年10倍)》

《手把手教你用机器学习预测黄金ETF价格》

《都怪自己手贱,非要复现这根ICU均线》

《手把手教你,利用机器学习模型,构建量化择时策略》

《私募奇葩要求,投资经理3周须开发4000个量化因子,手把手教你4行核心代码轻松应对》

如果你还想要实现更多的量化策略,可以䁖䁖下面的文章~

股票&ETF&指数相关策略:

《Barra太复杂,唠一个适合萌新Quant上手的量化基本面多因子模型F-Score》

《桥水基金全天候策略拆解,构建A股ETF躺平版策略》

《引入风险平价后,全天候策略持仓最大回撤直减半,但是...》

《连续11年正收益的优质基本面高股息策略》

《ETF轮动策略在阻力支撑相对强度RSRS指标加持下起飞》

《量化交易野路子:菜场大妈选股策略(10年100倍)》

《菜场大妈遇上马科维茨,擦出小市值更高收益的火花(十年160倍)》

《换了量化平台,重新回测,还是十年10倍》
 

《轮动策略改进:唉~量化策略越改越差了》

《唠唠量化策略开发当中的细节优化,十年多赚200%》

《另类策略探索:利用美债收益率预测A股大盘走势》

《两个简单的GARP因子,帮这位量化基金经理,跻身同类Top10(含复现)》

《从股价上涨驱动力出发,构建分析师一致预期成长策略》

《跟踪『聪明钱』,巧用北向资金进行大盘择时》

《量化萌新向ETF择时策略:当北上资金遇上布林带》

《跟着“基金一哥”张坤量化选股的快乐,你想象不到!》

《小市值因子已然凉凉,绩优小市值依旧狂浪》

《中国版“漂亮50”量化策略》

《鱼身策略懒人爱,量化内卷别乱买》

商品期货相关策略:

《唠一唠曾在全球量化策略热榜上排名第9的TrendModelSys策略》

《又来唠一唠曾在全球量化策略热榜上排名第6的RUMI策略》

《又来唠一个另类异质量化策略:20后的Trendflex策略》

《『导数』在量化策略中的妙用:日内波动极值vs低阶多项式拟合策略》

《K线标准化结构图:构建一个趋势策略,就是那么朴实无华》

《探索利用价格概率密度函数,构建趋势突破策略》

《CTA策略中的Alpha:期限结构之展期收益率策略》

《量化本无妙手,背后都是坚实的本手:波动率不对称性RSJ量化策略》

《兄弟家量化策略很多,拿一个『波动率收敛突破策略』盘一下》

《兄弟家量化策略很多,又拿一个『操盘手策略』盘一下》

《动物庄园:商品期货跨品种套利策略》

《当对冲套利遇上价比斜率》

《量化同质越来越严重,如何保持策略的长久优势?(附异质化另类量化策略)》

《唠一唠指标之王MACD的另类用法:高低形态短线量化策略》

《股指期货除了无脑吃贴水之外,还有更卷的量化操作策略吗?》

就这样,转起“正向飞轮”,实现和玩转更多策略,等你测试出心仪的策略效果,接着上模拟盘跟踪,然后就是实盘,接着就是不断迭代优化,慢慢地就变成合格宽客,最后就变成量化大神了。

2024,量化入门,早成大神!!!

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 04:02:06       133 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 04:02:06       147 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 04:02:06       123 阅读
  4. Python语言-面向对象

    2024-07-21 04:02:06       133 阅读

热门阅读

  1. 2024.7.20刷题记录

    2024-07-21 04:02:06       29 阅读
  2. 力扣题解(零钱兑换II)

    2024-07-21 04:02:06       31 阅读
  3. Python学习-九大数据类型整合,详细讲解

    2024-07-21 04:02:06       26 阅读
  4. web前端 Vue 框架面试120题(三)

    2024-07-21 04:02:06       27 阅读
  5. 【C++】位运算与相关算法问题

    2024-07-21 04:02:06       31 阅读
  6. Vue Router的路由正则表达式

    2024-07-21 04:02:06       26 阅读
  7. C++编程:实现一个跨平台安全的定时器Timer模块

    2024-07-21 04:02:06       25 阅读
  8. CSS中object-fit: cover;

    2024-07-21 04:02:06       29 阅读
  9. Git使用

    2024-07-21 04:02:06       33 阅读
  10. 推荐收藏!Python Flask 项目生产环境部署指南

    2024-07-21 04:02:06       33 阅读
  11. 对androidTestDebug 产物进行重新签名

    2024-07-21 04:02:06       28 阅读