摘要: 最近在开始学习美股量化交易, 本篇着重介绍一下 pipeline 的使用; 如果你对量化交易感兴趣, 可以点击 [原文] 查看更多内容。
本代码运行 老虎证券 pc 端 量化交易环境, 运行前 可以注册老虎证券 使用模拟账号 进行运行量化代码。
import pandas as pd from tquant.pipeline import Pipeline from tquant.pipeline.data import Fundamentals, USEquityPricing # 策略初始化方法, 只在开始执行回测时运行一次 def initialize(context): print('初始化策略') # 使用 标普 500 ETF 作为策略基准 set_benchmark(symbol('SPY')) # 设置策略的佣金规则:每股 0.01 美元, 最低 1 美元 set_commission(commission.PerShare(cost=0.01, min_trade_cost=1)) # 定义两个时区 context.remote_time_zOne= 'US/Eastern' context.local_time_zome = 'Asia/Chongqing' # 定时运行方法: # 设置『 month_start 』这个方法在每个月初的第一个交易日开盘时执行一次。 schedule_function(month_start, date_rule=date_rules.month_start(), time_rule=time_rules.market_open()) # 初始化 pipeline 对象 pipe = Pipeline() # 向 pipeline 对象中添加两列数据:收盘价和总股本 pipe.add(USEquityPricing.close.latest, 'close') pipe.add(Fundamentals.shares.latest, 'shares') # 添加一个筛选器:使用成交量最大的 200 只股票 screener = (USEquityPricing.volume.latest.top(200)) pipe.set_screen(screener) # 注册 pipeline 对象 attach_pipeline(pipe, 'universe') # 实现之前定义的 month_start 方法 def month_start(context, data): # 获取 pipeline 的数据, # universe 是一个 dataframe,index 是股票池,column 是数据列 # index 每次计算时,交易量最大的 200 只股票 universe = pipeline_output('universe') # 计算市值,市值=总股本*收盘价 universe['market_cap'] = universe['close'] * universe['shares'] # 去除其中收盘价小于 5 的股票, 并取市值最小的 10 只股票 target_stock = universe[universe['close']>5].sort_values('market_cap', ascending=True) ['market_cap'][:10] # 计算股票的目标调仓权重 target_weight = target_stock/target_stock.sum() # 打印结果 print('当前的日期是:', context.get_datetime(context.local_time_zome)) print('目标调仓权重为:', target_weight) # 调仓 reblance(context, target_weight) def reblance(context, target_weight): # 取当前持仓的所有股票 current_position = context.portfolio.positions.keys() # 计算当前持仓的股票与目标调仓股票的差集 sell = set(current_position) - set(target_weight.index) # 卖出不在目标调仓中的股票 for code in sell: order_target_percent(code, 0) # 按照目标权重, 使用市价单下单 for code in target_weight.keys(): order_target_percent(code, target_weight[code]) log.info('调仓完成')
初始化策略 当前的日期是: 2018-01-03 05:00:00+08:00 目标调仓权重为: Equity(3407 [HMNY]) 0.000142 Equity(8742 [UNG]) 0.035254 Equity(10314 [RIOT]) 0.076770 Equity(5626 [PGNX]) 0.099965 Equity(7738 [WATT]) 0.103301 Equity(2948 [GCAP]) 0.107777 Equity(2848 [FTR]) 0.126808 Equity(8262 [ATRA]) 0.132405 Equity(4587 [MDR]) 0.148945 Equity(3778 [INSY]) 0.168632 Name: market_cap, dtype: float64 2018-01-02 16:00:00 reblance:72 INFO 调仓完成 当前的日期是: 2018-02-02 05:00:00+028:00 目标调仓权重为: Equity(8282 [BLCM]) 0.014110 Equity(8742 [UNG]) 0.042728 Equity(4587 [MDR]) 0.058059 Equity(3728 [IMGN]) 0.084797 Equity(235 [AKS]) 0.111286 Equity(2507 [EXTR]) 0.119066 Equity(3141 [GPOR]) 0.130049 Equity(1338 [CLF]) 0.141863 Equity(8743 [USO]) 0.146597 Equity(1761 [DBC]) 0.151445 Name: market_cap, dtype: float64 2018-02-01 16:00:00 reblance:72 INFO 调仓完成 当前的日期是: 2018-03-02 05:00:00+08:00 目标调仓权重为: Equity(5640 [PHH]) 0.029012 Equity(2100 [ECYT]) 0.033073 Equity(2848 [FTR]) 0.046434 Equity(1720 [CYH]) 0.048309 Equity(2266 [ENDP]) 0.118623 Equity(4763 [MNK]) 0.121333 Equity(3506 [HTZ]) 0.128298 Equity(235 [AKS]) 0.137047 Equity(8743 [USO]) 0.165894 Equity(5000 [NBR]) 0.171978 Name: market_cap, dtype: float64 2018-03-01 16:00:00 reblance:72 INFO 调仓完成 当前的日期是: 2018-04-03 04:00:00+08:00 目标调仓权重为: Equity(4587 [MDR]) 0.034007 Equity(788 [BKD]) 0.073548 Equity(3086 [GME]) 0.075315 Equity(10703 [DBX]) 0.098588 Equity(83 [ACXM]) 0.104958 Equity(2623 [FFBC]) 0.108441 Equity(1338 [CLF]) 0.121434 Equity(8743 [USO]) 0.122429 Equity(5000 [NBR]) 0.129578 Equity(7961 [XOP]) 0.131701 Name: market_cap, dtype: float64 2018-04-02 16:00:00 reblance:72 INFO 调仓完成 当前的日期是: 2018-05-02 04:00:00+08:00 目标调仓权重为: Equity(4587 [MDR]) 0.030825 Equity(8496 [FIT]) 0.057020 Equity(7852 [WPG]) 0.058974 Equity(5460 [P]) 0.070114 Equity(8743 [USO]) 0.107669 Equity(1338 [CLF]) 0.108268 Equity(2384 [ESV]) 0.121031 Equity(7961 [XOP]) 0.133455 Equity(6060 [RDN]) 0.151056 Equity(9671 [UAA]) 0.161588 Name: market_cap, dtype: float64 2018-05-01 16:00:00 reblance:72 INFO 调仓完成 当前的日期是: 2018-06-02 04:00:00+08:00 目标调仓权重为: Equity(8322 [VKTX]) 0.021032 Equity(8743 [USO]) 0.077514 Equity(6481 [SFUN]) 0.093043 Equity(1338 [CLF]) 0.104112 Equity(3062 [GLNG]) 0.108587 Equity(5000 [NBR]) 0.108815 Equity(2384 [ESV]) 0.117255 Equity(1886 [DKS]) 0.117884 Equity(1349 [CLNY]) 0.120782 Equity(7961 [XOP]) 0.130976 Name: market_cap, dtype: float64 2018-06-01 16:00:00 reblance:72 INFO 调仓完成