量化交易平台Quantopian学习的笔记(一)

article/2025/10/25 19:21:27

最近对量化感兴趣,每周末带孩子上辅导班等候时在星巴克记录的一些笔记,记录一下便于以后查阅,一并分享出来希望对大家有帮助。

Quantopian量化交易平台主要针对美股,国内也有几个针对A股的,对A股感兴趣的可以去网上找找;

这个平台牛逼的地方就是:

1、提供了一套封装好的库方便我们写量化的策略使用;

2、提供了需要的数据,都在网上不用自己去找;

3、策略的算法框架足够简单,几百行代码就可以写一个自己的策略,教程中有例子;

4、回测框架现成的,写好策略随时就可以进行回测看效果;

5、支持实盘交易,只要你策略回测OK,关联上账号就可以实盘操作了,兴奋不!

下面是我上上周折腾了一个策略效果:

回测效果图

下面是记录的一些笔记,根据自己的思路记录的有些凌乱,还请见谅!

1、Data Exploration

提供了简单易用的数据接口或者函数;比我们一句句用pandas写简单一些;

# Research environment functionsfrom quantopian.research import returns, symbols# Select a time range to inspectperiod_start = '2014-01-01'period_end = '2014-12-31'# Query returns data for AAPL# over the selected time rangeaapl_returns = returns(assets=symbols('AAPL'),start=period_start,end=period_end,)# Display first 10 rowsaapl_returns.head(10)

2、Pipeline API 形象的来说就是各种数据通过管道进行统一的加工分析后输出我们想要的结果,是一个强大的交叉分析工具

这个是管道API,他提供了一些算法和一些通用的策略算法(比如SimpleMovingAverage),把汇合的数据进行分析处理返回给我们想要的结果;

# Import Pipeline class and datasetsfrom quantopian.pipeline import Pipelinefrom quantopian.pipeline.data import USEquityPricingfrom quantopian.pipeline.data.psychsignal import stocktwits# Import built-in moving average calculationfrom quantopian.pipeline.factors import SimpleMovingAveragedef make_pipeline():# Get latest closing priceclose_price = USEquityPricing.close.latest# Calculate 3 day average of bull_minus_bear scoressentiment_score = SimpleMovingAverage(inputs=[stocktwits.bull_minus_bear],window_length=3,)# Return Pipeline containing close_price# and sentiment_scorereturn Pipeline(columns={'close_price': close_price,'sentiment_score': sentiment_score,})

3、投资组合优化算法

      提供了一个比较方便使用的quantopian.optimize库,方便用户根据自己设定的限制条件去选择自己的投资组合,并计算出各个权重,方便后续策略中使用,例如根据不同的权重沟通等值比率的股票等。

import quantopian.optimize as optobjective = opt.MaximizeAlpha(expected_returns)constraints = [opt.MaxGrossExposure(W_max),      #限制条件opt.PositionConcentration(min_weights, max_weights),]optimal_weights = opt.calculate_optimal_portfolio(objective, constraints)

4、Dollar Volume 资金量,其实就是某个股票的流动性,如果这个股票流动性大交易频繁,就说明你买进卖出成交的速度就又保证,不至于在策略运行中因为下单没成功而错失良机造成损失。

下面时拉出30天内的各股票的流动量,过滤出头部百分之10的高流动性股票;

from quantopian.algorithm import attach_pipeline, pipeline_outputfrom quantopian.pipeline import Pipelinefrom quantopian.pipeline.factors import AverageDollarVolume...def initialize(context):pipe = Pipeline()attach_pipeline(pipe, name='my_pipeline')# Construct an average dollar volume factor and add it to the pipeline.dollar_volume = AverageDollarVolume(window_length=30)pipe.add(dollar_volume, 'dollar_volume')# Define high dollar-volume filter to be the top 10% of securities by dollar volume.high_dollar_volume = dollar_volume.percentile_between(90, 100)# Filter to only the top dollar volume securities.pipe.set_screen(high_dollar_volume)

5、滑动模式:其实就是下单时的策略,因为你想买10000股不会一下就买定,你可以定制个策略一次买多少(滑动),如果不设置默认每次价格5个点浮动,每次下单量0.1 (1000*0.1 = 100股),如果要买220股,那就试分三批买入,100、100、20;自己也可以根据自己的策略来设定,比较灵活。

# Setting custom equity and futures slippage models.def initialize(context):set_slippage(us_equities=slippage.FixedBasisPointsSlippage(basis_points=5, volume_limit=0.1),us_futures=slippage.FixedSlippage(spread=0))

6、交易佣金的模式,默认的交易佣金时美股 0.0001美元,每个期权的交易时0.85美元,也可以自己设定,主要用于回测使用,具体根据实际的券商来设定。

# Setting custom equity and futures commission models.
def initialize(context):set_commission(us_equities=commission.PerShare(cost=0.001, min_trade_cost=0),us_futures=commission.PerContract(cost=1, exchange_fee=0.85, min_trade_cost=0))

7、算法模版,整体设计的比较简单,按照模板填空即可,上手比较简单

"""This is a template algorithm on Quantopian for you to adapt and fill in."""import quantopian.algorithm as algo   #算法库from quantopian.pipeline import Pipelinefrom quantopian.pipeline.data.builtin import USEquityPricingfrom quantopian.pipeline.filters import QTradableStocksUS# Import Optimize API moduleimport quantopian.optimize as opt#算法开始初始化def initialize(context):"""Called once at the start of the algorithm."""#初始化证券池sid(47740),sid(24), sid(42950)context.security_list = [ sid(39840)]# Constraint parameterscontext.max_leverage = 1.0context.max_pos_size = 0.015context.max_turnover = 0.95#任务函数,设置后会定期执行# Rebalance every day, 1 hour after market open.algo.schedule_function(rebalance,algo.date_rules.every_day(),algo.time_rules.market_open(hours=0.1),)#每天休市时执行这个任务# Record tracking variables at the end of each day.algo.schedule_function(record_vars,algo.date_rules.every_day(),algo.time_rules.market_close(),)#这里设置一个数据管道# Create our dynamic stock selector.algo.attach_pipeline(make_pipeline(), 'pipeline')# 数据处理管道,这里主要处理多处来源数据def make_pipeline():"""A function to create our dynamic stock selector (pipeline). Documentationon pipeline can be found here:https://www.quantopian.com/help#pipeline-title"""# Base universe set to the QTradableStocksUSbase_universe = QTradableStocksUS()# Factor of yesterday's close price.yesterday_close = USEquityPricing.close.latestpipe = Pipeline(columns={'close': yesterday_close,},screen=base_universe)return pipe#交易开始前的处理函数def before_trading_start(context, data):"""Called every day before market open. 开盘数据处理"""context.output = algo.pipeline_output('pipeline')# These are the securities that we are interested in trading each day.#context.security_list = context.output.indexdef compute_weights(context, data):#计算10日与30日均值hist = data.history(context.security_list, 'price', 30, '1d')prices_10 = hist[-5:]prices_30 = histsma_10 = prices_10.mean()sma_30 = prices_30.mean()# 加权计算raw_weights = (sma_30 - sma_10) / sma_30normalized_weights = raw_weights / raw_weights.abs().sum()return normalized_weights#定期任务执行的函数,主要是写策略选股然后进行下单def rebalance(context, data):"""Execute orders according to our schedule_function() timing."""# Retrieve alpha from pipeline outputalpha = context.output.close# 重置权重weights = compute_weights(context, data)# 组合重新分配for security in context.security_list:if data.can_trade(security):order_target_percent(security, weights[security])#记录每天的操作def record_vars(context, data):"""Plot variables at the end of each day."""pass#数据处理,每分钟被调用,主要分析实时数据def handle_data(context, data):"""Called every minute."""pass

   先写到这里,整体上来说比较简单,难的是后面的策略怎么搞,慢慢来,欢迎交流!

 

by 祝枝山          于2019.4.14


http://chatgpt.dhexx.cn/article/BSLLrkIW.shtml

相关文章

如何通过量化交易平台接口搭建自己的平台?

市面上其实已经有那么多的可以使用的相对比较完善的量化平台了,但是为什么还是有那么多人选择自己搭平台呢?毕竟重复造轮子,是一件吃力不讨好的事情。因为每个人的选择是不一样的,而且在整个搭建的过程中,也能学习到很…

支持python的量化交易平台

现在支持python的量化平台有很多,其中的“佼佼者”无疑是聚宽量化平台和讯投QMT。 简单介绍下两款量化平台: 迅投QMT量化交易平台:支持VBA、python语言编程,可交易的标的包括股票、ETF、可转债。 优点包括:智能算法行…

主流量化交易与程序化交易平台整理

本文整理了主流的股票、期货与外汇程序化交易的平台与相关资料介绍,部分内容来自网络,图片来自各平台官网截图。 国内大众版 【名称】掘金量化 | MyQquant 【官网】https://www.myquant.cn/ 【简介】成立于2013年,深耕量化投资领域&#xf…

ISE 14.7安装教程——新版(普通安装环境以及难搞的Win10)

对于学习Xilinx系列FPGA的同学们一定少不了和ISE软件的接触,ISE软件最新的版本就是ISE14.7,但是这个版本在win10系统64位的电脑上安装可谓是问题百出,这篇文章的目的是让你会在你的电脑上安装ISE14.7,也是让ISE14.7在64位的win10电…

第2章 Linux操作系统应用入门

嵌入式系统就是一个专用的计算机系统,其上运行的操作系统一般采用Linux系统,既然如此我们就要学会如何使用Linux操作系统。 2.1启动Linux系统 1.在宿主机上启动虚拟机,点击启动Ubuntu系统。 如下图所示: 2、Ubuntu系统启动以后,…

HPS SoC和FPGA联合使用例程

本教程演示了如何使用HPS/ARM与FPGA进行通信。我们将为DE10标准开发板介绍如何根据官方的DE10_Standard_GHRD工程开发出自己的My_GRHD工程。之后,我们会在My_GHRD工程上运行我们自己改造过后的HPS_FPGA_LED应用程序。该应用程序会控制连接到DE10标准开发板上FPGA部分…

RV1126与RV1109 AI系统设计概要(一部分)

RV1109与RV1126参数 主要区别 RV1126处理器(例子) 四核核 Cortex-A7,ARM架构V7-A指令,独立Neon SIMD(一种高级单指令多数据扩展指令集,可执行并行数据处理),与独立FPU(浮点计算)。(RV1109双核A7) 每核有32…

JTAG学习笔记 (3)

因为WIGGLER的一些不可避免的缺点,我们现在将精力集中在JLink上。 JLink是大家都能够买的起的仿真器(当然是D版),已经是白菜价了,可以参考淘宝。他真的是仿真器,虽然目前只能支持ARM系列的芯片&#xff0c…

嵌入式系统设计笔记

难点:第五章,第十章三级流水线组织,第十一章 第一章 嵌入式系统导论 1、ARM是RISC架构 2、Cortex,ARM11以后的产品使用Cortex命名,并分为A/R/M三类 3、ARM指令分为数据处理、数据传递、控制指令 4、CM 2835 在树莓派上…

JTAG接口无法连接的问题

题目:JTAG接口无法连接问题 本文包含两部分内容:1)续写TI DSP连接不上的问题;2)顺便提一下Xilinx FPGA的JTAG口连接不上的问题。 一、TI DSP为啥连接不上? 半年前发过一篇博文《DSP为啥连接不上&#xff1…

STM32夺命100问!你知道几个?

点击上方“小麦大叔”,选择“置顶/星标公众号” 福利干货,第一时间送达 1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2、Stm32f10x.h相当于reg52.…

智能教室控制系统

智能教室控制系统 引言 概述 该系统通过上位机C#控制下位机STM32,实现教室打卡考勤功能,通过打卡对数据库SQLserver进行增删改查,同时能将数据库的数据导出表格,下位机用到RFID的RC522模块,舵机、风扇,w…

基于stm32电梯管理系统设计

基于stm32电梯管理系统设计 这里记录一下以前自己做的嵌入式课程设计,报告中的图片和文字太多了,全部一个一个把搬过来太麻烦了,需要完整文本和代码自行主页私我 摘要关键词一、课题概述1.1市场调研1.2 需求分析 二、课题实施方案2.1 硬件总体方案2.2 性…

基于Xilinx的Kintex-7系列XC7K325T的硬件加速卡

产品型号: B-PCIE-K7F5XILINX的Kintex-7系列FPGA处理器 B-PCIE-K7F5是一款基于PCI Express总线架构的高性能FPGA算法加速卡,该板卡采用Xilinx的高性能28nm 7系列FPGA作为运算节点。Xilinx的28nm 7系列FPGA通过对资源、接口以及时钟的优化,在高性能计算&a…

基于STM32设计的车库监控报警系统

一、前言 随着社会的发展,人们的生活水平不断提高对安防问题的关注度越来越高,因而各类防盗设备也层出不穷,本文采用红外测距传感器、摄像头、STM32单片机以及ESP8266无线通信模块设计一种车库防盗报警器,其可安装在车库的里,通过红外线测距检测是否有人入侵,产生报警信号…

dnw驱动更新,支持全系统(xp,win7,win8/win10)

前言: 本文用于解决win7以上系统使用dnw难装驱动问题,使用新驱动: zadig-2.3.exe,支持xp,win7/win8/win10系统,安装方便、高效,欢迎试用。 对于裸板开发,我们一般使用JTAG工具,比如OpenJTAG、…

jz2440s3c2440 jtag口、串口、usb devices 使用

1.串口: 串口类型: 针串口 、usb串口的使用 1. usb 串口 插入电脑,计算机上设备管理器中其他设备下出现新设备 设备管理器 中查看 2. 安装串口驱动 ,安装驱动以后 系统分配com4 串口 3. windows下载串口连接软件 MobaXterm&…

基于STM32设计的城市绿化云端监控系统(华为云IOT)

一、设计需求 1.1 项目背景 随着科技的蓬勃发展改变了很多传统行业的作业方式,当我们用移动支付代替现金交易时,当我们足不出户就能满足饥饿的身体时,我们的生活方式因为科技而发生了改变;同样科技也在改变着我们周围的点点滴滴,城市绿化养护亦是如此。 通过智慧控制系统…

FPGA的调试-虚拟JTAG

对于FPGA调试,主要以Intel FPGA为例,在win10 Quartus ii 17.0环境下进行仿真和调试,开发板类型EP4CE15F17。主要包括一下几个部分: - FPGA的调试-虚拟JTAG(Virtual JTAG) - FPGA的调试-在线存储器内容编辑…

Win7、Win8、Win10系统USB-Blaster驱动程序无法安装的解决办法

这篇博文是我转载dezhihuang的博文,原文名称和地址如下,并对内容做了适当调整: [原]Win7、Win8系统USB-Blaster驱动程序无法安装的解决办法 第一次用Markdown编辑博客,格式方面真是捉急啊! Win7、Win8、Win10操作系…