基于聚宽量化交易平台实现量化交易策略

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

一、入门量化策略

  JoinQuant聚宽API文档:https://www.joinquant.com/help/api/help?name=api

1、策略内容

  设置股票池为沪深300的所有成分股

  如果当前股价小于10元/股且当前不持仓,则买入;

  如果当前股价比买入时上涨了25%,则清仓止盈;

  如果当前股价比买入时下跌了10%,则清仓止损。

2、获取要操作的股票或指数成分股

# 导入函数库
import jqdata# 初始化函数,设定基准
def initialize(context):# 定义一个全局变量, 保存要操作的股票# 方式一:操作一只股票# g.security = '601318.XSHG'    # 中国平安股票# 方式二:操作多只股票# g.security = ['601101.XSHG', '601106.XSHG']# 方式三:操作指数成分股g.security = get_index_stocks('000300.XSHG')    # 沪深300print(g.security)

  执行显示沪深300指数成分股:

  

3、开启动态复权模式(真实价格)

  开启真实价格回测功能很简单,只需一步即可搞定:在initialize中使用set_option

(1)开启动态复权测试

# 导入函数库
import jqdata# 初始化函数,设定基准
def initialize(context):# 定义一个全局变量, 保存要操作的股票# 方式一:操作一只股票# g.security = '601318.XSHG'    # 中国平安股票# 方式二:操作多只股票# g.security = ['601101.XSHG', '601106.XSHG']# 方式三:操作指数成分股g.security = get_index_stocks('000300.XSHG')    # 沪深300set_option('use_real_price', True)

  由于沪深300不存在分红和股票拆合,显示效果和上图一致。

(2)开启动态复权(真实价格)模式对模拟交易的影响

  在模拟交易中,在未开启动态复权(真实价格)模式时,我们是使用基于模拟交易创建日期的后复权价格。

  后复权模式示意图如下图所示:

  

 

 

  不开启真实价格模拟盘的运算结果是没有错误,只是会理解起来更费劲一些。

  如果想知道今天的真实价格,还需知道模拟创建的日期,并进行复权计算。为了让用户使用更便于理解、更真实的模拟系统,强烈建议开启动态复权(真实价格)模式。开启方式:在代码中调用set_option('use_real_price', True)

  开启动态复权(真实价格)模式示意图如下图所示:

  

 

  开启动态复权(真实)模式后,看到的价格都是最新的,每到新的一天, 如果持仓中有股票发生了拆合或者分红或者其他可能影响复权因子的情形, 会根据复权因子自动调整股票的数量.。但不要跨日期缓存这些 API 返回的结果。

4、设置佣金/印花税

  交易税费包含券商手续费和印花税。可以通过 set_order_cost 来设置具体的交易税费的参数。

set_order_cost(cost, type, ref=None)

  修改代码如下所示:

# 导入函数库
import jqdata# 初始化函数,设定基准
def initialize(context):# 定义一个全局变量, 保存要操作的股票# 方式一:操作一只股票# g.security = '601318.XSHG'    # 中国平安股票# 方式二:操作多只股票# g.security = ['601101.XSHG', '601106.XSHG']# 方式三:操作指数成分股g.security = get_index_stocks('000300.XSHG')    # 沪深300set_option('use_real_price', True)# 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(     # OrderCost 对象open_tax=0,                 # 买入时印花税close_tax=0.001,            # 卖出时印花税open_commission=0.0003,     # 买入时佣金close_commission=0.0003,    # 卖出时佣金close_today_commission=0,   # 平今日仓佣金min_commission=5            # 最低佣金
        ), type='stock'   # 股票)

(1)券商手续费

  中国A股市场目前为双边收费,券商手续费系默认值为万分之三,即0.03%,最少5元。

(2)印花税

  印花税对卖方单边征收,对买方不再征收,系统默认为千分之一,即0.1%。

(3)参数

  • cost: OrderCost 对象

  • open_tax,买入时印花税 (只股票类标的收取,基金与期货不收)

  • close_tax,卖出时印花税 (只股票类标的收取,基金与期货不收)

  • open_commission,买入时佣金,申购场外基金的手续费

  • close_commission, 卖出时佣金,赎回场外基金的手续费

  • close_today_commission, 平今仓佣金

  • min_commission, 最低佣金,不包含印花税

  • type: 股票、场内基金、场内交易的货币基金、分级A基金、分级B基金、分级母基金、金融期货、期货、债券基金、股票基金、QDII 基金、场外交易的货币基金、混合基金、场外基金,'stock'/ 'fund' / 'mmf' /'fja'/'fjb'/ 'fjm'/ 'index_futures' / 'futures' / 'bond_fund' / 'stock_fund' / 'QDII_fund' / 'money_market_fund' / ‘mixture_fund' / 'open_fund'

  • ref: 参考代码,支持股票代码/基金代码/期货合约代码,以及期货的品种,如 '000001.XSHE'/'510180.XSHG'/'IF1709'/'IF'/'000300.OF'

  注意:针对特定的交易品种类别设置手续费时,必须将ref设为None;若针对特定的交易品种或者标的,需要将type设置为对应的交易品种类别,将ref设置为对应的交易品种或者标的

(4)常用示例

# 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5), type='stock')# 期货类每笔交易时的手续费是:买入时万分之0.23,卖出时万分之0.23,平今仓为万分之23
set_order_cost(OrderCost(open_tax=0, close_tax=0, open_commission=0.000023, close_commission=0.000023, close_today_commission=0.0023, min_commission=0), type='index_futures')# 单独设置 000300.XSHG 的费用
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5), type='stock', ref='000300.XSHG')# 设置所有期货(包括金融指数期货)的费用
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5), type='futures')# 对 IF/IH/IC 三个品种有效
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5), type='index_futures')# 单独设置AU期货品种的费用
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5), type='futures', ref='AU')# 单独设置AU1709合约的费用
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5), type='futures', ref='AU1709')

二、单位时间运行策略函数

  handle_data:该函数每个单位时间会调用一次, 如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次。

  该函数依据的时间是股票的交易时间,即 9:30 - 15:00。 期货应使用定时函数。

  该函数在回测中的非交易日是不会触发的(如回测结束日期为2016年1月5日,则程序在2016年1月1日-3日时,handle_data不会运行,4日继续运行)。

  对于使用当日开盘价撮合的日级模拟盘,在9:25集合竞价完成时就可以获取到开盘价,出于减少并发运行模拟盘数量的目的,我们会提前到9:27~9:30之间运行, 策略内获取到逻辑时间(context.current_dt)仍然是 9:30。

# 导入函数库
import jqdata# 初始化函数,设定基准
def initialize(context):# 定义一个全局变量, 保存要操作的股票# 方式一:操作一只股票# g.security = '601318.XSHG'    # 中国平安股票# 方式二:操作多只股票# g.security = ['601101.XSHG', '601106.XSHG']# 方式三:操作指数成分股g.security = get_index_stocks('000300.XSHG')    # 沪深300set_option('use_real_price', True)# 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(     # OrderCost 对象open_tax=0,                 # 买入时印花税close_tax=0.001,            # 卖出时印花税open_commission=0.0003,     # 买入时佣金close_commission=0.0003,    # 卖出时佣金close_today_commission=0,   # 平今日仓佣金min_commission=5            # 最低佣金
        ), type='stock'   # 股票
    )def handle_data(context, data):print('Hello')

  执行效果如下所示:

  

1、获取当前时间数据

  get_current_data():获取当前单位时间(当天/当前分钟)的涨跌停价, 是否停牌,当天的开盘价等。

  该方法返回值是一个dict, 其中 key 是股票代码, value 是拥有最新价、涨停价、跌停价等属性对象。

(1)返回字典key值对应value所拥有的属性对象

  value值对应的属性对象:

  • last_price : 最新价
  • high_limit: 涨停价
  • low_limit: 跌停价
  • paused: 是否停止或者暂停了交易, 当停牌、未上市或者退市后返回 True
  • is_st: 是否是 ST(包括ST, *ST),是则返回 True,否则返回 False
  • day_open: 当天开盘价
  • name: 股票现在的名称, 可以用这个来判断股票当天是否是 ST, *ST, 是否快要退市
  • industry_code: 股票现在所属行业代码, 参见 行业概念数据

(2)示例

def handle_data(context, data):print(get_current_data()['601318.XSHG'].name,get_current_data()['601318.XSHG'].industry_code,get_current_data()['601318.XSHG'].day_open,get_current_data()['601318.XSHG'].high_limit,get_current_data()['601318.XSHG'].low_limit,)

  输出结果如下所示:

  

2、获取历史数据

  attribute_history:获取历史数据,可查询单个标的多个数据字段,返回数据格式为 DataFrame 或 Dict(字典)。

attribute_history(security, count, unit='1d',fields=['open', 'close', 'high', 'low', 'volume', 'money'],skip_paused=True, df=True, fq='pre')

  查看某一支股票的历史数据, 可以选这只股票的多个属性, 默认跳过停牌日期。当取天数据时, 不包括当天的, 即使是在收盘后;分钟数据包括当前分钟的数据;

 


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

相关文章

手把手搭建Python量化交易平台-1:系统架构

个人量化交易的系统架构图: 个人量化交易平台特点: 个性化:开源参考设计 自行个性化设计数据化:python数据分析可视化:phthon前台显示智能化:人工智能及机器学习自动化:通过自动化机制&#x…

Python量化交易平台:QMT (日内交易策略示例)

QMT /Ptrade是一款面向个人投资者,尤其是中高净值个人投资者的专业交易系统。系统采用先进的技术框架,具有功能丰富、风控全面、管理灵活、架构精简、高效稳定等核心优势。PTrade终端不仅支持多品种普通交易、日内回转交易、量化交易等场景;还集成了期权组合交易、期权无风险…

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

最近对量化感兴趣,每周末带孩子上辅导班等候时在星巴克记录的一些笔记,记录一下便于以后查阅,一并分享出来希望对大家有帮助。 Quantopian量化交易平台主要针对美股,国内也有几个针对A股的,对A股感兴趣的可以去网上找…

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

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

支持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&…