当前位置: 首页 > news >正文

【python量化交易】qteasy使用教程01 - 安装方法及初始化配置

qteasy教程1 - 安装方法及初始化配置

  • `qteasy`教程1 - 安装方法及初始配置
    • `qteasy`安装前的准备工作
      • 1, 创建安装环境
      • 2,安装`MySQL`数据库 (可选)
        • 安装`pymysql`
      • 3,创建`tushare`账号并获取API token (可选)
      • 4,安装`TA-lib` (可选)
          • Windows
          • Mac OS
          • Linux
    • 第一次导入`qteasy`
      • 1,配置`tushare`的API token
      • 2,配置本地数据源
    • 开始下载第一批金融数据

qteasy教程1 - 安装方法及初始配置

qteasy是一个完全本地化部署和运行的量化交易分析工具包,具备以下功能:

  • 金融数据的获取、清洗、存储以及处理、可视化、使用
  • 量化交易策略的创建,并提供大量内置基本交易策略
  • 向量化的高速交易策略回测及交易结果评价
  • 交易策略参数的优化以及评价
  • 交易策略的部署、实盘运行

qteasy使用python创建,使用向量化回测及交易模拟引擎实现了策略的高速回测,同时又兼顾策略框架的灵活性,使得用户可以根据需要灵活定制各种高级策。qteasy提供了多种策略参数优化算法,帮助优化及评价交易策略,同时提供了实时运行模式,使交易策略可以直接部署使用。

通过本系列教程,您将会通过一系列的实际示例,充分了解qteasy的主要功能以及使用方法。

qteasy安装前的准备工作

1, 创建安装环境

qteasy可以通过pip来安装,由于依赖包较多,为了避免各依赖包与现有环境中的包产生冲突,建议创建一个独立的python环境来安装qteasy

创建虚拟环境的方法有很多种,这里介绍两种方法,分别是使用venvconda

要使用venv创建虚拟环境,macOS和Linux用户可以打开终端,进入您需要创建环境的路径,输入以下命令,在当前目录下创建一个名为qteasy-env的虚拟环境,并激活环境:

python -m venv qteasy-env  
source qteasy-env/bin/activate

Windows用户可以打开命令提示符,进入您需要创建环境的文件夹,输入以下命令,创建虚拟环境并激活:

py -m venv qteasy-env  
.venv\Scripts\activate

要使用conda创建虚拟环境,可以打开终端,输入以下命令,创建一个名为qteasy-env的虚拟环境,并激活环境:

conda create -n qteasy-env python=3.8
conda activate qteasy-env

在激活的虚拟环境中,使用以下命令安装qteasy:

pip install qteasy

2,安装MySQL数据库 (可选)

qteasy可以管理大量的金融数据。qteasy的工作方式是将所有的金融数据下载到本地,清洗后存储到事先定义好的数据表中,在需要时(生成K线图、交易信号生成、模拟交易回测、交易结果评价等所有环节都需要用到金融数据)从本地数据源直接读取所需的数据。因此,必须在本地设置一个数据管理环境。

qteasy同时支持数据库及文件系统作为数据管理环境,考虑到金融数据量,强烈推荐使用数据库作为本地数据源。qteasy支持的本地数据源包括:

  • csv 文件 默认数据源。占用空间大,但是可以使用Excel读取本地数据,数据量大时速度慢
  • mysql 数据库,强烈推荐使用mysql数据库并确保磁盘有至少1TB的存储空间,速度快
  • hdf5 文件 占用空间大,数据量大时速度慢
  • feather 文件 占用空间较小,数据量大时速度慢

为了实现最佳的数据存储效率,建议使用mysql数据库作为本地数据源。

如果需要使用数据库作为本地数据源,参照以下方法安装MySQL数据库,如果使用文件作为本地数据源,可以跳过这一步。

MySQL的官网可以直接找到社区开源版本下载:
网站提供了dmg和tar等多种不同的安装方式,而且还有针对M1芯片的版本可选:

png

安装完成后,创建用户,设置访问方式并设置密码:

# 创建新的用户,并允许客户通过localhost连接
mysql> CREATE USER '用户名'@'localhost' IDENTIFIED BY '初始密码';
Query OK, 0 rows affected (0.46 sec)# 设置用户的权限
mysql> GRANT ALL ON *.* TO '用户名'@'localhost';
Query OK, 0 rows affected (0.06 sec)# 创建新的用户,并允许客户通过远程连接
mysql> CREATE USER '用户名'@'%' IDENTIFIED BY '初始密码';
Query OK, 0 rows affected (0.46 sec)# 设置用户的权限
mysql> GRANT ALL ON *.* TO '用户名'@'%';
Query OK, 0 rows affected (0.06 sec)

数据库设置好之后,记录您的数据库登录信息、在qteasy的设置中将会用到。

安装pymysql
pip install pymysql

3,创建tushare账号并获取API token (可选)

qteasy目前主要依赖tushare来获取金融数据,系统内建了比较完整的API与tushare接口。鉴于tushare的接口均有权限或积分要求,建议用户提前准备好相应的tushare积分,并开通相应权限。

在这里插入图片描述

申请tushare积分和权限的方法请参见tushare pro主页:

在这里插入图片描述

如果不创建tushare账号,qteasy仍然可以获得一些数据,但是数据的种类非常有限,访问频率和次数也受到限制,很多qteasy功能的使用将会受到限制,如下图所示:

tushare数据详情页2
未来计划增加其他金融数据提供商的API,以扩大数据来源。

4,安装TA-lib (可选)

qteasy内置了大量的技术指标,这些技术指标的计算依赖于TA-lib,如果需要使用qteasy内置的所有技术指标,需要安装TA-lib
如果跳过这一步,将只能使用以下少数几种内置策略。下面简单介绍TA-lib的安装方法:

完整的TA-Lib包无法通过pip安装,因为通过pip install ta-lib安装的只是TA-Lib包的一个python wrapper, 用户必须首先安装C语言的TA-Lib才能在python中使用它。

有些用户可以用下面的方法安装C语言的TA-Lib包:
conda install -c conda-forge libta-lib

在不同的系统下安装C语言的TA-Lib包的方法:

Windows
  • 下载 ta-lib-0.4.0-msvc.zip 并解压至 C:\ta-lib.
  • 下载并安装 Visual Studio Community (2015 或更新版本), 选择 [Visual C++] 功能
  • Windows 开始菜单, 启动 [VS2015 x64 Native Tools Command Prompt]
  • 移动至 C:\ta-lib\c\make\cdr\win32\msvc
  • nmake
Mac OS

使用brew安装ta-lib

$ brew install ta-lib

如果使用Apple Silicon芯片,可以使用:

$ arch -arm64 brew install ta-lib
Linux

下载 ta-lib-0.4.0-src.tar.gz ,然后:

$ tar -xzf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=/usr
$ make
$ sudo make install

安装完成C语言TA-Lib后,可以安装TA-Libpython wrapper

pip install TA-Lib

更完整的TA-Lib的安装方法请参考这里

第一次导入qteasy

当qteasy的所有依赖包正确安装后,就可以在IDE中导入qteasy了。

import qteasy as qt
print(qt.__version__)

第一次导入qteasy时会自动初始化,初始化过程会创建一个qteasy.cnf文件,这个文件用于存储qteasy的环境配置变量,用户可以通过修改这个文件来修改qteasy的环境配置变量。

用户可以将一些关键配置信息存放在qteasy.cfg文件中,这样qteasy在导入时会自动读取这些配置信息。

用户可以在资源管理器、访达或者终端中找到qteasy的根目录,然后打开qteasy.cfg文件,修改其中的内容。

在qteasy中可以通过qt.QT_ROOT_PATH查看qteasy的根目录

import qteasy as qt
print(qt.QT_ROOT_PATH)

第一次初始化后的qteasy.cnf文件内容如下:

# qteasy configuration file
# following configurations will be loaded when initialize qteasy# example:
# local_data_source = database

用户可以直接在文件中添加配置信息,保存文件后重新导入qteasy即可使配置生效了,例如:

local_data_source = database

以下几个配置信息是用户在使用qteasy前非常有必要配置的:

1,配置tushare的API token

注意tushare是一个收费的数据服务,用户需要获取积分,积分越多,获取的数据种类越多,权限也越大,如果不配置tushare token,将无法正常使用tushare的数据服务。

如果您按照教程前一节的内容创建了tushare账号并获取了token,可以将token写入qteasy.cnf文件中,这样在导入qteasy时就会自动读取这个token。

qteasy.cnf文件中添加以下内容:

tushare_token = 你的tushare token

2,配置本地数据源

默认情况下,qteasy使用csv文件保存本地数据,速度较慢而且占用空间较大。为了更好地使用qteasy,用户还应该完成本地数据源的基本配置。

如果您按照教程前一节的内容创建了mysql数据库,可以将数据库的配置信息写入qteasy.cnf文件中,这样qteasy就会连接到您指定的数据库,将金融数据存储到数据库中。

qteasy.cnf文件中添加以下内容:

local_data_source = database
database_host = <你的数据库主机名,如local_host>
database_port = <你的数据库端口,如3306>
database_user = <你的数据库用户名>
database_password = <你的数据库连接密码>
database_name = <保存金融数据的数据库名,如qt_base>

如果不做上述配置,qteasy会使用默认的csv文件作为本地数据源。

开始下载第一批金融数据

完成上述配置以后,保存并关闭qteasy.cfg文件,恭喜你,qteasy已经安装并配置好了,现在可以开始使用qteasy了。

首先,我们需要下载一些金融数据,交易策略的回测、优化、评价等所有功能都需要用到金融数据。
在这里,我们可以先下载一些股票数据,以便后续的教程中使用。

qt.refill_data_source是一个通用的数据下载函数,只要你的tushare积分足够,可以下载股票、期货、指数、基金等金融数据,也可以下载宏观经济、财务报表、财务指标、公司基本信息等非交易数据。使用这个函数,您可以批量下载数据到本地,保存前会进行数据去重和清洗、确保不会重复保存,另外,使用多线程并行下载,提供下载进度条,特别适合一次性下载大量历史数据保存到本地,也适合定期运行,定期补充增量数据,例如每月或每周补充下载本月或本周的所有数据。

import qteasy as qt# 下载股票数据 (从2023年1月1日到2023年12月31日之间的所有股票数据)
qt.refill_data_source(tables='stock_daily', start_date='20230101', end_date='20231231')Filling data source file://csv@qt_root/data/ ...
[########################################]9/9-100.0%  <trade_calendar:SSE-XHKG>74804wrtn in ~9't
[########################################]7/7-100.0%  <stock_basic:SH-BJ>10365wrtn in ~1't
[########################################]272/272-100.0%  <stock_daily:20230101-20231231>959278623wrtn in ~2H

qteasy中,所有数据都保存在特定的数据表中,而且每一种数据都有其唯一的数据ID,例如’pe’表示市盈率,open表示开盘价,等等;通过数据ID,用户可以在qteasy中随时获取所需的数据——只要数据已经下载到本地。

同时,数据ID也是qteasy中交易策略的核心,用户可以通过数据ID在交易策略中"订阅"所需要的数据类型,并根据这些数据生成交易信号(关于交易信号和交易策略,请参见教程第四章)。

根据您的网络环境和数据量大小,下载数据的时间可能会有所不同,下载完成后,2023年内的所有股票数据就可以直接获取了。

要获取历史数据,可以使用get_history_data函数,在参数中指定数据类型、股票代码、开始日期和结束日期,
下面的代码可以获取2023年1月1日到3月1日的股票000001.SZ的开盘价、最高价、最低价、收盘价、成交量、成交额等数据:

import qteasy as qt
qt.get_history_data('open, high, low, close, vol', shares='000001.SZ', start='20230101', end='20230301'){'000001.SZ':              open   high    low  close         vol
2023-01-04  13.71  14.42  13.63  14.32  2189682.53
2023-01-05  14.40  14.74  14.37  14.48  1665425.18
2023-01-06  14.50  14.72  14.48  14.62  1195744.71
...
2023-02-27  13.75  13.88  13.68  13.69   621461.93
2023-02-28  13.75  13.85  13.61  13.78   607935.92
2023-03-01  13.80  14.19  13.74  14.17  1223451.78}

至此,如果您看到上面的数据,表明qteasy的安装和初始化工作已经完成,您已经可以开始使用qteasy了。

在下一章节中,我们将会介绍qteasy的基本数据类型,以及如何使用qteasy来获取并管理金融数据。

关于qteasy的更多介绍,请参见qteasy文档

相关文章:

【python量化交易】qteasy使用教程01 - 安装方法及初始化配置

qteasy教程1 - 安装方法及初始化配置 qteasy教程1 - 安装方法及初始配置qteasy安装前的准备工作1&#xff0c; 创建安装环境2&#xff0c;安装MySQL数据库 (可选)安装pymysql 3&#xff0c;创建tushare账号并获取API token (可选)4&#xff0c;安装TA-lib (可选)WindowsMac OSL…...

UML 2.5图形库

UML 2.5图形库 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址drawon.cn或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了云端存储&#…...

分享springboot框架的一个开源的本地开发部署教程(若依开源项目开发部署过程分享持续更新二开宝藏项目PostgresSQL数据库版)

1首先介绍下若依项目&#xff1a; 若依是一个基于Spring Boot和Spring Cloud技术栈开发的多租户权限管理系统。该开源项目提供了一套完整的权限管理解决方案&#xff0c;包括用户管理、角色管理、菜单管理、部门管理、岗位管理等功能。 若依项目采用前后端分离的架构&#xf…...

打卡今天学习 Linux

过年了&#xff0c;祝大家过年快乐 在今天的学习中&#xff0c;我们涉及了一些关键的 Linux 系统管理知识点&#xff0c;包括 systemctl、IP 地址配置、域名解析、映射的创建、软链接等。让我们简要回顾一下这些主题。 1. systemctl systemctl 是一个强大的 Linux 系统管理工…...

单片机精进之路-3流水灯

P1代表单片机的P1口的8个io的寄存器&#xff0c;使用_crol_函数&#xff1a;将 k进行1位左位移&#xff0c;并将值以unsigned char类型返回&#xff0c;再将K的值赋给P1&#xff0c;这样就点亮了P1口对应的IO为低电平的led灯。 //flow light and beep #include <reg51.h>…...

c# File.WriteAllLines 和 File.WriteAllText

File.WriteAllLines 和 File.WriteAllText 都是 C# 中用于写入文本文件的方法&#xff0c;但它们有一些区别。 1. File.WriteAllLines 方法&#xff1a; File.WriteAllLines 方法用于将字符串数组的内容按行写入文本文件。每个数组元素都被写入文件的一行&#xff0c;且方法会…...

linux系统定时任务管理

crontab使用 一、crontab简介 crontab 这个指令所设置的工作将会循环的一直进行下去&#xff01;可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外&#xff0c;亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服…...

mysql的慢sql优化

为什么要优化慢sql &#xff1f; 慢sql会长时间占用 数据库连接数&#xff0c;如果项目中有大量的慢sql&#xff0c;那么可用的数据库连接数就会变少&#xff0c;进而会影响业务。 慢sql优化 优化慢sql&#xff0c;最常见的就是添加索引。查询语句中不要使用select *尽量减少…...

排序算法---插入排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 插入排序是一种简单直观的排序算法&#xff0c;它的基本思想是将待排序的元素分为已排序和未排序两部分&#xff0c;每次从未排序部分中选择一个元素插入到已排序部分的合适位置&#xff0c;直到所有元素都插入到已排序部分…...

迷你世界勒索病毒,你的文件被删了吗?

前言 笔者在某恶意软件沙箱平台分析样本的时候&#xff0c;发现了一款比较有意思的勒索病毒MiniWorld迷你世界勒索病毒&#xff0c;它的解密界面与此前的WannaCry勒索病毒的界面相似&#xff0c;应该是作者仿冒的WannaCry的UI&#xff0c;如下所示&#xff1a; 这款勒索病毒既…...

QT styleSheet——控件设置样式表

QT开发中&#xff0c;需要设置多种多样的控件表现形式&#xff0c;QT实现的styleSheet能够满足多种多样的场景&#xff0c;这里简单的记录下一些我常用的 设置透明背景&#xff0c;鼠标悬浮时&#xff0c;设置背景色&#xff1a; pushButton->setStyleSheet("QPushBu…...

Linux学习

1 Linux的目录结构介绍 bin存放常用的命令etc存放配置文件bootlinux启动的文件home存放用户lib存放动态库&#xff0c;给应用程序使用lostfound一般是空的&#xff0c;但系统异常关机会产生文件media自动挂载&#xff0c;如u盘&#xff0c;光盘mnt手动挂载&#xff0c;一般自己…...

MFC研发自验用例编写应注意哪些关键测试点

MFC&#xff08;Microsoft Foundation Classes&#xff09;是一个用于开发Windows应用程序的C类库。在MFC应用程序的研发过程中&#xff0c;自验用例&#xff08;自我验证测试用例&#xff09;的编写是非常重要的一环&#xff0c;它有助于确保代码的质量、稳定性和功能正确性。…...

ChatGPT升级版本GPT-4V(ision)支持多模态语音和图像

ChatGPT升级指南&#xff1a;迎接GPT-4V(ision)的全新多模态时代 ChatGPT最新升级引入了GPT-4V(ision)&#xff0c;这是一个突破性的多模态版本&#xff0c;支持语音和图像输入。现在&#xff0c;用户可以与ChatGPT进行更加丰富和互动的对话。以下是您升级到GPT-4V(ision)所需…...

机器人搬砖 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 机器人搬砖&#xff0c;一共有N堆砖存放在N个不同的仓库中&#xff0c;第 i 堆中有 bricks[i] 块砖头&#xff0c;要求在8小时内搬完。 机器人每小时能搬砖的数量…...

10分钟快速入门正则表达式

在力扣上看了一本付费书籍&#xff0c;终于让我入门了正则表达事... 问题&#xff1a; "^1[3-9]\\d{9}$" 是啥意思 读完本篇小笔记&#xff0c;你就知道&#xff0c;啥是"^1[3-9]\\d{9}$" 这个是啥意思了。 首先&#xff0c;正则表达式&#xff0c;这个名…...

【C++】C++的简要介绍

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 什么是C2. C的发展史3. C的重要性3.1 语言的使用广泛度3.2 在工作领域3.3 在校招领域3.3.1 岗位需求3.3.2 笔试题 3.3.3 面试题 4. 如何学习C4.1 别人怎么学&#xff1f; 1. 什么是C C语言是结构化和模块化的语言&…...

Golang数据库编程详解 | 深入浅出Go语言原生数据库编程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 Golang学习专栏&#xff1a;https://blog.csdn.net/qq_35716689/category_12575301.html 前言 对数据库…...

《游戏引擎架构》 -- 学习2

声明&#xff0c;定义&#xff0c;以及链接规范 翻译单元 声明与定义 链接规范 C/C 内存布局 可执行映像 程序堆栈 动态分配的堆 对象的内存布局 kilobyte 和 kibibyte 流水线缓存以及优化 未完待续。。。...

#Js篇:js里面递归的理解

定义&#xff1a; 递归是一种编程技术&#xff0c;它是指一个函数在其定义内部调用自身的过程。 特点&#xff1a; 一个问题可以分解为更小的问题用同样的方法解决&#xff1b;分解后的子问题求解方式一样&#xff0c;不同的是数据规模变小&#xff1b;存在递归终止条件 作…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...