七天打造一套量化交易系统:Day1-数据分类、获取、清洗与存储

news2024/9/20 21:55:39

七天打造一套量化交易系统:Day1-数据分类、获取、清洗与存储

数据是量化交易的基础,重要性不言而喻。无论是股票、期货、期权、基金、ETF等等,甚至包括比特币,这些投资标的历史行情数据都可以用作回测分析,本篇将分享如何选择可靠的数据源,如何进行数据获取,如何清洗常见的错误数据,如何进行有效地存储,方便后期使用。

本系列搭建的量化交易系统主要针对的投资标的是股票和期货,其他的投资标的后边有机会我们再进行分享。那么接下来的内容都是围绕这两个投资标的进行展开。

数据的分类

行情数据是量化中使用最多的数据,从价、量的变化中寻找规律,我们拿到的一般是交易所下发的切片数据,国内股票行情3秒1次,期货行情一般是1秒2次。对一段时间内的切片数据进行汇总形成k线图(开、高、低、收、成交量等),再加入一些算法就形成了各种技术指标(MA、MACD、BOLL、KDJ等)。

针对股票还需要关注的数据有:年报季报、龙虎榜单、资金流向等数据,这些数据可以用在后面的多因子选股模型中。

针对大宗商品期货需要关注的数据有:仓单数据、现货报价、席位持仓、席位盈亏,对龙虎榜单上的数据进行分析也很有意思,能够发现很多正向指标和反向指标。

数据的获取

获取这些数据,方式也很多,下面分享几个中常用的方式:

1、通达信接口

from mootdx.reader import Reader
# 读取通达信行历史情数据
# market: 参数 `std` 为标准市场(就是股票), `ext` 为扩展市场(期货,黄金等)
# tdxdir: 是通达信的数据目录, 根据自己的情况修改
reader = Reader.factory(market='std', tdxdir='D:/software/new_tdx')
# 读取日线数据
r = reader.daily(symbol='sh000001')
# 读取分钟数据
r = reader.minute(symbol='sh000001')

# 获取通达信中的实时行情
from mootdx.quotes import Quotes
# 标准市场
client = Quotes.factory(market='std', multithread=True, heartbeat=True, bestip=True, timeout=15)
# k 线数据
r = client.bars(symbol='000001', frequency=0, offset=10)

2、聚宽接口

上述代码用于获取股票的财务数据,字段的含义以及其他数据的获取方式可以参考聚宽的接口文档。

3、期货CTP接口

def OnRtnDepthMarketData(self, pDepthMarketData: 'CThostFtdcDepthMarketDataField') -> "void":
	log.info(api_struct_serialize(pDepthMarketData))

具体代码参考之前的文章 CTP-API开发系列之九:行情登录及订阅代码

4、爬虫脚本
如果部分数据没有标准的接口可以直接使用,就需要我们编写爬虫脚本,定时拉取。比如龙虎榜数据,可以从交易所官网、东方财富等网站拉取。

之前写过一篇爬虫的文章,可以参考一下。期货仓单数据获取

数据的清洗

对数据的清洗是一项细活,需要不断积累完善,一般需要多个数据源进行校准,保证数据的准确性,对空值、极大值的处理,时间序列对齐等等。

数据的存储

在我们的量化系统中,MarketDataEngine 行情管理引擎的作用就是,通过 ExchangeMarketDataListener 接收不同交易接口的行情 ,在onMarketData 函数中进行统一处理,并实时转发给所有需要用到的模块中(MarketDataReceivers)。同时,存储在内存中的行情数据也可以进行落地存储。

class MarketDataEngine
{
private:
	class ExchangeMarketDataListener : public MarketDataListener
	{
	private:
		Exchange* const exchange;
		MarketDataDispatcher* const dispatcher;

	public:
		ExchangeMarketDataListener(Exchange* ex, MarketDataDispatcher* disp)
			: exchange(ex), dispatcher(disp)
		{}

		void onMarketData(MarketData& data);
	};

	TradeEngine* const tradeEngine;
	const char* const tradeEngineHomeDir;

	std::unique_ptr<MarketDataDispatcher> dispatcher;
	std::set<std::shared_ptr<ExchangeMarketDataListener> > listeners;

	typedef std::set<std::shared_ptr<MarketDataReceiver> > MarketDataReceivers_t;
	MarketDataReceivers_t receivers;

	std::shared_ptr<MarketDataReceiver> createMarketDatareceiver(const char* exchangeID, const char* brokerID, const char* userID,
		const char* password, const std::vector<std::string>& uris, const char* path, const char* channel);

	void init();

public:
	MarketDataEngine(TradeEngine* te, const char* homeDir)
		: tradeEngine(te), tradeEngineHomeDir(homeDir)
	{
		init();
	}

	~MarketDataEngine()
	{
		receivers.clear();
	}
};

数据存储的目的是方便后期的使用,主要是用于回测、数据模型的训练。在后面的章节中,我们再继续使用这些数据。

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

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

相关文章

Python测试服务器连接的实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

2024最佳游戏引擎排行

游戏产业几十年来一直是一个大生意&#xff0c;而且发展势头迅猛。据估计&#xff0c;全球游戏市场在 2025 年每年将达到 5031.4 亿美元&#xff0c;2023 年为 3960 亿美元。 尽管如今有市面上有各种各样的解决方案&#xff0c;但游戏开发人员和管理者在选择适合他们需求的游戏…

【基于netty+zookeeper的rpc远程调用框架】首篇——缘起

&#x1f43c;作者简介&#xff1a;一名大三在校生&#x1f38b; 空有想法&#xff0c;没有实践 文章目录 第一章 概述缘起一、为什么要手写一个rpc项目二、什么是rpc三、rpc怎么使用四、rpc的通信流程 欢迎添加微信&#xff0c;加入我的核心小队&#xff0c;请备注来意 第一章…

NCRE1-2 管理和运营宽带城域网的关键技术

是记录&#xff0c;会有错误 网络管理 这个喜欢考选择题 带内网络管理 用传统的电信网络通过 D C N ( D a t a C o m m u n i c a t i o n N e t w o r k ) DCN(Data\ Communication\ Network) DCN(Data Communication Network)或 P S I N ( P u b l i c S w i t c h T e l …

Java特性与快速入门(JDK,JRE,JVM与hello world)

目录 1.Java重要特点 2.Java运行机制及运行过程 跨平台性 3.什么是JDK,JRE 4.JDK,JRE和JVM的包含关系 5.Java快速入门 输出 hello world&#xff01; 代码示例&#xff1a; 原理讲解&#xff1a; 练习 代码示例&#xff1a; 1.Java重要特点 2.Java运行机制及运行…

自定义Bean转换工具类

BeanConvertor工具类&#xff1a;简化Java对象转换的利器 在Java开发中,我们经常需要在不同的对象之间转换数据。这可能是因为我们需要将数据从一个层(如数据访问层)转移到另一个层(如服务层或表示层),或者是因为我们需要将外部API的数据结构转换为我们的内部数据结构。这种转…

LeetCode 739, 82, 106

文章目录 739. 每日温度题目链接标签思路代码 82. 删除排序链表中的重复元素 II题目链接标签思路代码 106. 从中序与后序遍历序列构造二叉树题目链接标签思路二叉树的三种遍历值与索引的映射对于后序遍历的使用对于中序遍历的使用 代码 739. 每日温度 题目链接 739. 每日温度…

完整创建一个vite前端项目

目录 1.先创建一个vite项目 2.下载第三方依赖 ① 安装路由vue-router ② 安装vuex全局数据管理 ③ 安装element-plus ④ 安装element-plus图标 ⑤ 安装axios发送请求 ⑥ 完整main.js代码模板 3.开发组件 4.登陆页面开发用例 5. 完整项目代码 废话少说&#xff0c;直接…

【C++】 string类的模拟实现

目录 一、我们先创建三个文件分别为 String.h&#xff08;声明&#xff09;、String.cpp&#xff08;定义&#xff09;、teat.cpp&#xff08;测试&#xff09; 二、成员函数 构造函数与析构函数 &#x1f31f;string() &#x1f31f;string(const char* str) &#x1f…

探索SideLlama:浏览器中的本地大型语言模型

在这个数字化时代&#xff0c;浏览器扩展程序已经成为我们日常网络体验中不可或缺的一部分。它们不仅为我们提供了便利&#xff0c;还为我们的浏览体验增添了更多的功能和乐趣。今天&#xff0c;我要介绍的是一个全新的Chrome浏览器扩展程序——SideLlama&#xff0c;它能够让你…

SOMEIPSRV_ONWIRE_03: 从请求中复制请求ID到响应消息

测试目的&#xff1a; 确保服务器在生成响应消息时将请求ID从请求消息复制到响应消息。 描述 本测试用例旨在验证DUT&#xff08;Device Under Test&#xff0c;被测试设备&#xff09;在处理SOME/IP请求和生成相应响应时&#xff0c;是否将请求消息中的请求ID正确复制到了响…

苹果相册里的视频删除了怎么恢复?只需3招,轻松拿捏

一个不小心手滑把苹果手机相册里的视频删除了怎么办&#xff1f;删除了是不是再也找不回来了&#xff1f;那些美好的回忆是不是也从此消散了&#xff1f;当然不是&#xff01;苹果手机相册里的视频删除了怎么恢复&#xff1f;小编这里有3个秘诀&#xff0c;可以让它重新出现在你…

中智讯与黄淮学院共建“嵌入式边缘计算创客工坊”正式签约

7月13日&#xff0c;中智讯(武汉)科技有限公司与黄淮学院共建“嵌入式边缘计算创客工坊”正式签约。出席签约仪式的有黄淮学院电子信息学院党委书记魏迎军同志、院长高有堂教授、副院长吴忠林教授、党委副书记从卫东同志及全体教职工&#xff0c;中智讯(武汉)科技有限公司技术副…

Jackson详解

文章目录 一、Jackson介绍二、基础序列化和反序列化1、快速入门2、序列化API3、反序列化API4、常用配置 三、常用注解1、JsonProperty2、JsonAlias3、JsonIgnore4、JsonIgnoreProperties5、JsonFormat6、JsonPropertyOrder 四、高级特性1、处理泛型1.1、反序列化List泛型1.2、反…

Nexus3 批量上传 jar 包、pom文件

Nexus3 Maven 私服搭建及各种使用 详见**Maven私服搭建及各种使用汇总2020** Maven 配置 Nexus 私服 在 Maven 项目中配置 Nexus 私服&#xff0c;需要在项目的 pom.xml 或 maven 的 settings.xml 文件中添加 Nexus 仓库的配置。 示例&#xff1a; 以下是一个项目的 pom.xml…

word 设置目录中英文字母大写改为小写

选中目录右击“字体”&#xff0c;设置“小型大写字母”。

【Django+Vue3 线上教育平台项目实战】Celery赋能:优化订单超时处理与自动化定时任务调度

文章目录 前言⭐✨&#x1f4ab;&#x1f525;&#x1f4d6;一、Celery⭐1.基本概念及介绍:✨2.使用步骤&#x1f4ab; 二、订单超时 取消订单&#xff08;Celery&#xff09;&#x1f525;具体实现流程&#x1f4d6; 前言⭐✨&#x1f4ab;&#x1f525;&#x1f4d6; 在构建复…

图解 Hadoop 架构 |Yarn、MapReduce

Hadoop Hadoop 是什么 Hadoop 是由 Apache 基金会所开发&#xff0c;维护的分布式系统基础架构主要解决海量数据的存储和海量数据的分析计算问题广义上来说&#xff0c;Hadoop 通常是指一个更广泛的概念——Hadoop 生态圈&#xff0c;包括 MapReduce&#xff0c;HDFS&#xf…

Python面试宝典第16题:跳跃游戏

题目 给你一个非负整数数组 nums &#xff0c;你最初位于数组的第一个下标 &#xff0c;数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true。否则&#xff0c;返回 false。 示例 1&#xff1a; 输…

Lowpoly Style Alpine Woodlands Environment(高山林地)

v1.1中的新增功能:添加了地形的额外网格。 使用此资产包构建您自己的山地或林地级别和景观!还包括一个demoscene。该包包含许多资产:植物、岩石、山脉、树木、建筑、营地和帐篷、墙壁、粒子效果等等。 性能:所有东西都共享一种材质和一种纹理,因此可以将所有东西分批在一起…