金融概论第12章平台选讲_第1页
金融概论第12章平台选讲_第2页
金融概论第12章平台选讲_第3页
金融概论第12章平台选讲_第4页
金融概论第12章平台选讲_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、12.1 量化投资简介量化投资的理论发展已逾百年,实际应用也有数十年;但长期以来各家量化投资机构均采用定制的交易模型和框架,这门技术的含金量很高。然而近年来,国内外涌现出大量量化投资,良莠不齐,量化思路也不尽相同。这些主要解决两个问题:-这一届交易员不会撸代码怎么办?业余投资者竟也想玩量化怎么办?针对第1个问题,出现了少量菜单界面的交互式量化投资,通过在GUI中配置相应参数完成简单的量化策略设计和回测,如果仁网。针对第2个问题,出现了大量代码界面的交互式量化投资,通过在给定的回测或模拟交易框架下编写策略代码来实现稍复杂的量化策略。其中最为出名的是的Quantopian:https:/w/Qua

2、ntopian的回测引擎Zipline是开源的,地址如下:/quantopian/zipline很快,国内多个类似的量化投资出现,形成了“北聚宽,中优矿,筐”的三足鼎立格局。它们既想说自己和Quantopian一样,又怕人们发现真的跟Quantopian一模一样。在这件事情上,说句公道话,给风险投资,也能做出量化投资。本课程只是用聚宽举个例子,并不因此而台。就不介绍了该平基于语种考虑,本课程介绍操作界面最像Quantopian的JoinQuant。12.2 向导式策略随着量化交易的普及,大量不会编程的普通投资者也妄图涉足量化投应运而生。以下内容以JoinQuant为例:资分析领域,“傻瓜式”策

3、略(聚宽)量化交易的向导式策略https:/algorithm/index/generateStock在登录后,可以看到如下向导式策略:向导式策略的左上角为策略名称,点击可修改。回测基本条件包括时间、初始、基准和频率(不可调)。提供选股、条件、风险控制和其他参数向导式策略等四个调控模块。选股:构建一个可供选择的池,在一定的选择标准下,池内的是可以变动的。默认的上证池包括沪深300(缺省)、深证、全部、上证50、中证50、中小板和创业板指。可以自定义池。提供预览池的功选股指标有6个方面:能,可预览执行选股指标后的特定日期池情况。【财务因子】(可用于排序) 成长类因子:与的业绩成长等相关的因子,包

4、括营业收入同比/环比增长率、净利润同比/环比增长率、营业利润率、销售净利率和销售毛利率。 规模类因子:与规模相关的因子,包括总市值、流通市值、总股本和流通股本。 价值类因子:与估值相关的饿因子,包括市净率(PB)、市销率(PS)、市现率(PCF)、静态/动态市盈率(PE)。 质量类因子:与的财务质量、资本结构相关的因子,包括净资产收益率(ROE)和总资产净利率(ROA)。【行情】昨日的开高低收、成交量/成交额、日均价、N日涨跌幅和上市天数。【技术指标】MA(5)、MACD(DIF、DEA、HIST、MACD,12/26/26)、KDJ(K、D、J、KDJ,9/3/3)、RSI(14)、BIAS

5、乖离率(5)、BBI多空指数(3/6/12/24)、CCI(14)、ATR平均真实波动(14)、TRIX三重指数平滑移动平均( 60/5 )、EMA ( 5/10 )、DMA 平行线差(5/60/20)、上下布林线(5/2/2)、N日平均成交额/量。其中,MA、MACD、KDJ、TRIX、EMA、DMA、N日平均成交额/量有穿越选项;但同一类型指标不可叠加。注意RSI没有穿越选项。【形态指标】红三兵、锤子线、倒锤子线、两只乌鸦、三只乌鸦、早晨、乌云盖顶、流星线。、黄昏一方面,形态指标的种类偏少,很多重要的形态并未纳入其中;另一方面,没有形态的度调节选项,使用并不方便。【流数据】昨日主力净额(超

6、大单净额+大单净额)/占比、超大单净额/占比、大单净额/占比、中单净额/占比、小单净额/占比。【附加条件】提供“自定义公式”功能,允许用户添加个性化公式,实现生成器未提供的功能。在回测基本条件(特别是频率)能够满足的前提下,使用向导式策略生成器可以减少框架代码的撰写量。而自定义公式的编程语言为,(wizard)的后而向导式策略台代码与代码式策略(code)兼容,无论在学习过程中还是实际应用中,都应当结合起来使用。条件:在选定的池中,如何选择买入或卖出哪些及其数量;提供了轮动和择时两种模型。【轮动模型】是基于不业、板块或其他特征在涨跌周期具有提供了4个参数:轮动性特征而制定的交易策略。-调仓周期

7、:每多少个交易日更新一次池(默认);:策略最多持有的标的数量(默认5只);最大持仓买入方式:等权重买入(默认)、按默认数量、按总市值比例、按流通市值比例;-卖出欲买进:默认为否。轮动模型是一种排序交易策略,通常都是在追涨。其操作简单,只要坚持初始策略,出现任何波动都交由概率去处理,通常收益稳定,较。正所谓少出现大幅亏损,但也不会有较大的,砥砺前行!【择时模型】是基于指标分析确定合适的买入和卖出时机,从而获得超过基准收益的额外收益。除了交易参数和择时参数。交易参数:-池(1);选股频率:每多少个交易日更新一次买入/卖出频率:每多少个交易日执行一次买入操作(1);:策略最多持有的标的数量(5);:

8、持仓价值在策略中的最大占比(100%);最大持仓个股最大持仓是否可重复买入:当持有标的时,是否可以再次买入(是);买入方式、卖出欲买进:同上页。择时参数:行情、技术指标、形态指标、流指标、附加条件。注意没有财务因子。结合财务因子的获取,想这是为什么?风险控制:(默认关闭)主要包括止盈止损和其他两个部分。【止盈止损】-个股止损/止盈:当个股亏损/损/止盈(20%);超过止损/止盈线,则清仓止-持仓价值止损/止盈:当策略持仓价值总亏损/止损/止盈线,清仓止损/止盈(20%);超过设定的-策略最大亏损/:当策略总亏损/超过设定的止损/止盈线,则策略清仓止损,并停止交易(20%);大盘信号止损:大盘N

9、日均线出现死叉或日跌幅超过 ,则策略清仓止损,并停止交易(60,10/30%)。(处可调)-【其他】-每笔委托数量或金额上限:设置每笔委托的数量或金额上限,当超过设定值时,则按最大设定值买入。其他参数:分为交易精度参数和交易成本参数两类。【交易精度】-滑点:下单后,真实的成交价格与下单时预期的价格总会有一定偏差,滑点用来更模拟市场表现;买入通常有加价偏差,卖出则有降价偏差,偏差为一半滑点。可以选择固定值(0.02元)或百分比(0.246%)。动态复权模式:回测中每天获得的当天价格为除权价格,取得的价格为基于该日期的前复权价格(默认开启);所谓复权,是指对股价和成交量进行权息修复,前复权是将复权

10、日前的价格下调,后复权是将复权日后的价格上调。成交量比例:根据实际行情限制每个订单的成交量,成交量不-成交量比例的乘积(100%)。超过成交量与【交易成本参数】印花税(卖出1)、佣金(均为3)、最低佣金(5元)。12.3 向导式策略使用举例使用向导式策略实现以下策略:以沪深300为池。当DIF和DEA为正且DIF自下而上穿越DEA;当DIF和DEA为负且DIF自上而下穿越。最大持股种类为5种,个股5%止损。(金叉)时,买入DEA(死叉)时,卖出使用2017年数据对策略进行回测,并与沪深300指数基准对比。回测条件中,将时间区间改为2017-01-01至2017-12-31;实际上交易日为1月3

11、日至12月29日,会自动调整。以沪深300指数为基准是的默认选项,也是真实回测中使用最多的基准。策略收益高于某一指数收益是策略的最低要求,但尽可能不要使用中小板指和创业板指作为基准。默认为5只。条件中,最大持仓在条件下的技术指标中,选择MACDDIF、MACDDEA和MACDMACD 为买入条件。注意修改DEA 的参数为12/26/9 ,MACD的选项为“金叉”,参数为12/26/9。(点击编辑即可修改)条件下的技术指标中,选择MACDDIF、MACDDEA和在MACDMACD 为卖出条件。注意修改DEA 的参数为12/26/9 ,MACD的选项为“死叉”,参数为12/26/9。开启风险控制。

12、在风险控制下的止盈止损中,添加个股止损并调整参数为5%。滑点设置为百分比,默认0.246%。至此,所有参数均设置完毕,点击“运行回测”开始回测。【结果】从点击回测按钮至回测完成大约需要40s,过程中页面将显示绘制中的收益曲线和基准曲线,完成后显示状态为“回测完成,用时41.32s”。本策略收益67.31%,69.44%,最大回撤9.603%。1.收益概况:该策略收益高于基准(沪深300),最大回撤发生在两个绿点之间。可以勾选“超额收益”查看超出基准的部分。2.交易详情:详单,见下页。注意买入一定是出现了金叉,但卖出有两种情况:死叉和止损。持仓&收益:按日汇报的持仓情况和单日收益。日志输出:汇报

13、了止损卖出(4次),分别是1月12日的600383、13.4.月日的、 月日的和 月18日的000630。委托日期标的交易类型成交数量成交价2017-01-032017-01-042017-01-042017-01-042017-01-05三安光电(600703)1400股1500股1100股6500股600股13.413.3117.873.0829.86买买买买买(600383)金地药业(600518)京东方A(000725)美的(000333)2017-01-162017-01-18新城控股(601155)汽车(601633)1500股1700股12.3411.14买买2017-08-21

14、苏宁云商(002024)1900股12.51买2017-08-2515.99宁波(002142)买1400股2017-09-04铜陵有色(000630)7300股3.23买2017-09-19泸州老窖(000568)300股买12.4 JoinQuant量化交易API的API ( Application当前絕大多数量化交易都采用基于Programmingerface,应用程序编程接口),结构语法均类似。JoinQuant API文档:https:/help/img/JoinQuantAPI.pdf通过API撰写量化投资策略非常灵活,但极易出现“使用未来数据”的错误,因此在学习之前需明确未来函数

15、。数据产生日123456数据使用日CT的情况。在T日数据时,使用了T+1日的数据(如价假设一种格),通过计算收益率判断是否应当执行交易;显然,策略能保证交易的日胜率为100%,但这并不是一个成功的策略,因为使用了时间T之后的数据参与计算。策略可以规避这种情况的发生。进入界面策略编写界面:在【策略】中点击【+新建策略】,弹出包含策略、策略、融资融券和组合策略在内的多个模板。虽然本课程重点关注市场的T+0、保证金等交易特征使之更为适合量化投资。市场,但生成的策略被分类为Wizard,直接撰写代码形成的策略被通过分类为code,两者是兼容的。可以通过文件夹对策略进行整理。点击【策略】:点这里编译运行

16、点这里回测代码写在这里编译运行结果在这里运行日志在这里第一个策略简单而完整在这个策略里, 每当没有时就买入 1000 股平安(000001),每当有时就卖出800股。1.def2.initialize(context):# 定义一个全局变量, 保存要操作的g.security = 000001.XSHE# 运行函数记得抄在黑板上啊,不然一会儿得来回翻页!3.4.run_daily(market_open, time=every_bar)5.6.7.def8.market_open(context):if g.security not in context.portfolio. order(g.

17、security, 1000)else:order(g.security, -800)itions:9.10.11.上述代码涉及两处自定义函数,其中initialize是默认的初始化函数。1.def initialize(context):# 定义一个全局变量, 保存要操作的g.security = 000001.XSHE# 运行函数run_daily(market_open, time=every_bar).initialize(context)初始化方法,在整个回测、模拟实盘中最开始执行一次,用于初始化一些全局变量。代码中的g可以理解为所有全局变量的名称。交易的参数conte

18、xt是类似大量基础信息,如中self的一个类的实例,其中包含-subportfolios: 当前单个操作仓位的、标的信息;方法一定要有self。portfolio: 账户信息,即subportfolios 的汇总信息;current_dt: 当前时间的开始时间(datetime类型);previous_date: 前一个交易日(date类型)g是全局变量,这意味着g.var可以被带出当前的自定义函数块。例如initialize函数中赋值的g.security可以用在market_open函数中。g.security表示可供操作的池,这是一个变量,因此通过等号(=)也经常在context中进行一

19、些设置,而设置是通过方法来赋值。而完成的,因此可以自定义(调整)的部分为参数。常用的有:-set_benark(security):基准,参数为字符型,如设置沪深300指数为基准,即set_benark(000300.XSHG);-set_order_cost(cost,type,ref=None) :佣金/ 印花税, cost表示项目(ordercost),type表示交易对象类型(字符型),ref表示参考代码;set_slippage(object):滑点,分为FixedSlippage()和PriceRelatedSlippage(); set_option(use_real_price

20、, value):动态复权(真实价格)模式,value为True时开启,value为False时关闭。建议开启-API文档中context与g一样,可以添加自定义内容,但为了避免与context自带的内容,当设置全局变量时,务必使用g.var的形式。补充1:佣金与印花税每笔类交易续费按如下收取:买入时收取0.3的佣金,卖出时收取0.3的佣金和1的印花税, 每笔交易的最低佣金为5元。set_order_cost(OrderCost(open_tax=0, # 印花税close_tax=0.001,=0.0003, # 佣金=0.0003,mismis的平今仓佣金:2.3=5), # 最小佣金#

21、交易对象类型mistype=stock)type中可供设置的交易对象类型还有fund(基金)、index_futures(指数)、futures(所有)。ref用于单独设置某一只、指数、基金或的佣金和印花税(字符型),如ref=000300. XSHG设置沪深300指数的费用。补充2:动态复权(真实价格)动态复权是一种逐日调整的前复权模式,目的是避免未来函数错误。假设一只的价格从未波动,只存在1:1配股:-如果当前是3时刻,则普通的前复权会将历史价格全部调整为2元。但当2时刻的配股未发生之前,并不知道未来会有一次配股。这就犯了未来函数错误。动态复权(真实价格)是在每个时间点对之 前的价格进行复

22、权。例如在0.5时刻价格为8;到了1时刻,0.5时刻的价格就复权为4;而 到了2时刻,0.5的价格复权为2。-实例:如果在两只中始终选择价格较低的那一只进行投资,则普通前复权将低估相应的价格,造成错误。定时运行函数(3个)-月内:run_monthly(func,monthday,time=open,reference_security):run_kly(func,kday, time=open, reference_security)日内:run_daily(func, time=open, reference_security)参数:-func:被定时运行的函数,必须接受context;m

23、onthday/kday:在月内/的第几天运行函数;time:运行函数的时间,表示为“ +/”的形式(见下页);reference_security:时间的参照标的,当不知道交易时间时,可以某一特定交易对象的交易时间为参考运行函数。若不写定时运行函数,行”两种运行方式。注意也会默认提供“按天运行”和“按分钟运是 + 1交易的,按分钟运行也不会在一天内执行。(前述代码按分钟运行会怎样?)补充3: +/包含5种:-具体时间:24小时内的任意时间,写作“HH:MM”;every_bar:仅用于run_daily,按天运行时将于开盘运行,按分钟运行则内的每分钟运行一次;-open/close:开/收盘

24、运行(9:30/15:30);before_open/after_close:9:00/15:30运行;morning/night:8:00/20:00运行。是基础上的偏差,可用“+/”与base相连,h表示小时,m表示分钟。例如开盘后1小时:“open+1h”收盘前1个:“close-1h30m”下单函数order:按股数下单order(security, amount, style=None, side=long, pindex=0)参数:-security:标的代码;amount:交易数量,正数表示买入,负数表示卖出; style:下单方式(指令),None代表MarketOrder(市

25、价指令);side:交易方向,long表示多头,short表示空头,头交易;和基金不支持空-pindex:多个仓位时指定subportfolio 的起始序号,默认为0。其他下单函数包括order_价值下单)、order_(按目标股数下单)、order_value(按_value(按目标价值下单)。cancel_order撤单。get_open_orders/get_orders/get_trades获取订单信息。至此,介绍完了该简单策略中的主要函数。1.def2.initialize(context):g.security = 000001.XSHE run_daily(market_open

26、, time=every_bar)3.4.5.def6.market_open(context):if g.security not in context.portfolio. order(g.security, 1000)else:order(g.security, -800)itions:7.8.9.context.portfolio.itions是用字典类型(dict)表示的多单仓位信息,其中key是代码,value是ition对象。代码中用in来判断成员身份时仅针对字典中的键,即当投资组合中的多单仓位不包含平安时,市价买入1000股该,否则(包含平安时)卖掉800股。当可供卖出的少于下

27、单数量时,即表示清仓。关注一下具体的交易是如何执行的:将刚才学到的知识综合起来,设计一个更为真实的策略:如果上一时间点价格高出五天平均价1%,间点价格低于五天平均价, 则空仓卖出。# 初始化函数def initialize(context):g.security = 000001.XSHE则全仓买入;如果上一时1.2.# 平安# 基准# 动态复权3.set_benark(000300.XSHG)4.set_option(use_real_price,True)5.run_daily(market_open, time=every_bar)6.market_open函数应包含哪些内容?1.def market_open(context):如果9:30执行策略,# 获取股价、# 描述策略并执行和五日股价均值2.需要用到哪几日数据?3.执行情况#4.滞后5期滞后4期滞后3期滞后2期滞后1期今日收盘价股价-1五日股价均值股价-5股价-4股价-3股价-2股价-1所以,这里用attribute_history()函数获取最近五日(不含当日)的收盘价信息,再求取

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论