说在前面
本篇推文是线上讲座《Python与量化投资入门》的回顾整理。2020年7月12日线上钉钉群直播讲座结束后,推文中的视频已经被来自我们学术1群与2群的志愿者追加了字幕并经过音效优化。更有同学主动提出要为讲座中提及的所有专业术语在本篇推文中开辟“术语解释”专栏做详细的补充说明,以供零基础的朋友能够减少焦虑,快速进入学习的状态。
感谢志愿者朋友的无私奉献,让这篇回顾推文能够及时地放出。
如在线上讲座期间觉得声音太轻或杂音太多,我们强烈建议您观看一遍推文里的升级版视频,结合文案再体验一次,希望能弥补直播时给您带来的不便和遗憾。本文共7千余字,阅读大约需要25分钟,相当于是原本1小时线上讲座容量的3倍,细细品味,必能有所收获。
活动缘起
有感于不久前金融计量学社的学术2群(始终如一的学术与生活关怀)中有同学问起了关于量化投资的前景问题,当下引发了很多同学的在群上的共鸣与交流。不少同学听说Python在金融量化投资领域已经发挥了重要价值后更是希望学社君能够请大佬来办一场专门针对量化投资与Python实战方面的讲座。我们邀请了现公众号负责人之一的Arlo学姐为大家举办了一场公益性质的Python与量化入门分享讲座。
主讲人
现从事的是金融行业
大二时参加了
浙江省大学生证券投资竞赛团体赛
量化交易组 一等奖
由于该奖项非常硬核
因此学姐还获得了其所在学校
免写毕业论文的资格
多个公司因此向学姐发出Offer
在其后来的求职面试中
也因此一次吸引住面试官兴趣
我们无意贩卖焦虑,只愿秉持着着做这个公众号的初心,把知识与技能原汁原味地通过公益免费的方式科普给有缘的朋友,让受众自己去判断,自己做自己的规划。
弥补直播时设备问题带来的不便
现在音量已正常且配有字幕
希望此视频可以给大家一个交代
本文的文案的内容会涵盖所有
讲座中提及的专业术语解释
学姐自己编写的Python代码
希望我们的努力付出
能为学弟学妹们消除焦虑
降低习得知识与技能的门槛
01
讲座中涉及到的术语
量化投资的概念
量化投资是以计算机技术为工具,采用数学模型,实现投资策略的过程。其与传统投资的关系就好比是现代、古代的天气预测系统,古代科学技术落后,人们只能通过太阳、月亮、星星、云层的表象来判断明日天气,而到了现代,天气预测依靠科学技术,通过实时数据采集,运用气象模型来预测明日天气。
传统投资依赖于定性思想,而量化投资是“定性思想的量化应用”,更强调数据。
举个简单的例子:技术分析是传统投资分析方法之一,MACD指标是技术分析常用指标之一,传统技术分析师通常对MACD指标的主观判断,最终作出买卖决定。
术语解释|MACD
而作为一名量化投资者,必须是依托数据作出决定的,其需要对大量的MACD指标数据进行分析,得出一些有说服力的数据结论,比如:MACD指标金叉上涨概率,金叉后平均上涨幅度,金叉买入后的最优持股天数等等,随后对数据进行综合判断(通常称作数学模型),最终作出买卖决定。
如果技术分析师作出买入决定,而量化投资者作出空仓决定,那么是否意味着传统投资与量化投资之间存在冲突与矛盾呢?是否只需要摒弃另外一个呢?
答案是传统投资与量化投资是相互联系相互依存的,两者之间不冲突也不矛盾。传统投资的核心是定性思想,量化投资作为定性思想的量化运用,是传统投资的衍生与拓展,两者表现形式有所不同。
术语解释|金叉与死叉
在股市中,金叉,死叉是投资者分析个股的重要方法之一,“金叉买进,死叉卖出”是投资者购买股票所遵循的一个准则。
MACD金叉:在股市的上升行情中,较短期的移动平均线(如5日线、10日)线从下方向上突破与较长期的移动平均线(如30日线、60日线)发生的交叉现象称为黄金交叉。为买入信号。
死叉:指下降中的短期移动平均线由上而下穿过下降的长期移动平均线,这个时候支撑线被向下突破,表示股价将继续下落,行情看跌。
术语解释|移动平均
移动平均线:即MA,一种观察证券价格变动趋势的技术指标。将一定时期内的证券价格(指数)加以平均,并把不同时间的平均值连接起来而形成。
量化投资的优势
量化投资能够以非常快的速度风靡全球,这与其所具备的独特优势息息相关。
一、纪律性:严格执行数量化投资模型所给出的投资建议,克服人性的弱点。
二、系统性:通过多层次的量化模型、多角度的观察及海量数据的观察等,捕捉更多的投资机会。
三、及时性:及时快速地跟踪市场变化,不断发现能够提供超额收益的新的统计模型,寻找新的交易机会。
四、准确性:准确客观评价交易机会,克服主观情绪偏差,通过全面、系统性的扫描捕捉错误定价、错误估值带来的机会。
五、分散化:即靠概率取胜。这表现为两个方面:
一. 定量投资不断的从历史中挖掘有望在未来重复的历史规律并且加以利用,这些历史规律都是有较大概率获胜的策略;
二. 依靠筛选出股票组合来取胜,而不是一个或几个股票取胜,从投资组合理念来看也是捕获大概率获胜的股票,而不是押到单个股票上。
与国外发达资本市场相比,目前中国的量化投资正处于起步阶段。现阶段,国内传统投资者众多,竞争压力大,盈利难度日益剧增,而量化投资作为市场新力量,其盈利空间相比于传统投资而言是远远超过的。
量化选股
量化选股:利用数量化的方法选择股票组合,期望该股票组合能够获得超越基准收益率的投资行为。
量化选股分为基本面量化选股模型和市场行为量化选股模型。
基本面量化选股模型:常见的有多因子模型、风格轮动模型和行业轮动模型三类。
A.多因子模型:应用最广泛的一种选股模型,基本原理是采用一系列的因子作为选股标准,满足这些因子的股票则被买入,不满足的则卖出。举一个简单的例子:如果有一批人参加马拉松,想要知道哪些人会跑到平均成绩之上,那只需在跑前做一个身体测试即可。那些健康指标靠前的运动员,获得超越平均成绩的可能性较大。多因子模型的原理与此类似,我们只要找到那些对企业的收益率最相关的因子即可。
B.风格轮动模型:利用市场的风格特征进行投资,比如有时候市场偏小盘股,有时候偏好大盘股。
C.行业轮动模型:行业轮动与风格轮动类似,由于经济周期的原因,总有一些行业先启动,有的行业跟随。其本质是利用不同投资品种强势时间的错位,对行业品种进行切换以达到投资收益最大化的目的。在经济周期过程中,依次对这些轮动的行业进行配置,则比买入持有策略有更好的效果。
术语解释|大盘股与小盘股
大盘股:通常指发行在外的流通股份数额较大的上市公司股票。
反之,小盘股就是发行在外的流通股份数额较小的上市公司的股票,我国现阶段一般不超1亿股流通股票都可视为小盘股。
市场行为量化选股模型:常见的有资金流模型、动量反转模型、一致预期模型、趋势追踪模型和筹码选股模型五类。
A.资金流选股:基本思想是利用资金的流向来判断股票的涨跌,如果资金流入,则股票应该会上涨,如果资金流出,则股票应该下跌。
B.动量反转模型:指股票的强弱变化情况。过去一段时间强的股票,在未来一段时间继续保持强势,过去一段时间弱的股票,在未来一段时间继续弱势,叫做动量效应。
过去一段时间强的股票在未来一段时间会走弱,过去一段时间弱势的股票在未来一段时间会走强,这叫做反转效应。如果判定动量效应会持续,则应该买入强势股,如果判断会出现反转效应,则应该买入弱势股。
C.一致预期:利用大多数分析师的看法来进行股票的买入卖出操作。
D.趋势追踪: 就是当股价出现上涨趋势的时候,则追涨买入;如果出现下跌趋势的时候,则杀跌卖出,本质上是一种追涨杀跌策略。判断趋势的指标有很多种,包括MA、EMA、MACD等,最有效的是均线策略。
E.筹码选股:基本思想是如果主力资金要拉升一支股票,会慢慢收集筹码,如果主力资金要卖出一支股票,则会慢慢分派筹码.所以根据筹码的分布和变动情况,就可以预测股票的未来是上涨还是下跌。
将一段时期内的股票价格平均值连成曲线,用来显示股价的历史波动情况,进而反映股价指数未来发展趋势的技术分析方法。
术语解释 | EMA
EMA:即指数平均数指标,也是一种趋向类指标。其构造原理是:对收盘价进行算术平均,用于判断价格未来走势的变动趋势。与MACD指标相比,EMA着重考虑了当天价格(当期)行情的权重,在使用中克服了MACD指标对于价格走势的滞后性缺陷。
量化择时
量化择时:指利用数量化的方法来判断整个市场的走势情况,是牛市、熊市还是震荡市。如果判断是牛市,则买入持有;如果判断是熊市,则卖出清仓;如果判断是震荡市,则进行高抛低吸。这样可以获得远远超越简单买入持有策略的收益率。
量化择时常见的择时方法有:趋势量化择时、市场情绪量化择时、有效资金量化择时、牛熊线量化择时、Hurst指数量化择时、异常指标量化择时。
A.趋势择时:基本思想来自于技术分析,技术分析认为趋势存在延续性,因此只要找到趋势方向,跟随操作即可。趋势择时的主要指标有MA、MACD、DMA等。
术语解释|牛市与熊市
牛市:又称多头市场,指价格长期呈上涨趋势的证券市场。价格变化的总趋势是不断走高,特征是大涨小跌。
熊市:又称空头市场,指价格长期呈下跌趋势的证券市场。价格变化的总趋势是不断走低,特征是大跌小涨。
术语解释|震荡市
震荡市:是指股价跌荡起伏,股市前景不明的市场行情。其特征是短线投资增多,市场人气不稳,股价大起大落。
术语解释|DMA
B.市场情绪择时:利用投资者的热情程度来判断大势方向,当情绪热烈,积极入市时,大盘可能会继续涨;当投资者情绪低迷、不断撤出市场的时候,大盘可能继续下跌。
C.有效资金模型:其是通过判断推动大盘上涨或者下跌的有效资金来判断走势,因为在顶部和底部时资金效果具有额外的推动力。
E.Hurst指数:是分形理论在趋势判断中的应用,分形市场理论认为,资本市场是由大量具有不同投资期限的投资者组成的,且信息对不同投资者的交易周期有着不同的影响。利用Hurst指数可以将市场的转折点判断出来,从而实现择时。
F.异常指标择时:在大盘出现顶点或者低点的时候,有些指标容易出现异常数据,处理这些特殊情况下的异常数据,从而达到择时效果。
统计套利
统计套利:将套利建立对历史数据进行统计分析的基础之上,估计相关变量的概率分布,并结合基本面数据进行分析以用以指导套利交易。相比于无风险套利,统计套利少量增加了一些风险,但是由此可获得的套利机会将数倍于无风险套利。
统计套利的优点:
A.统计套利是对无风险套利条件的放松,以增加少量的风险来换取更多的套利机会。
B.套利风险相对较小,对于来自外界的突发性因素对价差影响有限,因此相对价格的走势的分析往往可以忽略外围的不确定性因素,其价差走势更容易把握。
统计套利的局限:
A.历史数据只能反映过去,过去所发生的,在未来并不一定会发生。只有在分析历史的基础,充分结合品种的基本面数据进行估计未来相对价格的走势,从而评估套利的可行性。
B.统计套利中回归均衡关系所需要的时间跨度难以准确预知,这个跨度只能根据历史统计或季节规律性做。
术语解释|否定域与概率分布
否定域:又称拒绝域,指能够拒绝原假设的检验统计量的可能所有取值的集合。
概率分布:用于表述随机变量取值的概率规律。事件的概率表示了一次试验中某一个结果发生的可能性大小。
术语解释|套利
套利:又叫价差交易,通常指在某种实物资产或金融资产(在同一市场或不同市场)拥有两个价格的情况下,以较低的价格买进,较高的价格卖出,从而获取无风险收益。
02
Python语法与量化策略
基础语法
一般量化策略分注释部分和代码部分,注释主要是为了方便阅读,也有助于我们在编写代码时思维更加清晰,且注释部分不影响代码部分运行,代码部分为量化策略运行的核心。
单行注释使用 # 多行注释使用 ''' '''
1 '''简单入门策略—双均线策略'''
2 #双均线策略
3 #策略逻辑:当五日均线与二十日均线金叉时买入,当五日均线与二十日均线死叉时卖出。
4 #初始化账户
5 def initialize(account):
函数表达
以'def'为整个函数代码块的开头,随后是函数名称和函数参数。格式形式即为:
def 函数名(参数1,参数2...):
def stock(): #函数可以不填写任何参数
行与缩进
一般量化策略都由很多个代码模块构成,代码块中必须使用相同数目的行首缩进空格数。缩进快捷键统一使用tab键进行缩进。
给a赋值一个值,若a 大于0,则输出“a为正数”;
1 a = 1
2 if a > 0:
3 print('a'+'为正数')
2 a=x+y
3 b=x-y
4 c=x*y
5 d=x/y
6 e=x%y
7 f=x**y
8 g=x//y
2 print(6>x and 7>y)
3 print(1>x or 8>y)
4 print(not(6>x and 7>y))
5 if not(6>x and 7>y):
6 print('满足')
7 else:
8 print('不满足')
函数API——量化策略的运行机制
步骤:
1. 账户—>2.时间—>3.数据获取及分析—>4.条件判断并下单交易
以简单双均线策略为例
1 '''简单入门策略—双均线策略'''
2 #双均线策略
3 #策略逻辑:当五日均线与二十日均线金叉时买入,当五日均线与二十日均线死叉时卖出。
账户
初始化函数:def initialize(account):,该函数只有唯一一个参数account,即量化策略在初始化函数中需要对账户信息初始化,账户信息包括账户持仓、账户可用资金、账户使用资金等,除此之外,account作为对象还可能存放变量,但一旦初始化后,都会全部清空,回归到最开始的时候。
在简单双线策略中,其在account对象中设置了security证券变量,也就是贵州茅台的股票代码。
4 #初始化账户
5 def initialize(account):
6 #设置要交易的证券(600519.SH 贵州茅台)
7 account.security = '600519.SH'
时间
量化策略通过函数来实现准时运行,最常见的是def handle_data(account,data): 函数,该函数可以设置两种模式:日级和分钟级。
日级模式下,该函数会定时在每日9点30分准时运行一次。
分钟级模式下,该函数会 在竞价交易时间内的每个分钟定时运行一次,也就是一个交易日时长四小时,运行240次。
在简单双线策略中,整个策略都是在def handle_data(循环函数)函数中运行,函数参数为account和data,其中account是账户信息对象,而data是储存数据的对象。
8 #设置买卖条件,每个交易频率(日/分钟/tick)调用一次
9 def handle_data(account,data):
数据获取及分析
行情、财务等数据都是经过人工整理后储存下来的,具有标准的格式,而通过一系列的获取数据函数,用户可以获取到策略所需要的数据,进行分析,作出买卖决定。
10 #设置买卖条件,每个交易频率(日/分钟/tick)调用一次
11 def handle_data(account,data):
12 #获取证券过去20日的收盘价数据
13 close = data.attribute_history(account.security, ['close'], 20, '1d')
14 #计算五日均线价格
15 MA5 = close.mean().values()
16 #计算二十日均线价格
17 MA20 = close.values.mean()
条件判断并下单交易
量化策略在完成对数据分析后,往往是需要进行判断,然后下单交易。就如同简单双均线中,策略获取到数据,然后计算5日、20日均线,判断均线金叉则买入,死叉则卖出。
18 #如果五日均线大于二十日均线
19 if MA5 > MA20:
20 #使用所有现金买入证券
21 order_value(account.security,account.cash)
22 #如果五日均线小于二十日均线,并且目前有头寸
23 if MA5 < MA20 and account.positions_value > 0:
24 #卖出所有证券
25 order_target(account.security,0)
26 #记录这次卖出
27 log.info("卖出 %s" %(account.security))
注:
order_value 根据金额下单
order_target 按目标股数下单
history 获取多只股票多属性的历史行情 数据,不能在研究环境中使用
account 账户对象
security 证券
positions 持仓对象
order_value 下单函数,根据金额下单,购买股票、股指期货合约或基金
头寸:指的是个人或实体持有或拥有的特定商品、证券、货币等的数量。多头寸:如果银行在当日的全部收付款中收入大于支出款项。
Python数据类型
字典的每个键对应每个值,用冒号分割,每个键之间用逗号分割,整个字典使用大括号,
一般格式为:d = {key1 : value1, key2 : value2 }。
参加证券投资竞赛时
它是一个上下通道。当布林线愈收愈紧时,常意味市场转势。需配合自己所选择的指标来判断。如当你选择的指标无明显卖出信号,但价格触及布林道上轨时,表明这是持续信号。在价格处于上升趋势期间,行走在布林线上的主要特点是:价格不断地触及上轨线,同时还常常向上突破上轨线。下降趋势同理。若突破了上通道,肯定是要跌;若突破了下通道,肯定是涨。
*建议MACD配合使用、不要忽视开盘价*
推荐操作平台:同花顺的mindgo、米筐、聚宽等(操作时不要忘记把时间设为分钟)。
学术交流群扩容邀请
2020年暑假期间,我们运营的3个学术交流群正式向广大受众邀请扩容(本次扩容截至2020年9月13日晚22:00)。如果您希望成为我们群里的一员,请扫码(或复制下面链接到浏览器)按规则填写问卷。
通过审核后,我们的工作人员(志愿者)将会把您拉进:
真诚恳切的学术与生活关怀(1群)
始终如一的学术与生活关怀(2群)
日久弥新的学术与生活关怀(3群)
排版: Alice、焖鸡
审核:Z学长
注:文中的部分定义来自百度百科、MBA智库和360百科,如有侵权,请联后台系我们。