清华编程高手尹成带你基于算法实践python量化交易

量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的投资决策。

定量投资和传统的定性投资本质上来说是相同的,二者都是基于市场非有效或弱有效的理论基础。两者的区别在于定量投资管理是“定性思想的量化应用”,更加强调数据。量化交易具有以下几个方面的特点:

1、纪律性。根据模型的运行结果进行决策,而不是凭感觉。纪律性既可以克制人性中贪婪、恐惧和侥幸心理等弱点,也可以克服认知偏差,且可跟踪。

2、系统性。具体表现为“三多”。一是多层次,包括在大类资产配置、行业选择、精选具体资产三个层次上都有模型;二是多角度,定量投资的核心思想包括宏观周期、市场结构、估值、成长、盈利质量、分析师盈利预测、市场情绪等多个角度;三是多数据,即对海量数据的处理。

3、套利思想。定量投资通过多面、系统性的扫描捕捉错误定价、错误估值带来的机会,从而发现估值洼地,并通过买入低估资产、卖出高估资产而获利。

4、概率取胜。一是定量投资不断从历史数据中挖掘有望重复的规律并加以利用;二是依靠组合资产取胜,而不是单个资产取胜。

量化投资技术包括多种具体方法,在投资品种选择、投资时机选择、股指期货套利、商品期货套利、统计套利和算法交易等领域得到广泛应用。在此,以统计套利和算法交易为例进行阐述。

1、统计套利 [1]

统计套利是利用资产价格的历史统计规律进行的套利,是一种风险套利,其风险在于这种历史统计规律在未来一段时间内是否继续存在。

统计套利的主要思路是先找出相关性most好的若干对投资品种,再找出每一对投资品种的长期均衡关系(协整关系),当某一对品种的价差(协整方程的残差)偏离到一定程度时开始建仓,买进被相对低估的品种、卖空被相对高估的品种,等价差回归均衡后获利了结。股指期货对冲是统计套利较常采用的一种操作策略,即利用不同国家、地区或行业的指数相关性,同时买入、卖出一对指数期货进行交易。在经济全球化条件下,各个国家、地区和行业股票指数的关联性越来越强,从而容易导致股指系统性风险的产生,因此,对指数间的统计套利进行对冲是一种低风险、高收益的交易方式。

2、算法交易。

算法交易又称自动交易、黑盒交易或机器交易,是指通过设计算法,利用计算机程序发出交易指令的方法。在交易中,程序可以决定的范围包括交易时间的选择、交易的价格,甚至包括most后需要成交的资产数量。

算法交易的主要类型有: (1) 被动型算法交易,也称结构型算法交易。该交易算法除利用历史数据估计交易模型的关键参数外,不会根据市场的状况主动选择交易时机和交易的数量,而是按照一个既定的交易方针进行交易。该策略的的核心是减少滑价(目标价与实际成交均价的差)。被动型算法交易most成熟,使用也most为广泛,如在国际市场上使用most多的成交加权平均价格(VWAP)、时间加权平均价格(TWAP)等都属于被动型算法交易。 (2) 主动型算法交易,也称机会型算法交易。这类交易算法根据市场的状况作出实时的决策,判断是否交易、交易的数量、交易的价格等。主动型交易算法除了努力减少滑价以外,把关注的重点逐渐转向了价格趋势预测上。 (3) 综合型算法交易,该交易是前两者的结合。这类算法常见的方式是先把交易指令拆开,分布到若干个时间段内,每个时间段内具体如何交易由主动型交易算法进行判断。两者结合可达到单纯一种算法无法达到的效果。

算法交易的交易策略有三:一是降低交易费用。大单指令通常被拆分为若干个小单指令渐次进入市场。这个策略的成功程度可以通过比较同一时期的平均购买价格与成交量加权平均价来衡量。二是套利。典型的套利策略通常包含三四个金融资产,如根据外汇市场利率平价理论,国内债券的价格、以外币标价的债券价格、汇率现货及汇率远期合约价格之间将产生一定的关联,如果市场价格与该理论隐含的价格偏差较大,且超过其交易成本,则可以用四笔交易来确保无风险利润。股指期货的期限套利也可以用算法交易来完成。三是做市。做市包括在当前市场价格之上挂一个限价卖单或在当前价格之下挂一个限价买单,以便从买卖差价中获利。此外,还有更复杂的策略,如“基准点“算法被交易员用来模拟指数收益,而”嗅探器“算法被用来发现most动荡或most不稳定的市场。任何类型的模式识别或者预测模型都能用来启动算法交易。

量化交易一般会经过海量数据仿真测试和模拟操作等手段进行检验,并依据一定的风险管理算法进行仓位和资金配置,实现风险most小化和收益most大化,但往往也会存在一定的潜在风险,具体包括:

1、历史数据的完整性。行情数据不完整可能导致模型与行情数据不匹配。行情数据自身风格转换,也可能导致模型失败,如交易流动性,价格波动幅度,价格波动频率等,而这一点是量化交易难以克服的。

2、模型设计中没有考虑仓位和资金配置,没有安全的风险评估和预防措施,可能导致资金、仓位和模型的不匹配,而发生爆仓现象。

3、网络中断,硬件故障也可能对量化交易产生影响。

4、同质模型产生竞争交易现象导致的风险。

5、单一投资品种导致的不可预测风险。

为规避或减小量化交易存在的潜在风险,可采取的策略有:保证历史数据的完整性;在线调整模型参数;在线选择模型类型;风险在线监测和规避等。

量化策略是指使用计算机作为工具,通过一套固定的逻辑来分析、判断和决策。量化策略既可以自动执行,也可以人工执行。 [2]

一个完整的量化策略包含哪些内容?

一个完整的策略需要包含输入、策略处理逻辑、输出;策略处理逻辑需要考虑选股、择时、仓位管理和止盈止损等因素。

选股

量化选股就是用量化的方法选择确定的投资组合,期望这样的投资组合可以获得超越大盘的投资收益。常用的选股方法有多因子选股、行业轮动选股、趋势跟踪选股等。

1 多因子选股

多因子选股是most经典的选股方法,该方法采用一系列的因子(比如市盈率、市净率、市销率等)作为选股标准,满足这些因子的股票被买入,不满足的被卖出。比如巴菲特这样的价值投资者就会买入低PE的股票,在PE回归时卖出股票。

2 风格轮动选股

风格轮动选股是利用市场风格特征进行投资,市场在某个时刻偏好大盘股,某个时刻偏好小盘股,如果发现市场切换偏好的规律,并在风格转换的初期介入,就可能获得较大的收益。

3 行业轮动选股

行业轮动选股是由于经济周期的的原因,有些行业启动后会有其他行业跟随启动,通过发现这些跟随规律,我们可以在前者启动后买入后者获得更高的收益,不同的宏观经济阶段和货币政策下,都可能产生不同特征的行业轮动特点。

4 资金流选股

资金流选股是利用资金的流向来判断股票走势。巴菲特说过,股市短期是投票机,长期看一定是称重机。短期投资者的交易,就是一种投票行为,而所谓的票,就是资金。如果资金流入,股票应该会上涨,如果资金流出,股票应该下跌。所以根据资金流向就可以构建相应的投资策略。

5 动量反转选股

动量反转选股方法是利用投资者投资行为特点而构建的投资组合。索罗斯所谓的反身性理论强调了价格上涨的正反馈作用会导致投资者继续买入,这就是动量选股的基本根据。动量效应就是前一段强势的股票在未来一段时间继续保持强势。在正反馈到达无法持续的阶段,价格就会崩溃回归,在这样的环境下就会出现反转特征,就是前一段时间弱势的股票,未来一段时间会变强。

6 趋势跟踪策略

当股价在出现上涨趋势的时候进行买入,而在出现下降趋势的时候进行卖出,本质上是一种追涨杀跌的策略,很多市场由于羊群效用存在较多的趋势,如果可以控制好亏损时的额度,坚持住对趋势的捕捉,长期下来是可以获得额外收益的。

择时

量化择时是指采用量化的方式判断买入卖出点。如果判断是上涨,则买入持有;如果判断是下跌,则卖出清仓;如果判断是震荡,则进行高抛低吸。

常用的择时方法有:趋势量化择时、市场情绪量化择时、有效资金量化择时、SVM量化择时等。

仓位管理

仓位管理就是在你决定投资某个股票组合时,决定如何分批入场,又如何止盈止损离场的技术。

常用的仓位管理方法有:漏斗型仓位管理法、矩形仓位管理法、金字塔形仓位管理法等

止盈止损

止盈,顾名思义,在获得收益的时候及时卖出,获得盈利;止损,在股票亏损的时候及时卖出股票,避免更大的损失。

及时的止盈止损是获取稳定收益的有效方式。

策略的生命周期

一个策略往往会经历产生想法、实现策略、检验策略、运行策略、策略失效几个阶段。

产生想法

任何人任何时间都可能产生一个策略想法,可以根据自己的投资经验,也可以根据他人的成功经验。

实现策略

产生想法到实现策略是most大的跨越,实现策略可以参照上文提到的“一个完整的量化策略包含哪些内容?”

检验策略

策略实现之后,需要通过历史数据的回测和模拟交易的检验,这也是实盘前的关键环节,筛选优质的策略,淘汰劣质的策略。

实盘交易

投入资金,通过市场检验策略的有效性,承担风险,赚取收益。

策略失效

市场是千变万化的,需要实时监控策略的有效性,一旦策略失效,需要及时停止策略或进一步优化策略。

snownlp抛出错误_9snowNLP常见用法相关推荐

  1. 当你的Python代码抛出错误,首先应该看这里!

    点击关注我哦 欢迎关注 "小白玩转Python",发现更多 "有趣" 当你写了一段漂亮的代码,却发现到它并不像你预期的那样工作时,那得是多么的沮丧.这时候就需要 ...

  2. javascript如何手动抛出错误?

    前言 在javascript中通常使用throw语句抛出错误,throw语句用于抛出一个用户自定义的错误. 例如:抛出了一个值为字符串的错误 throw 'abc'; 例如:抛出了一个错误对象 thr ...

  3. linux的android工作室,Android工作室在启动时抛出错误,linux机器

    我只是将我的Android Studio从1.5升级到2.3,我只是解压缩文件夹并复制到下载文件夹中,现在当我启动android studio时,我收到了此消息:Android工作室在启动时抛出错误, ...

  4. koa --- 使用中间件多层级抛出错误

    说明 能够熟练的掌握错误的抛出,可以在一定程度上提高代码的开发效率和可读性 构造错误 本栗采用调用一个不存在的函数来抛出错误 const Koa = require('koa'); const app ...

  5. 抛出错误_不用try catch,如何机智的捕获错误

    这是多个feature组合使用后实现的神奇效果,在React源码中被广泛使用. 当我读源码看到这里时,心情经历了: 懵逼 -- 困惑 -- 沉思 -- 查文档 -- 豁然开朗 看完此文,相信你也会发出 ...

  6. java执行python提示import os找不到_java利用Jython调用python抛出错误ImportError: No module named odbchelper...

    Python代码: import odbchelper def add(x, y): """ add method """ return x ...

  7. swift 抛出错误_Swift错误处理– Swift尝试,捕捉,抛出

    swift 抛出错误 Swift error handling is a very important aspect of writing better code. Swift try stateme ...

  8. js手动抛错_javascript如何抛出错误?

    程序的非正常运行状态被称为"异常"或"错误",解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息. ECMAScript 定义了六种类型 ...

  9. MATLAB Appdesigner开发独立桌面App全流程(二):以实时时间显示为例介绍Timer和StartupFcn的使用以及try catch抛出错误

    1.以实时显示时间为例简单介绍Timer的使用 根据目前所了解到的资料,MATLAB调用多线程较为麻烦,并且类似parfor等语法只适用于大规模运算,而不适合两个独立的.需要并行的任务.这时,我们就需 ...

  10. oracle布尔true 1,将.NET布尔数据类型映射到实体框架中的oracle数(1,0)会抛出错误

    将.NET布尔数据类型映射到.edmx文件中的oracle号(1,0)会抛出以下错误. Error 2019: Member Mapping specified is not valid. The t ...

最新文章

  1. 将unicode编码的txt文件转为utf-8编码
  2. sqlplus操作--文件的输入与输出
  3. 【数据结构与算法】之深入解析“删除二叉搜索树中的节点”的求解思路与算法示例
  4. 只要200行JavaScript代码,就能把特斯拉汽车带到您身边
  5. Android sqlite load_extension漏洞解析
  6. 前端学习(552):api
  7. 【BZOJ1924】【SDOI2010】所驼门王的宝藏(Tarjan,SPFA)
  8. django学习笔记:AdminSite界面配置
  9. Java发送HttpRequest
  10. 使用JMH做Java微基准测试(四)默认状态测试
  11. Halcon开发环境和数据结构介绍——第1讲
  12. python在d盘创建txt文件_python中如何创建一个txt文件
  13. Eclipse+Java+Swing实现企业人事管理系统
  14. Word毕业论文排版 公式居中 编号右对齐 及交叉引用(使用MathType公式编辑器实现)
  15. c语言达内月考试题,达内C培训第一次月考〔附答案〕.doc
  16. 第十七章、区网控制者: Proxy 服务器
  17. 参加高中毕业十年同学会有感
  18. 使用docker官方加速器
  19. hander机制深入理解
  20. 小孩孩子应用题计算机错误,孩子做数学应用题的能力很差,该怎么办?

热门文章

  1. 使用json解决 《三级联动》(省市县) 含地区编号
  2. ubuntu下安装宋体simsun
  3. 基于React实现的【绿色版电子书阅读器】,支持离线下载
  4. 迅雷精简版 for Mac!附精简教程!
  5. 零基础java学习笔记
  6. GD32 startup.s
  7. c语言编程 要有菜单工作界面,使用C语言图形界面进行编程
  8. windows10 局域网内传输文件
  9. 软件功能测试点---总结大全
  10. rs232转usb线故障(ft232r usb uart驱动安装失败)