打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
美股回测入门-基于quantopian(一):数据探索

一个量化回测程序,就是通过在历史行情数据的基础上,定义一系列的买、卖规则进行交易的模拟,以分析策略的可行性分析。

那算法交易从何开始呢?

算法交易的基础,就是需要寻找经济上或者纯粹统计上的关系。这时候,需要一个平台提供完备的数据集,包括交易行情数据,基本面数据,宏观数据,甚至其实更多的另类因子等。

在quantopian平台,quantopian.research这个包提供了相关的研究函数,可以方便查看数据。quantopian提供了方便的notebook环境。

from quantopian.research import prices, symbols

import pandas as pd

aapl_close = prices(

assets=symbols('AAPL',),

start='2016-01-01',

end='2018-01-01',

)

#这里得到一个 苹果 公司2016年至2018年的收盘价,数据结构为pandas的Series

aapl_sma20 = aapl_close.rolling(20).mean()

aapl_sma50 = aapl_close.rolling(50).mean()

#得到两条均线

pd.DataFrame({   

'AAPL': aapl_close,

'SMA20': aapl_sma20,

'SMA50': aapl_sma50

}).plot(

title='appl close and sma'

);

#组合到一个Dataframe里并使用plot绘图

接下来,我们查看一下苹果股价的2017年的收益率:

# 导入quantopian包

from quantopian.research import returns, symbols

# 选择2017年

period_start = '2017-01-01'

period_end = '2017-12-31'

#查询这段时间的收益率

aapl_returns = returns(

assets=symbols('AAPL'),

start=period_start,

end=period_end,

)

# 显示最前面10条记录

print(type(aapl_returns))

aapl_returns.head(10)

结果如下:

<class 'pandas.core.series.Series'>

Out[9]:

2017-01-03 00:00:00+00:00    0.002588
2017-01-04 00:00:00+00:00   -0.001032
2017-01-05 00:00:00+00:00    0.005088
2017-01-06 00:00:00+00:00    0.011145
2017-01-09 00:00:00+00:00    0.009246
2017-01-10 00:00:00+00:00    0.000922
2017-01-11 00:00:00+00:00    0.005289
2017-01-12 00:00:00+00:00   -0.004090
2017-01-13 00:00:00+00:00   -0.001764
2017-01-17 00:00:00+00:00    0.007981
Freq: C, Name: Equity(24 [AAPL]), dtype: float64

当然除了行情数据之外,quantopian还集成了很多其他的数据集,包括财报基本面,股票的情绪数据,宏观指标数据等等。一个比较有意思的数据集是twitter的股票情绪数据集

可以通过pipline一次读取多种数据来源,然后按symbol筛选出来。

# 导入Pipeline

from quantopian.research import run_pipeline

from quantopian.pipeline import Pipeline

from quantopian.pipeline.factors import Returns

from quantopian.pipeline.data.psychsignal import stocktwits

# Pipeline定义

def make_pipeline():

returns = Returns(window_length=2)

sentiment = stocktwits.bull_minus_bear.latest

msg_volume = stocktwits.total_scanned_messages.latest

return Pipeline(

columns={

'daily_returns': returns,

'sentiment': sentiment,

'msg_volume': msg_volume,

},

)

# 执行Pipeline

data_output = run_pipeline(

make_pipeline(),

start_date=period_start,

end_date=period_end

)

#data_output是一个Dataframe

print(data_output.head(10))

# 过滤结果

aapl_output = data_output.xs(

symbols('AAPL'),

level=1

)

print(aapl_output.head(10))

# 结果绘图

aapl_output.plot(subplots=True);

daily_returns  msg_volume  2014-01-02 00:00:00+00:00 Equity(2 [ARNC])           0.009497         6.0   
                          Equity(21 [AAME])          0.053846         1.0   
                          Equity(24 [AAPL])          0.012011       203.0   
                          Equity(25 [ARNC_PR])            NaN         NaN   
                          Equity(31 [ABAX])         -0.002990         1.0   
                          Equity(39 [DDC])           0.015570         NaN   
                          Equity(41 [ARCB])         -0.004728         NaN   
                          Equity(52 [ABM])          -0.007636         1.0   
                          Equity(53 [ABMD])         -0.027303         1.0   
                          Equity(62 [ABT])          -0.001562         1.0   

                                                sentiment  
2014-01-02 00:00:00+00:00 Equity(2 [ARNC])           0.00  
                          Equity(21 [AAME])          0.00  
                          Equity(24 [AAPL])         -0.82  
                          Equity(25 [ARNC_PR])        NaN  
                          Equity(31 [ABAX])         -2.22  
                          Equity(39 [DDC])            NaN  
                          Equity(41 [ARCB])           NaN  
                          Equity(52 [ABM])           1.90  
                          Equity(53 [ABMD])          0.00  
                          Equity(62 [ABT])           0.00  
                           daily_returns  msg_volume  sentiment
2014-01-02 00:00:00+00:00       0.012011       203.0      -0.82
2014-01-03 00:00:00+00:00      -0.014131      1481.0      -0.04
2014-01-06 00:00:00+00:00      -0.022034       432.0      -0.10
2014-01-07 00:00:00+00:00       0.005377      2249.0      -0.05
2014-01-08 00:00:00+00:00      -0.007205      1835.0      -0.13
2014-01-09 00:00:00+00:00       0.006407      1227.0      -0.05
2014-01-10 00:00:00+00:00      -0.012861      1792.0      -0.26
2014-01-13 00:00:00+00:00      -0.006673       440.0      -0.11
2014-01-14 00:00:00+00:00       0.005048      1731.0      -0.17
2014-01-15 00:00:00+00:00       0.020127      1460.0       0.09

绘制的子图结果如下,把三个序列分开,但绘制在同一个图中:

在选股环节,对一堆股票做截面分析并排序打分是非常重要的,这时pipeline就很有用了。

# 导入Pipeline与数据集

from quantopian.pipeline import Pipeline

from quantopian.pipeline.data import USEquityPricing

from quantopian.pipeline.data.psychsignal import stocktwits

# SMA指标计算

from quantopian.pipeline.factors import SimpleMovingAverage

# 内置的股票空间,这里是流动性强的

from quantopian.pipeline.filters import QTradableStocksUS

def make_pipeline():

# 流动性强的股票集

base_universe = QTradableStocksUS()

# 最近的收盘价

close_price = USEquityPricing.close.latest

# 牛熊得分3天的简单滑动平均

sentiment_score = SimpleMovingAverage(

inputs=[stocktwits.bull_minus_bear],

window_length=3,

)

#返回Pipeline

return Pipeline(

columns={

'close_price': close_price,

'sentiment_score': sentiment_score,

},

screen=base_universe

)

# 导入run_pipeline

from quantopian.research import run_pipeline

# 执行pipeline

pipeline_output = run_pipeline(

make_pipeline(),

start_date='2013-01-01',

end_date='2013-12-31'

)

# 数据呈现

pipeline_output.tail(10)

这样就得到在可流动的股票集合里,2013年最后一天的收盘价,情绪得分的3天SMA的数据:


close_pricesentiment_score
2013-12-31 00:00:00+00:00Equity(43721 [SCTY])57.32-0.176667
Equity(43919 [LMCA])146.220.000000
Equity(43981 [NCLH])35.25-0.700000
Equity(44053 [TPH])19.330.333333
Equity(44060 [ZTS])32.680.000000
Equity(44089 [BCC])29.661.000000
Equity(44102 [XONE])60.500.396667
Equity(44158 [XOOM])27.31-0.160000
Equity(44249 [APAM])64.530.000000
Equity(44270 [SSNI])21.050.423333
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用Python也能进军金融领域?这有一份股票交易策略开发指南
操盘秘码
Promtail Pipeline 日志处理配置
编程语言采集 Nginx 日志的几种方式,你知道几种?
安利一个Python大数据分析神器!
量化投资策略:常见的几种Python回测框架(库)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服