【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文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2775068.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

简单说网络:TCP+UDP

TCP和UPD: (1)都工作在传输层 (2)目的都是在程序之中传输数据 (3)数据可以是文本、视频或者图片(对TCP和UDP来说都是一堆二进制数没有太大区别) 一、区别:一个基于连接一个基于非连接 将人与人之间的通信比喻为进程和进程之前的通信:基本上有两种方式(1)写信;(2)打电话;这…

FPGA_ip_Rom

一 理论 Rom存储类ip核&#xff0c;Rom是只读存储器的简称&#xff0c;是一种只能读出事先存储数据的固态半导体存储器。 特性&#xff1a; 一旦储存资料&#xff0c;就无法再将之改变或者删除&#xff0c;且资料不会因为电源关闭而消失。 单端口Rom: 双端口rom: 二 Rom ip核…

问题:在下列选项中,下列哪种情况不属于生理排泄过程的是() #媒体#学习方法#经验分享

问题&#xff1a;在下列选项中&#xff0c;下列哪种情况不属于生理排泄过程的是&#xff08;&#xff09; A.CO2由呼吸系统排出 B.食物残渣由消化道排出 C.皮肤排出汗液 D.肾脏排出尿液 E.由消化道排出的胆色素 参考答案如图所示

BGP 双归不同运营商并且客户之间互为主备的部署实验

一、拓朴&#xff1a; 要求&#xff1a; 1、双方 ISP 均不得将客户 AS 做为穿越 AS 2、对于客户业务的出流量&#xff1a;客户 AS100 和 200 访问 ISP 时&#xff0c;AS100优选从 Line-1 线路&#xff0c;AS200 优选从 Line-2 访问&#xff0c;但当 Line-1 和 …

第三章 搜索与图论(二)(最短路)

一、最短路问题 1、对于稠密图&#xff0c;由于朴素版的dijkstra算法与边数无关使用这种算法的复杂度较低。稀疏图用堆优化版的算法&#xff1b;单源最短路中存在负权边用SPFA 算法通常较好&#xff1b;多源用floyd算法&#xff1b; 难点&#xff1a;如何建图&#xff0c;抽象…

spring boot学习第十二篇:mybatis框架中调用存储过程控制事务性

1、MySQL方面&#xff0c;已经准备好了存储过程&#xff0c;参考&#xff1a;MYSQL存储过程&#xff08;含入参、出参&#xff09;-CSDN博客 2、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"…

【Web】vulhub Shiro-550反序列化漏洞复现学习笔记

目录 Shiro简介 复现流程 工具一把梭 半脚本半手动 原理分析 反序列化入口 常见的key 登录过程 验证过程 利用原理 Shiro简介 Apache Shiro 是一个强大且易于使用的 Java 安全框架&#xff0c;用于身份验证、授权、加密和会话管理等安全功能。Shiro 的设计目标是简单…

猫头虎分享已解决Bug || Python Error: NameError: name ‘variable_name‘ is not defined

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

6个好看的wordpress模板

简站wordpress服务业通用主题 2023年立秋纪念版&#xff0c;简站wordpress服务行业通用主题&#xff0c;适合服务行业企业官网使用。 https://www.jianzhanpress.com/?p5393 小语种翻译wordpress主题 小语种国家外贸网站建设需要的wordpress主题模板&#xff0c;适合做小语…

Pinia介绍和使用

1. pinia是什么 Pinia 是一个基于 Vue.js 的状态管理库&#xff0c;用于管理应用程序的数据。它提供了一种简单、直观且可扩展的方式来组织和访问应用程序的状态&#xff0c;下面是详细介绍 基于 Vue 3&#xff1a;Pinia 是专门为 Vue 3 开发的状态管理库&#xff0c;充分利用…

【若依】若依框架在本地运行的操作方法,及踩坑记录

若依框架简介 若依是一个Gitee上一个开源的基于SpringBoot开发的轻量级Java快速开发框架&#xff0c;用以快速构建后台管理系统&#xff0c;点击跳转到官方地址 本机部署过程 Step1. 下载项目源码 我选择的是直接下载zip压缩包&#xff0c;解压后得到如下文件夹&#xff0c…

QLabel重绘实现圆角矩形图片/文本和图片同时显示

QLabel一般用于显示一段文字&#xff0c;这段文字可以被鼠标选中/复制&#xff0c;也可是设置自动换行等&#xff0c;还可以用于显示图片。 但是使用QLabel显示图片时&#xff0c;qss样式设置的圆角radius属性是不生效的。 QLabel显示纯文本时&#xff0c;设置了背景颜色后&a…

WifiConfigStore初始化读取-Android13

WifiConfigStore初始化读取 1、StoreData创建并注册2、WifiConfigStore读取2.1 文件读取流程2.2 时序图2.3 日志 1、StoreData创建并注册 packages/modules/Wifi/service/java/com/android/server/wifi/WifiConfigManager.java mWifiConfigStore.registerStoreData(mNetworkL…

pytorch入门第一天

今天作为入门pytorch的第一天。打算记录每天学习pytorch的一些理解和笔记&#xff0c;以用来后面回顾。当然如果能帮到和我一样的初学者&#xff0c;那也是不胜荣幸。作为一名初学者&#xff0c;难免有些地方会现错误&#xff0c;欢迎各位大佬指出 预备知识 这里主要介绍pyto…

面向对象的三大特征之一继承

继承 继承的特性 概念&#xff1a;可以使得子类具有父类的属性(成员变量)和方法(成员方法)&#xff0c;还可以在子类中重新定义&#xff0c;追加属性和方法。 继承的格式&#xff1a; public class 子类名 extends 父类名{} 父类&#xff1a;基类、超类 子类&#xff1a;派生…

React + SpringBoot + Minio实现文件的预览

思路&#xff1a;后端提供接口&#xff0c;从minio获取文件的预览链接&#xff0c;返回给前端&#xff0c;前端使用组件进行渲染展示 这里我从minio获取文件预览地址用到了一个最近刚开源的项目&#xff0c;挺好用的&#xff0c;大伙可以试试&#xff0c;用法也很简单 官网&am…

C语言笔试题之实现C库函数 pow()(递归的思想)

实例要求&#xff1a; 1、请你实现C库函数 pow()&#xff08;stdio.h & math.h&#xff09; &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即x^n &#xff09;&#xff1b;2、函数声明&#xff1a;double myPow(double x, int n)&#xff1b;参数&#xff1a;1、x …

C++进阶(十三)异常

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、C语言传统的处理错误的方式二、C异常概念三、异常的使用1、异常的抛出和捕获2、异常的重新…

leetcode707. 设计链表

leetcode707. 设计链表 题目 思路 1.使用虚头节点&#xff0c;模拟class的初始化 2.class中添加一个链表长度的属性&#xff0c;便于后续操作 代码 class ListNode:def __init__(self, val0, nextNone):self.val valself.next nextclass MyLinkedList:def __init__(self)…

创新指南|生成式AI实验 - 企业快速渐进采用人工智能的科学新方法

生成式人工智能&#xff08;Gen AI&#xff09;正迅速成为各行各业的企业创新焦点。 生成式AI实验对于企业创新而言至关重要&#xff0c;不仅可以帮助企业识别最适合和最有影响的应用场景&#xff0c;还能促进组织沿着生成式 AI 学习曲线前进&#xff0c;建立早期的创新领导者和…