如何制定一条量化交易的学习路线?
9 个回答
题主是计算机专业的,那就再好不过了,至少编程这个拦路虎就可以轻松迈过去了,那我根据个人之前的量化学习经验,腆着脸给你推荐一条快速简洁的量化交易学习路线吧,认可的话可以参考一下,如下:
投资想法 -> 量化基础 -> 量化平台 -> 量化策略
这是抽象的概括,下文会把每个步骤详细讲讲,这里需要确定快速入门的学习原则: 适度学习,够用就行 。
2021版《新华字典》中,收录了13000多个汉字,而日常生活中只需要用到其中3000多个,也就是说,不用啃完编程书籍等大部头才可以开始,按常用按需学习就行。
一、投资想法
很多人做量化,都是因为自己有初始的投资想法,想验证正确性提高交易胜率,或想解放双手追求效率,全自动程序化盯盘交易,量化跟人工智能AI一样,都是手段,用来实现自己想要的目的,不是为了量化或AI本身而学习。
有初始的投资想法,在开始学习的时候有一个好处,就是可以在学习量化时有的放矢,听到相关的知识点的时候,脑子就会在想,我想要的功能能不能这样实现。 比如,你想实现均线交易策略,那么你在学习pandas模块时,听到rolling和 mean函数 ,就会有“确认过眼神,找到对的人”的赶脚。
如果在投资想法这边还是没有感觉,没初始思路的话可以看看我之前的文章,里面很多策略想法都是从交易书籍、研报论文和市场观察中发现的。
股票&ETF相关策略:
《Barra太复杂,唠一个适合萌新Quant上手的量化基本面多因子模型F-Score》
《 从股价上涨驱动力出发,构建分析师一致预期成长量化策略 》
《两个简单的GARP因子,帮这位量化基金经理,跻身同类Top10(含复现)》
《手把手教你,利用机器学习模型,构建量化择时策略(附全流程代码)》
商品期货相关策略:
《唠一唠曾在全球量化策略热榜上排名第9的TrendModelSys策略》
《又来唠一个另类异质量化策略:20后的Trendflex策略》
《『导数』在量化策略中的妙用:日内波动极值vs低阶多项式拟合策略》
《量化本无妙手,背后都是坚实的本手:波动率不对称性RSJ量化策略》
《量化同质越来越严重,如何保持策略的长久优势?(附异质化另类量化策略)》
二、量化基础
这里面主要包含两大部分,一个是量化通识,另一个是编程基础。
关于量化通识,看量化故事类的书籍都可以有所了解,以前我也列过一个书单。
如果没有那么多时间,想快速了解量化投资的方方面面,开始的时候只看这本就够了。
关于编程基础,因为不同量化平台的编程语言都不一样,这里只好拿在量化界广泛使用的Python举例。
对于Python的快速学习,墙裂推荐 廖雪峰 老师的Python教程 ,不仅免费写得非常简单易懂,而且每个小节之后,都有编程互动小题目给你即时反馈,非常有趣,不用再想着自己啃完编程大部头再去编写策略,教程链接:
https://www. liaoxuefeng.com/wiki/10 16959663602400
廖老师的教程非常详尽,连Web开发都讲了,但是再次重申咱的快速入门学习原则:不贪多,够用就行。对于量化基础而言,学到“错误、调试和测试”章节就可以了,后面等有时间再看。
遗憾的是,里面没有讲到量化常用的numpy和pandas模块,这个可以在学了廖老师课程之后,再单独度娘学习一下。
三、量化平台
对于量化初学者而言,不建议自己搭建量化框架/平台,应该以实现量化策略为主,把数据获取清洗、回测框架搭建和对接实盘接口等工作交给专业团队打理, 因此强烈建议使用现成的第三方量化平台,这里给大家推荐一些。
如果你打算做股票量化交易,可以选择以下5个量化平台,在他们的官网的“帮助中心”里面,都可以找到对应的上手教程和策略模板。
聚宽JoinQuant :
优矿Uqer :
米筐RiceQuant :
掘金量化 :
迅投QMT :
如果你打算做期货/期权/大饼的量化交易,可以选择以下5个量化平台。
交易开拓者TB :
vn.py :
文华 :
金字塔 :
MultiCharts :
TB研究策略和回测什么的都是免费,只有开启实盘时才会在基础手续费上加收一些,以个人观察,现存的很多系列源码,都是以TB居多。
vn.py是一款基于Python的开源量化交易系统开发框架,后来更名为VeighNa,不过大伙儿还是习惯地称之为 vn.py 。由知乎量化大V『用Python的交易员』开发,定位是量化交易平台,提供从交易API对接到策略自动交易的完整解决方案,对接了国内外诸多不同类型的金融市场:证券、期货、期权、外汇、数字货币等。
后面三个就都是收费的了,优点就是编程相对简单一些,缺点就是贵,大家也可以去看看。
四、量化策略
有了编程基础,又选定了量化平台,恭喜你,你终于有能力实现自己最初的投资想法了,量化策略是投资想法的逻辑化和程序化展现。
由于每个人的投资想法不尽相同,只好举一个简单的双均线交易策略为例进行描述,因为“双均线”这是一个接触到投资交易,都基本会听过的词儿,“专家”告诉你在金叉的时候买,在死叉的时候卖,那实际效果到底是怎么样的呢?
在聚宽JoinQuant量化平台上,拿 茅台 作为交易标的,咱定义5日均线和20日均线在出现金叉的时候,第二天一开盘就全仓买入,出现死叉时,就把所有持仓全部卖出,策略代码如下。
如果已经看完廖老师的前几章课程,这代码就大概能看懂七七八八了,剩下的再结合平台的API说明就能全部弄清楚了。
大概的实现流程就是,在初始化函数initialize中设置了交易标的、策略参数和交易费率,以及定义了一个每天在开盘运行的函数stock_trade,并且开启了“防未来函数”功能。在 stock_trade函数 里面,计算昨天和前天的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))
# 如果昨日出现死叉,则今日开盘全部卖出