老话说,没出正月都是年,我在这儿给大家拜个晚年,祝大家晚年幸福!

农历新年还没有过完(元宵没到),大家都已经陆陆续续回到工作岗位上,年初立的flag要执行起来。
每当这个时候,很多萌新开始学习量化,但有相当一部分最终没有"上岸",从入门到放弃,从然后到没有然后,并不是因为他们不够聪明或不够努力,原因有很多,我觉得大部分只是方向或方法没对。

特别是对于没有编程基础的萌新,为了入门量化,先买了一本Python编程书,看着看着就昏昏欲睡,这个很正常,这的确很无趣,因为这只是为了学习而学习,记住了很多知识,却感觉无法落地。
就跟很多国人从小学到大学学了十几年的英语一样,记住语法单词只是为了考试,觉得很无趣,要是说你附近有一群漂亮的外国妹子,你要用英语去勾搭她们,是不是就来劲了。
一开始,你只能一个一个单词往外蹦,什么"helllo"啊,什么"welcome"啊,什么"beautiful"啊,可能一个主谓宾的整句都说不了,加上肢体语言,不妨碍你们的大体沟通。
跟她们混久了,听着相互之间的沟通,慢慢就会短句了,再过久一些,不仅长句复合句会了,连口语发音味道儿都正了。
你瞧瞧,同样是学英语,为什么一个是无趣至极,一个是相当来劲呢,他们之间的差别主要在哪里?
我个人觉得主要是两点:一是目的动机,二是即时反馈。
高效率做事讲究"以终为始",要紧扣目标,不要走弯路跑偏了,以考试为目的,not cool,因为大部分人感觉自己都是被动应付考试,勾搭妹子,very cool,因为你觉得自己在做一件自己认可且有趣的事情。
你以提高考试分数作为学习目标,但是努力学习到分数明显提高之间有非常大的时间间隔,也就是你要在这段长时间里面忍受无趣,而跟外国友人学英语,学了马上就能用,别人提了一个新词儿"pretty",你转头就能对妹子说"you look so pretty today",换来莞尔一笑,也就是这种即时反馈,将无趣碎片化了,从忍受变为享受。
用高大上的话来说就是"正向飞轮",在这个学习的过程中,你学了一个知识点,然后学以致用完成了一件小事儿,完成这个行为给你带来了满足感和正反馈,激励你乐乐呵呵学新的知识点,如此反复循环,像滚雪球一样,滚着滚着你就不知不觉入门了。
那学量化交易也是如此,首先要想清楚自己为什么要学量化。
是看到媒体宣传量化对冲基金赚钱,自己也想从事该行业?
看到身边有人学习量化交易,自己也想学习一下?
自己有投资想法,想形成交易系统,并用量化分析方法验证其准确性?
自己已经有稳定的盈利系统,想解放双手和坚持纪律性,用程序化自动交易?
学量化的动机和目的是什么都可以,关键是看自己的渴望掌握这项技能的程度,为自己的学习赋予自己认可的意义。
比如说,你学量化纯粹是为了赚钱,入门量化需要学100个知识点,你预计将来可以提高交易胜率,多赚或少亏10w,这样一个知识点就相当于多赚或少亏1000块钱,这样一换算,是不是学习动力就足一点了。
学习量化,为了投资赚钱可以,为了谈资装X也可以,为了勾搭宽客也可以,只要自己足够认可足够渴求就可以了,这样咱就能保持着未来燎原的星星之火。
接下来,最重要的就是营造能有即时正反馈的学习过程,形成正向飞轮,入门量化就跟滑滑梯似的。
上面都是虚头巴脑的大道理,都是自己浅薄的想法,以下正式唠唠具体的学习路径:
投资想法 -> 量化基础 -> 量化平台 -> 量化策略
这是抽象的概括,下文会把每个步骤详细讲讲,这里需要确定快速入门的学习原则:适度学习,够用就行
2021版《新华字典》中,收录了13000多个汉字,而日常生活中只需要用到其中3000多个,也就是说,不用啃完编程书籍等大部头才可以开始,按常用按需学习就行。
一、投资想法
很多人做量化,都是因为自己有初始的投资想法,想验证正确性提高交易胜率,或想解放双手追求效率,全自动程序化盯盘交易,量化跟人工智能AI一样,都是手段,用来实现自己想要的目的,不是为了量化或AI本身而学习。
有初始的投资想法,在开始学习的时候有一个好处,就是可以在学习量化时有的放矢,听到相关的知识点的时候,脑子就会在想,我想要的功能能不能这样实现。比如,你想实现均线交易策略,那么你在学习pandas模块时,听到rolling和mean函数,就会有“确认过眼神,找到对的人”的赶脚。
如果在投资想法这边还是没有感觉,不介意的话可以看看我之前的文章,里面很多策略想法都是从交易书籍、研报论文和市场观察中发现的。
股票&ETF相关策略:
商品期货相关策略:
二、量化基础
这里面主要包含两大部分,一个是量化通识,另一个是编程基础。
关于量化通识,看量化故事类的书籍都可以有所了解,以前我也列过一个书单。
如果没有那么多时间,想快速了解量化投资的方方面面,开始的时候只看这本就够了。
关于编程基础,因为不同量化平台的编程语言都不一样,这里只好拿在量化界广泛使用的Python举例。

对于Python的快速学习,墙裂推荐廖雪峰老师的Python教程,不仅免费写得非常简单易懂,而且每个小节之后,都有编程互动小题目给你即时反馈,非常有趣,不用再想着自己啃完编程大部头再去编写策略,教程链接:
https://www.liaoxuefeng.com/wiki/1016959663602400
廖老师的教程非常详尽,连Web开发都讲了,但是再次重申咱的快速入门学习原则:不贪多,够用就行。对于量化基础而言,学到“错误、调试和测试”章节就可以了,后面等有时间再看。
遗憾的是,里面没有讲到量化常用的numpy和pandas模块,这个可以在学了廖老师课程之后,再单独度娘学习一下。
三、量化平台
对于量化初学者而言,不建议自己搭建量化框架/平台,应该以实现量化策略为主,把数据获取清洗、回测框架搭建和对接实盘接口等工作交给专业团队打理,因此强烈建议使用现成的第三方量化平台,这里给大家推荐一些。
如果你打算做股票量化交易,可以选择以下5个量化平台,在他们的官网的“帮助中心”里面,都可以找到对应的上手教程和策略模板。
聚宽JoinQuant
https://www.joinquant.com
优矿Uqer
https://uqer.datayes.com
米筐RiceQuant
https://www.ricequant.com
掘金量化
https://www.myquant.cn
迅投QMT
http://www.thinktrader.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 *# 初始化函数,设定基准等等definitialize(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')## 开盘时运行函数defstock_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个“什么”的问题,所有的量化平台你都可以玩得转了。
如果你能完全理解并且复现这个双均线策略,可以说明量化已经初步入门了,接下来要转起“正向飞轮”,实现和玩转更多策略,把多标的交易加进去,把基本面数据加进去,把滑点设置加进去,把仓位控制加进去......
等你回测出心仪的策略效果,接着上模拟盘跟踪,然后就是实盘,接着就是不断迭代优化,慢慢地就变成合格宽客,最后就变成量化大神了。
2023,量化入门,早成大神!!!
Tip:点击关键字可以直接查看对应文章。
END
如果对本文有疑惑,或是想聊聊
亦或是围观朋友圈当点赞之交
点我,让我们一路同行
吃瓜吐槽写代码
(微信号:iquantman)
添加好友后,私信『666』
送你一些量化小福利
人工回复慢请见谅~
继续阅读
阅读原文