| 来源:交易极客

量化投资模型的开发步骤一般是:数据处理、寻找因子、回测验证、实盘模拟、风险归因。

数据处理:去极值、标准化、中性化;数据预处理。

寻找因子:寻找Alpha;寻找收益波动比因子

风险归因:简单策略归因,大家有时间可以慢慢研究

其实,除模型开发之外,交易系统的构建、回测系统、风控和数据清理等每个部分都很关键。比如数据处理,你用的工具是Matlab还是R,或者c++以及python,如果是工具本身的格式速度会快很多,就像python的npy格式,或者c++的二进制格式。再有就是根据你的不同需求用什么数据,切片数据、分钟数据或者tick数据。每一块都可以是一个坑。

而量化的模型大致可分为:

1.趋势形、回复型,都依赖价格数据。

2.价值型/收益型、成长型和品质型,此类型策略都基于基本面数据。

3.技术情绪型,较少见,通常都只作为一个辅助因子。

趋势跟随策略

趋势跟随策略是基于以下的基本假定:市场在一定时间里通常朝着同一方向变化,据此对市场趋势做出判断,就可以作为制定交易策略的依据。定义趋势通常用移动平均线交叉来定义趋势。

MACD移动平均线示例

MACD(Moving Average Convergence and Divergence)是Geral Appel 于1979年提出的,利用收盘价的短期(常用为12日)指数移动平均线与长期(常用为26日)指数移动平均线之间的聚合与分离状况,对买进、卖出时机作出研判的技术指标。从双移动平均线发展而来的,由快的移动平均线减去慢的移动平均线。MACD的意义和双移动平均线基本相同。但阅读起来更方便。

指标应用法则:

  1.DIF向上交叉MACD,买进;DIF向下交叉MACD,卖出。

  2.DIF连续两次向下交叉MACD,将造成较大的跌幅。

  3.DIF连续两次向上交叉MACD,将造成较大的涨幅。

  4.DIF与股价形成背离时产生的信号,可信度较高。

  5.MDA、MACD、TRIX三者构成一组指标群,互相验证。

当MACD从负数转向正数,是买的信号。当MACD从正数转向负数,是卖的信号。当MACD以大角度变化,表示快的移动平均线和慢的移动平均线的差距非常迅速的拉开,代表了一个市场大趋势的转变。MACD是Geral Appel 于1979年提出的,它是一项利用短期(常用为12日)移动平均线与长期(常用为26日)移动平均线之间的聚合与分离状况,对买进、卖出时机作出研判的技术指标。

公式算法:

短期EMA:短期(例如12日)的收盘价指数移动平均值(Exponential Moving Average)

长期EMA:长期(例如26日)的收盘价指数移动平均值(Exponential Moving Average)

DIF线: (Difference)短期EMA和长期EMA的离差值

DEA线: (Difference Exponential Average)DIF线的M日指数平滑移动平均线

MACD线: DIF线与DEA线的差

参数:SHORT(短期)、LONG(长期)、M天数,一般为12、26、9。指数加权平滑系数为:

短期EMA平滑系数:2/(SHORT+1)

长期EMA平滑系数:2/(LONG+1)

DEA线平滑系数:2/(M+1)

DIF从下而上穿过DEA,买进;

相反,如DIF从上往下穿过DEA,卖出。

mport quartz
import quartz.backtest    as qb
import quartz.performance as qp
from   quartz.api         import *import pandas as pd
import numpy  as np
from datetime   import datetime
from matplotlib import pylabimport talibstart = datetime(2013, 1, 1)
end = datetime(2015, 1, 22)
benchmark = 'HS300'
#universe = ['601398.XSHG', '600028.XSHG', '601988.XSHG', '600036.XSHG', '600030.XSHG',#'601318.XSHG', '600000.XSHG', '600019.XSHG', '600519.XSHG', '601166.XSHG']
universe = set_universe('SH50')
capital_base = 200000
refresh_rate = 1
window = 1initMACD = -10000.0
histMACD = pd.DataFrame(initMACD, index = universe, columns = ['preShortEMA', 'preLongEMA', 'preDIF', 'preDEA'])
shortWin = 26    # 短期EMA平滑天数
longWin  = 52    # 长期EMA平滑天数
macdWin  = 15    # DEA线平滑天数def initialize(account):account.amount = 10000account.universe = universeadd_history('hist', window)account.days = 0def handle_data(account):account.days = account.days+1for stk in account.universe:prices = account.hist[stk]['closePrice']if prices is None:returnpreShortEMA = histMACD.at[stk, 'preShortEMA']preLongEMA = histMACD.at[stk, 'preLongEMA']preDIF = histMACD.at[stk, 'preDIF']preDEA = histMACD.at[stk, 'preDEA']if preShortEMA == initMACD or preLongEMA == initMACD:histMACD.at[stk, 'preShortEMA'] = prices[-1]histMACD.at[stk, 'preLongEMA'] = prices[-1]histMACD.at[stk, 'preDIF'] = 0histMACD.at[stk, 'preDEA'] = 0returnshortEMA = preShortEMA*1.0*(shortWin-1)/(shortWin+1) + prices[-1]*2.0/(shortWin+1)longEMA = preLongEMA*1.0*(longWin-1)/(longWin+1) + prices[-1]*2.0/(longWin+1)DIF = shortEMA - longEMADEA = preDEA*1.0*(macdWin-1)/(macdWin+1) + DIF*2.0/(macdWin+1)histMACD.at[stk, 'preShortEMA'] = shortEMAhistMACD.at[stk, 'preLongEMA'] = longEMAhistMACD.at[stk, 'preDIF'] = DIFhistMACD.at[stk, 'preDEA'] = DEAif account.days > longWin and account.days%1 == 0:#if DIF > 0 and DEA > 0 and preDIF > preDEA and DIF < DEA:if preDIF > preDEA and DIF < DEA:order_to(stk, 0)#if DIF < 0 and DEA < 0 and preDIF < preDEA and DIF > DEA:if preDIF < preDEA and DIF > DEA:amount = account.amount/prices[-1]order_to(stk, amount)上证指数上的MACD线指标实例:from CAL.PyCAL import *# DataAPI.MktIdxdGet返回pandas.DataFrame格式
sh_index =  DataAPI.MktIdxdGet(indexID = "000001.ZICN", beginDate = "20140101", endDate = "20140731")# calculate DIF, DEA, and MACD
initMACD = -1000.0
sh_index['shortEMA'] = initMACD
sh_index['longEMA']  = initMACD
sh_index['DIF']     = initMACD
sh_index['DEA']  = initMACD
sh_index['MACD']     = initMACDshortWin = 12
longWin  = 26
macdWin  = 9index = sh_index.indexfor i in range(0, index.shape[0]):if i == 0:sh_index['shortEMA'].iloc[i] = sh_index['closeIndex'].iloc[i]sh_index['longEMA'].iloc[i]  = sh_index['closeIndex'].iloc[i]sh_index['DIF'].iloc[i]     = sh_index['shortEMA'].iloc[i] - sh_index['longEMA'].iloc[i]sh_index['DEA'].iloc[i]  = sh_index['DIF'].iloc[i]sh_index['MACD'].iloc[i]  = sh_index['DIF'].iloc[i] - sh_index['DEA'].iloc[i]else:sh_index['shortEMA'].iloc[i] = sh_index['closeIndex'].iloc[i]*2.0/(shortWin+1) + sh_index['shortEMA'].iloc[i-1]*(shortWin-1)/(shortWin+1)sh_index['longEMA'].iloc[i]  = sh_index['closeIndex'].iloc[i]*2.0/(longWin+1) + sh_index['longEMA'].iloc[i-1]*(longWin-1)/(longWin+1)sh_index['DIF'].iloc[i]     = sh_index['shortEMA'].iloc[i] - sh_index['longEMA'].iloc[i]sh_index['DEA'].iloc[i]  = sh_index['DIF'].iloc[i]*2.0/(macdWin+1) + sh_index['DIF'].iloc[i-1]*(macdWin-1)/(macdWin+1)sh_index['MACD'].iloc[i]  = sh_index['DIF'].iloc[i] - sh_index['DEA'].iloc[i]sh_index = sh_index.set_index('tradeDate')# plot data
pylab.figure(figsize=(15,6))
pylab.plot(sh_index.index, sh_index.closeIndex)
pylab.plot(sh_index.index, sh_index.longEMA)
pylab.plot(sh_index.index, sh_index.shortEMA)
pylab.legend([u'ShangZheng Index', u'long period EMA', u'short period EMA'], loc = 'best', fontsize = 12)
pylab.grid()pylab.figure(figsize=(15,6))
pylab.plot(sh_index.index, sh_index.DIF)
pylab.plot(sh_index.index, sh_index.DEA)
pylab.plot(sh_index.index, sh_index.MACD)
pylab.legend([u'DIF line', u'DEA line', u'MACD signal'], loc = 'best', fontsize = 12)
pylab.grid()

拓展阅读:

1.一个量化策略师的自白(好文强烈推荐)

2.市面上经典的量化交易策略都在这里了!(源码)

3.期货/股票数据大全查询(历史/实时/Tick/财务等)

4.干货| 量化金融经典理论、重要模型、发展简史大全

5.从量化到高频交易,不可不读的五本书

6.高频交易四大派系大揭秘

多因子量化投资模型策略深度研究相关推荐

  1. 什么是多因子量化选股模型?

    量化投资中经常听到的"多因子模型"是个什么鬼?因子是影响因素的简称,或简单理解成指标.我们都知道股票收益受到多重因素的影响,比如宏观.行业.流动性.公司基本面.交易情绪等等.所谓& ...

  2. 多因子选股模型python_什么是多因子量化选股模型?

    引言 量化投资中经常听到的"多因子模型"是个什么鬼?因子是影响因素的简称,或简单理解成指标.我们都知道股票收益受到多重因素的影响,比如宏观.行业.流动性.公司基本面.交易情绪等等. ...

  3. 《投资要义》书中的精髓:成功投资的要义在于低估值买入、分散化投资以及不深度研究个股。

    <投资要义>书中的精髓:成功投资的要义在于低估值买入.分散化投资以及不深度研究个股. 从本质上来说,赚钱的途径有两种,分别是用人力成本赚钱和用钱赚钱.我们大多数人都是出生于劳动人民家庭,习 ...

  4. 量化投资交易策略的理论基础

    "量化投资策略"是利用所构建的投资模型指导投资的一种技术手段.量化投资者对于投资模型的构建,一般情况下是在"现代金融学理论框架"下进行的,其主要包括:投资组合选 ...

  5. python多因子量化选股模型_【邢不行|量化小讲堂系列12-Python量化入门】法码三因子选股模型,有多少人可以跑赢...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. 个人微信:xingbuxing0807,有问题欢迎 ...

  6. rc51_中国存托凭证CDR发展初期的投资交易策略_量化投资交易策略_

    中国存托凭证CDR发展初期的投资交易策略 2018-06-10 交易 一,要点 1.1,展望 1.2,简要估值 1.3,交易策略 1.4,风险因素 二,背景和假设 2.1 中国存托凭证/CDR是什么? ...

  7. 对于投资者来说,什么是量化投资交易策略?

    量化投资策略其实是利用所构建的投资模型指导投资的一种技术手段,特别是对于一种能全自动交易的软件,其策略以及资金管理很大一部分决定了软件的质量! 量化投资者,在参与金融市场进行投资决策时,面临根本问题是 ...

  8. 量化投资可转债策略--源代码

    一.十大量化投资策略(含源码) 量化投资策略是利用量化的方法,进行金融市场的分析.判断和交易的策略.算法的总称.著名的量化投资策略有以下10种(注:策略源码模板不能直接用于实盘交易,仅供探讨交流) 0 ...

  9. 两种方法筛选出多因子量化选股模型

    多因子选股模型在模型搭建中,往往会涉及到非常多的股价影响因子,并可能导出数量极多的备选模型.因此,对于多因子选股模型的评价和筛选,就显得尤为关键. 对于专业的量化投资人而言,就需要进一步了解多因子选股 ...

  10. 2种方法筛选出多因子量化选股模型

    多因子选股模型在模型搭建中,往往会涉及到非常多的股价影响因子,并可能导出数量极多的备选模型.因此,对于多因子选股模型的评价和筛选,就显得尤为关键. 对于专业的量化投资人而言,就需要进一步了解多因子选股 ...

最新文章

  1. Programming C# 学习笔记(二) 出发:“Hello World”
  2. 在线作图|如何绘制一个好看的堆叠柱状图
  3. boost::filesystem模块Microsoft TCHAR 的使用示例的测试程序
  4. 年薪35W+ 的程序员看过来!百万架构师第3期招生
  5. Video-Touch:手势识别实现多用户远程控制机器人
  6. python工资一般多少p-Python P值
  7. Z=X+Y型概率密度的求解
  8. 明解c语言答案第11章,《明解C语言第3版.入门篇》练习代码 第11章
  9. android 仿站小工具,仿站小工具下载
  10. 二维向量叉积的几何意义
  11. 解决:ORA-06502: PL/SQL: numeric or value error: NULL index table key value
  12. Quartus-II入门(全加器)
  13. java.lang.NoSuchMethodError问题解决
  14. 交集♂差集♂并集♂和其他集合的内置方法
  15. 某头部证券机构云化与信创双转型深度解析|信创专题
  16. 炒菜更香的39个小窍门
  17. Python 外星人入侵(一):武装飞船
  18. OCJP 考试题之九
  19. 保监会就交强险费率浮动征询专家意见 凸显3焦点
  20. PMOS管经典开关电路-PMOS开关典型电路工作原理及分析-KIA MOS管

热门文章

  1. Java开发自行车管理项目要求_java毕业设计_springboot框架的公共自行车租赁管理...
  2. mysql sql注入工具下载_sql注入工具下载|超级SQL注入工具SSQLInjectionv1.0 正式版 附使用说明 - 极光下载站...
  3. w ndows7运行命令,如何打开Win7命令提示符cmd.exe窗口
  4. 单片机破解的常用方法及应对策略
  5. c语言课程设计管理系统的设计,c语言课程设计-学生管理信息系统设计.doc
  6. 手机12306买卧铺下铺技巧_12306订下铺有什么技巧?
  7. 手机12306买卧铺下铺技巧_12306网上购下铺技巧(亲历版)
  8. 从刷卡到二维码再到刷脸,无现金方式如何掀起支付革命?丨Xtecher 视角
  9. UE4 解除帧率限制
  10. 多图详解WBS任务分解法