编程小白学 python-编程小白如何结合量化实例学习python量化建模?

既然看到了那就不能修手旁观了,作为小白想要学习量化必须对量化有个整体的了解然后才能学习到最后才能自己建模。下面我就来详细介绍下:

一、什么是量化交易

量化交易,指的是利用数学模型,在金融市场中寻找稳定超额收益的投资手段。量化交易有着挖掘信息能力强,不易受主观情绪影响,下单及时、准确,风险控制严格等特点,能够获得稳健的收益。而其相对于传统主观投资,上手难度也比较大,门槛较高。入门量化交易,主要需要了解如下几方面的知识。

1.数学/统计学知识

既然说到用数学模型,那数学和统计学的知识是必不可少的。由于国内金融市场尚不完备,一些衍生品交易受到限制,所以相较国外市场,能用到的数学/统计学知识也要少一些。对于非理工背景的投资者,需要补充基础的高等数学,线性代数,概率论,统计学,最优化理论等等学科的知识,这些内容可以在高校教科书中找到。对于一些新兴的利用机器学习的交易策略,还需要了解一些数据挖掘的知识。但既然是入门,这部分自然不是必要的。

另外,计量经济学的应用尤其广泛。进行策略研究时经常要面对大量的时间序列、面板数据。虽然在实践过程中更加注重策略结果,只要能赚钱的策略就是好策略,但在严谨的计量理论的支持下,回归结果更准确,能更好的刻画数据背后的关系,故往往更容易得到与预期相近的结果。其中,时间序列回归与截面、面板回归的逻辑与假设均有较大区别,且广泛用于刻画及预测金融资产的收益,波动。计量经济学的书籍推荐伍德里奇的《计量经济学导论:现代观点》;时间序列推荐布鲁克斯的《金融计量经济学导论》。

2.编程能力

由于量化策略要处理大规模的数据,并采用复杂的数学算法,故需要利用程序来完成这一过程。大部分面向对象的编程语言,如Python,Java,R等都可以胜任这一工作。我在这里推荐Python,在业界比较主流,其特点主要是包括大量第三方开发的包,如处理数据的Numpy,Pandas,和金融包Talib,和各个平台及其他语言兼容性良好。其中Pandas是美国知名对冲基金AQR开发的数据处理包,非常适合用于金融数据。Python的学习可以通过《利用Python进行数据分析》等书籍进行学习,也可以通过一些网上教程快速入门。在实际应用的过程中,应该多参考各个工具包的API文档。

回测程序主要包括导入数据及初始化账户,每个交易时间点择时条件、调仓逻辑,及回测结果计算,绘制净值曲线等等。京东量化平台封装的回测环境简化了这一过程,能够方便的对策略进行测试。(http://quant.jd.com)

3.金融基础知识

量化交易,根本上是金融市场中的行为。虽然该岗位对数学、编程知识有要求,但脱离了其金融本质,就无法设计出优秀的策略。量化投资者需要了解各种金融资产的性质,以及影响其价格的因素。对于股票而言,公司的基本面及财务情况,其所处行业的形势能够从某种程度上反映在其股票价格中,因此投资者应对此有基本了解。这部分可以参考博迪,凯恩,马库斯的《投资学》,以及财务会计,报表相关书籍。此外,中国市场受到人为操控的因素影响较为显著,在实盘操作中,量化投资者在依赖量化策略进行投资决策的同时,一般也会加入一些主观判断,以更及时捕捉市场走势,获得更高的收益。因此,宏观经济,政策形势对金融市场的影响,也是投资者不能忽视的问题。每天看看华尔街见闻,长久以来可以培养金融直觉。

4.策略研究能力

即是将以上内容综合运用,将投资思想程序化,开发成为有投资价值的策略的能力。起步时,应多参照已有的较为成熟的策略,进行完善复制。策略本身的逻辑可能三言两语就能概括,但在实际执行的过程中的细节不可忽略。众所周知,在回测中表现突出的策略在实盘中不一定有效,但在回测中效果都不好的策略,难以在实盘重有良好的表现。过度拟合,幸存者偏差和使用未来函数都是新手经常会出现的错误,避免这些错误,才能让回测结果更好的接近真实情况。同时,在得到回测结果后,如何对收益进行归因分析,研究持仓股票,风险暴露,并对参数进行优化,也是量化投资者需要解决的问题。

一些经典的投资策略包括多因子策略(Fama-French三因子模型),技术指标择时(MACD,布林带等),动量反转策略,事件驱动策略,统计套利策略等。其中很多策略源于外国学术论文,高质量学术期刊包括Journal of Finance,Journal of Financial Economics等等。同时有一些系统的教学书籍,包括Barra Handbook(多因子圣经),Quantitative Equity Portfolio Management(主要讲解投资组合管理),Quantitative Trading Strategies(主要讲如何构造量化策略)。

5.在实践中学习

策略回测终究是回测。基于过去行情设计的策略,一定能在过去的时间区间内有良好的表现。但同样的历史不一定会重演,随着市场趋势和微观结构的改变,策略在未来的时间可能不会按照预期的方向发展。实盘中还存在报表信息公布延迟,交易摩擦,下单对市场价格影响等问题。故一个交易策略,在经过严谨全面的回测检验后,要在实盘上检验其真正效果。

在接触量化交易初期,了解数学编程,模型搭建中的细节处理都是绕不开的问题。而如今各种技术手段都较为成熟,可供大家使用,一个成功的投资者与众不同的地方一定在于其设计策略的思想,和对市场的把握。设计交易策略应以背后的金融直觉为基础,是我一直坚信的理念。希望各位投资者能够在量化投资领域中找到自己独特的视角,成为下一个西蒙斯!

二、量化的学习

1、 软件推荐:python

常用的量化软件有python、matlab、java、C++。从开发难度而言python和matlab都比较容易,java和C++麻烦一些。从运行速度而言,C++、java要快于matlab和python。不过对于大部分人而言,尤其是初学者,开发占用的时间远大于运行时间。如果追求运行速度的话,先将策略开发出来,再用C重写也不迟。另外,从量化资源而言,python资源多于matlab,而且matlab是商业软件,python是免费的。因此我推荐大家用python。

使用python的话,最好下载一个anaconda。这个软件将常用的库都集成好了,免去自己安装的烦恼。下载地址:Download Anaconda Now!

python教程推荐这个网站:Table of Contents,只需要看第一部分就可以了。该教程不仅介绍了python,而且介绍了numpy,scipy,pandas,matplotlib等科学计算库。

2、 数据源推荐:tushare

Tushare支持的数据很全面,相比wind个人版量化接口,tushare更友好。因此推荐tushare。下载地址:TuShare -财经数据接口包

3、 量化框架:推荐使用量化平台

量化平台可以看成是一个已经搭建好的框架。用户只需添加一些自己的买卖条件,即可回测策略,免去了自己从无到有搭建基础框架的过程。

这里推荐一下咱们的京东平台。首先京东的数据和撮合机制还是很专业的,比如交易考虑到了涨停不能买、跌停不能卖的问题,另外京东在回测速度方面目前也具有优势。

以上是做量化的一些基础工具。另外根据策略类型的不同,也会用到一些其他工具。

1、 数据库推荐:sqlite

如果所做的策略需要存储很多数据,那么就需要一个数据库软件,配合使用。Python自带sqlite3库,可以在python中方便的操作sqlite数据库。Sqlite下载地址:SQLite Home Page

使用方法可以参考:SQLite - Python | 菜鸟教程

2、 机器学习推荐:scikit-learn

Scikit-learn封装了很多常用的算法,直接用就可以了,避免了自己写算法。网址:scikit-learn: machine learning in Python

另外推荐一本机器学习的书“集体智慧编程”,介绍及购买链接:《集体智慧编程》([美]Toby Segaran(托比·西格兰))【摘要 书评 试读】- 京东图书

3、 网络信息采集推荐:Beautifulsoup等

关于这方面可以参考“Python网络数据采集”这本书,介绍和购买链接在这里:《Python网络数据采集》([美]米切尔(Ryan Mitchell))【摘要 书评 试读】- 京东图书

三、如何用python建立策略

手把手教你使用京东量化平台完成简单的策略回测-Python篇

今天来教大家使用量化平台中Python的部分,完成一个简单的策略回测。

首先,回测界面是长这个样子的

可以看到,左半边的大部分区域是编辑代码的地方,开发环境会自动识别Python语言的关键词。在代码区上面的设置标志里面可以个性化调节开发环境的视觉效果。

Python的回测代码主要包括init()函数,handle_data()函数,以及其他用户自定义内容。如果在每天开盘前要进行额外的处理或计算,可选择添加before_trade()函数。

def init(context):

# 这里用来写策略开始时要做什么

def before_trade(context):

# 非强制,在这里写每天开盘之前要做什么,不可下单

def handle_data(context, data_dict):

# 这里用来写每天开盘后要做什么,可以是计算,输出日志,或者下单

其中,init()是初始化函数,可以设置基准,滑点,佣金等回测参数,也可以利用context自定义变量。在Python及大部分其他编程语言中,在局部变量只在该变量定义的函数体有效,在其他函数体内是无效的。而context被定义为一个局部变量,可以把内容在不同函数代码之间传导。该函数在回测开始时运行一次。

handle_data()是每个交易时间点(分钟/日)时自动运行一次的函数,可以在此函数内设置交易判断和下单,是策略核心逻辑所在。

用户可以按照Python语言规则定义其他函数,包括运算/数据处理函数,也可以通过task()函数设置自定义函数的执行频率和执行时间。

接下来,我们用一个简单的策略来演示这个过程。我们策略的内容是对平安银行(000001.SZ)进行择时,如果前一天收益率大于中证全指收益率,则买入持仓,反之则不持仓。

首先,我们在init()函数里面设置我们的股票和比较的标的:

# init方法是您的初始化逻辑。context对象可以在任何方法之间传递。

def init(context):

context.stock = "000001.SZ"

context.set_benchmark = "000985.SH"

其中,只要在“#”后面的内容都是注释,不会被Python编译。设置stock和set_benchmark对象时,一定要在前面加上“context.”,这样才能传递到之后的函数中。设置标的后,回测中的基准曲线和收益将采用设置的指数。

然后我们来编辑每个交易日的逻辑:

# 日或分钟或实时数据更新,将会调用这个方法

def handle_data(context, data_dict):

price = get_history(2, "1d", "close")[context.stock]

priceBm = get_history(2, "1d", "close")[context.set_benchmark]

这部分代码获取了目标股票和标的的历史价格,其中context.stock和context.set_benchmark都在init()函数中定义好了。get_history()函数是京东量化平台封装的取历史交易数据的函数。其中“2”代表要取历史两天的数据,以便计算上个交易日的收益。“’1d’”和“"close’”分别表示数据频率为天,所需数据为收盘价。返回的价格为pandas.Series类型。各个平台函数的使用方法可以查看帮助板块中的API文档。

为了方便计算收益率,我自定义了一个CalRet()函数,输入连续两天的价格,计算第二天的收益率:

def CalRet(price):

r = (price[1] - price[0]) / price[0]

return r

这段函数写在handle_data()之前。自定义函数编辑的语法符合Python语法即可。这个函数会返回float类型的r。

我们回到handle_data()函数,利用刚刚定义的函数和获取的股票及指数价格计算收益率:

ytdRet = CalRet(price)

bmRet = CalRet(priceBm)

可以得到上个交易日股票的收益率ytdRet和指数收益率bmRet。之后我们进行判断,如果ytdRet大于bmRet,则全仓买入平安银行股票,否则清仓。

if ytdRet > bmRet:

order_target_percent(context.stock, 1)

else:

order_target_percent(context.stock, 0)

order_target_percent()是量化平台编辑的下单函数,可以设置某个股票的仓位至一个百分比。平台同样支持加减仓,用手数,金额等方式下单,详见API文档。

现在,我们就完成了这个策略的设计。回测平台会自动按照这个逻辑,在回测区间内完成交易。

我们设置回测区间为今年,初始金额为一百万,调仓频率为每天,点击“运行回测”。结果如下:

我们可以看到在回测区间内,策略和基准的净值曲线,每天盈亏,买卖等图像,以及回测的技术指标。同时可以查看相对收益,对数收益等。我们可以看到,这个策略没有能够跑赢大盘。当然,这只是一个例子。

在左边的交易详情,持仓和输出日志中可以看到回测中的具体情况,方便进行归因分析,调整策略等等,同时还可以查看历史回测记录。

五、更加系统的学习地址

新手专区:

Python编程:

策略与应用:

以上就是小白如何学习量化进行策略的建立,当然是基于我们平台的。

大家还希望了解更多有关于量化的知识可以登录我们平台学习http://quant.jd.com/

也可以加入我们的量化交流群:456448095

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小白量化学习-自创指标设计 一、准备工作 1、首先把“HP_formula.py”文件复制到自己的工程目录中。 2、在新文件开始增加下面4条语句。 import numpy as np import pandas as pd from HP_formula import * import tushare as ts 二、对数据预处理 我们采用与tushare旧股票数据格式。 #首先要对数据预处理 df = ts.get_k_data('600080',ktype='D') mydf=df.copy() CLOSE=mydf['close'] LOW=mydf['low'] HIGH=mydf['high'] OPEN=mydf['open'] VOL=mydf['volume'] C=mydf['close'] L=mydf['low'] H=mydf['high'] O=mydf['open'] V=mydf['volume'] 三、仿通达信或大智慧公式 通达信公式转为python公式的过程。 1.‘:=’为赋值语句,用程序替换‘:=’为python的赋值命令‘='。 2.‘:’为公式的赋值带输出画线命令,再替换‘:’为‘=’,‘:’前为输出变量,顺序写到return 返回参数中。 3.全部命令转为英文大写。 4.删除绘图格式命令。 5.删除掉每行未分号; 。 6.参数可写到函数参数表中.例如: def KDJ(N=9, M1=3, M2=3): 例如通达信 KDJ指标公式描述如下。 参数表 N:=9, M1:=3, M2:=3 RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:SMA(RSV,M1,1); D:SMA(K,M2,1); J:3*K-2*D; # Python的KDJ公式 def KDJ(N=9, M1=3, M2=3): RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100 K = SMA(RSV,M1,1) D = SMA(K,M2,1) J = 3*K-2*D return K, D, J #----------------------------------- #根据上面原理,我们把大智慧RSI指标改 # 为Python代码,如下。 def RSI(N1=6, N2=12, N3=24): """ RSI 相对强弱指标 """ LC = REF(CLOSE, 1) RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100 RSI2 = SMA(MAX(CLOSE - LC, 0), N2, 1) / SMA(ABS(CLOSE - LC), N2, 1) * 100 RSI3 = SMA(MAX(CLOSE - LC, 0), N3, 1) / SMA(ABS(CLOSE - LC), N3, 1) * 100 return RSI1, RSI2, RSI3 四、使用公式并绘图 #假定我们使用RSI指标 r1,r2,r3=RSI() mydf = mydf.join(pd.Series( r1,name='RSI1')) mydf = mydf.join(pd.Series( r2,name='RSI2')) mydf = mydf.join(pd.Series( r3,name='RSI3')) mydf['S80']=80 #增加上轨80轨迹线 mydf['X20']=20 #增加下轨20轨迹线 mydf=mydf.tail(100) #显示最后100条数据线 #下面是绘线语句 mydf.S80.plot.line() mydf.X20.plot.line() mydf.RSI1.plot.line(legend=True) mydf.RSI2.plot.line(legend=True) mydf.RSI2.plot.line(legend=True) 不懂就看我的博客 https://blog.csdn.net/hepu8/article/details/93378543

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值