量化交易系统开发-实时行情自动化交易-3.4.3.4.期货衍生数据

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。

接下来聊聊基于期货API获取衍生数据。

衍生数据(Derived Data)是通过对原始市场数据进行计算和处理得出的数据,例如技术指标、资金流向、波动率等。这些数据有助于深入了解市场的动态、预测价格走向,并构建和优化交易策略。以下是通过 Python 编写的代码示例,利用期货公开 API(如和讯网、上海期货交易所等)获取并计算期货市场的衍生数据的详细开发内容。

1. 获取原始数据并计算技术指标

技术指标是常用的衍生数据之一,例如移动平均线(MA)、相对强弱指数(RSI)、布林带(Bollinger Bands)等。以下示例展示了如何通过和讯 API 获取 K 线数据并计算移动平均线和 RSI。

import requests
import pandas as pd
import numpy as npdef get_hexun_futures_klines(futures_code, limit=100):"""获取和讯期货的 K 线数据。:param futures_code: 期货代码,例如 'AU0' 表示沪金连续合约:param limit: 获取的 K 线数据数量:return: K 线数据的 pandas DataFrame"""url = f"https://api.hexun.com/futures/kline"params = {"code": futures_code,"type": "day",  # 'day' 表示日 K 线,可以修改为 'week' 或 'month'"count": limit}response = requests.get(url, params=params)if response.status_code == 200:data = response.json()kline_data = data.get("data", {}).get("klines", [])kline_list = [kline.split(",") for kline in kline_data]df = pd.DataFrame(kline_list, columns=["日期", "开盘价", "最高价", "最低价", "收盘价", "成交量"])df = df.astype({"开盘价": 'float', "最高价": 'float', "最低价": 'float', "收盘价": 'float', "成交量": 'int'})return dfelse:raise Exception(f"Error fetching K line data: {response.status_code}")# 获取沪金连续合约(AU0)的 K 线数据
df_klines = get_hexun_futures_klines("AU0")# 计算移动平均线(MA)
df_klines["MA_5"] = df_klines["收盘价"].rolling(window=5).mean()
df_klines["MA_10"] = df_klines["收盘价"].rolling(window=10).mean()# 计算相对强弱指数(RSI)
def calculate_rsi(data, window=14):delta = data.diff(1)gain = np.where(delta > 0, delta, 0)loss = np.where(delta < 0, -delta, 0)avg_gain = pd.Series(gain).rolling(window=window).mean()avg_loss = pd.Series(loss).rolling(window=window).mean()rs = avg_gain / avg_lossrsi = 100 - (100 / (1 + rs))return rsidf_klines["RSI_14"] = calculate_rsi(df_klines["收盘价"])
print(df_klines)

在该示例中,我们通过调用和讯的 API 获取了指定期货合约的 K 线数据,并计算了 5 日和 10 日的移动平均线(MA)以及 14 日的相对强弱指数(RSI)。这些技术指标可以帮助识别市场的超买或超卖状态以及价格趋势。

2. 资金流向的计算

资金流向是衡量市场中资金流入和流出的重要指标,通过分析大单买入和卖出来评估市场中的资金动向。以下是通过和讯 API 获取逐笔交易数据并计算资金流向的示例。

def get_hexun_futures_trades(futures_code, limit=100):"""获取和讯期货的逐笔交易数据。:param futures_code: 期货代码,例如 'AU0':param limit: 获取交易数据的数量:return: 交易数据的 pandas DataFrame"""url = f"https://api.hexun.com/futures/trades"params = {"code": futures_code,"count": limit}response = requests.get(url, params=params)if response.status_code == 200:data = response.json()trades_data = data.get("data", {}).get("trades", [])trades_list = [trade.split(",") for trade in trades_data]df = pd.DataFrame(trades_list, columns=["时间", "价格", "数量", "买卖方向"])df = df.astype({"价格": 'float', "数量": 'int'})return dfelse:raise Exception(f"Error fetching trade data: {response.status_code}")# 获取沪金连续合约(AU0)的逐笔交易数据
df_trades = get_hexun_futures_trades("AU0")# 计算资金流向
df_trades["资金流向"] = df_trades.apply(lambda row: row["价格"] * row["数量"] if row["买卖方向"] == '买' else -row["价格"] * row["数量"], axis=1)
print(df_trades)

在该示例中,通过和讯的 API 获取了期货的逐笔交易数据,并通过买卖方向计算出资金流向。资金流向为正表示资金流入,负值表示资金流出。

3. 波动率的计算

波动率是衡量市场价格波动剧烈程度的重要指标。以下代码展示了如何通过获取期货的 K 线数据计算其历史波动率。

# 计算历史波动率
def calculate_historical_volatility(data, window=20):"""计算期货的历史波动率。:param data: 期货收盘价数据:param window: 波动率计算的窗口期:return: 历史波动率"""log_returns = np.log(data / data.shift(1))volatility = log_returns.rolling(window=window).std() * np.sqrt(252)  # 年化波动率return volatility# 计算沪金连续合约的 20 日历史波动率
df_klines["Volatility_20"] = calculate_historical_volatility(df_klines["收盘价"])
print(df_klines[["日期", "收盘价", "Volatility_20"]])

在此示例中,通过计算期货收盘价的对数收益率并在滚动窗口上计算标准差,得到期货的历史波动率。这可以帮助交易者理解价格波动的剧烈程度,评估潜在风险。

4. 数据存储与管理
  • 内存缓存:对于实时性的衍生数据,可以使用 Redis 等内存数据库进行缓存,以便于快速访问。

  • 持久化存储:对于历史技术指标、资金流向等衍生数据,可以将其存储到 MySQL 或 InfluxDB 中,以方便后续分析和策略回测。

    import mysql.connectordef save_derived_data_to_mysql(df, futures_code, table_name):"""将衍生数据保存到 MySQL 数据库中。:param df: 衍生数据 DataFrame:param futures_code: 期货代码:param table_name: 数据表名称"""connection = mysql.connector.connect(host="localhost",user="root",password="password",database="futures_data")cursor = connection.cursor()create_table_query = f"""CREATE TABLE IF NOT EXISTS {table_name}_{futures_code} (日期 VARCHAR(20),收盘价 FLOAT,MA_5 FLOAT,MA_10 FLOAT,RSI_14 FLOAT,Volatility_20 FLOAT)"""cursor.execute(create_table_query)for _, row in df.iterrows():insert_query = f"""INSERT INTO {table_name}_{futures_code} (日期, 收盘价, MA_5, MA_10, RSI_14, Volatility_20)VALUES ('{row['日期']}', {row['收盘价']}, {row['MA_5']}, {row['MA_10']}, {row['RSI_14']}, {row['Volatility_20']})"""cursor.execute(insert_query)connection.commit()cursor.close()connection.close()# 将衍生数据保存到 MySQL 数据库
    save_derived_data_to_mysql(df_klines, "AU0", "derived_data")

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

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

相关文章

CUDA HOME does not exist, unable to compile CUDA op(s),已解决

有一个服务器上没有/usr/loacl/cuda&#xff0c;我也没有权限在这个目录装cuda&#xff0c;使用pip装完torch&#xff0c;llama factory使用时出现&#xff1a; 应该是本地没有nvcc相关执行文件。 先使用了&#xff1a; conda install -c cudatoolkit-dev不管用&#xff0c; …

杰发科技AC7801——ADC定时器触发的简单使用

使用场景 在需要多次采样结果的情况下&#xff0c;比如1s需要10w次的采样结果&#xff0c;可以考虑使用定时器触发采样&#xff0c;定时器设置多少的时间就会多久采样转换一次。 再加上使用dma&#xff0c;采样的结果直接放在dma的数组里面。 实现了自动采样&#xff0c;自动…

【有啥问啥】基于文本的图像检索(Text-Based Image Retrieval, TBIR)技术详解

基于文本的图像检索&#xff08;Text-Based Image Retrieval, TBIR&#xff09;技术详解 1. 背景理论知识 1.1 什么是基于文本的图像检索&#xff08;TBIR&#xff09;&#xff1f; 基于文本的图像检索&#xff08;Text-Based Image Retrieval&#xff0c;简称TBIR&#xff…

探索PyMuPDF:Python中的强大PDF处理库

文章目录 **探索PyMuPDF&#xff1a;Python中的强大PDF处理库**第一部分&#xff1a;背景第二部分&#xff1a;PyMuPDF是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;至少5个简单的库函数使用方法第五部分&#xff1a;结合至少3个场景…

HarmonyOS Next 关于页面渲染的性能优化方案

HarmonyOS Next 关于页面渲染的性能优化方案 HarmonyOS Next 应用开发中&#xff0c;用户的使用体验至关重要。其中用户启动APP到呈现页面主要包含三个步骤&#xff1a; 框架初始化页面加载布局渲染 从页面加载到布局渲染中&#xff0c;主要包含了6个环节&#xff1a; 执行页…

已解决centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方案

出现cannot find a valid baseurl for repo:base/7/x86_64错误通常是由于YUM仓库源无法找到或无法访问&#xff0c;导致YUM无法正常工作。这种情况常见于CentOS 7系统。解决这个问题需要检查几个方面&#xff0c;如网络连接、DNS设置和YUM仓库源配置。 &#x1f9d1; 博主简介&…

架构图解析:如何构建高效的微服务系统

在当今的数字化浪潮中&#xff0c;构建高效、灵活且可扩展的系统已成为企业的重要目标。微服务架构作为一种先进的软件设计模式&#xff0c;通过将复杂的应用程序分解为一系列小型、独立的服务&#xff0c;显著提升了系统的灵活性、可扩展性和维护性。本文将通过解析微服务系统…

Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪

这里写目录标题 1.目标检测 Detection2.实例分割 segment3.图像分类 classify4.关键点估计 Keypoint detection5.视频帧检测 video detect6.视频帧分类 video classify7.旋转目标检测 obb detect8.替换yolo11模型 给我点个赞吧&#xff0c;谢谢了附录coco80类名称 笔记本 华为m…

恒利联创携手Pearson VUE 亮相第62届高博会

2024年11月15日-17日&#xff0c;第62届中国高等教育博览会&#xff08;简称“高博会”&#xff09;在重庆举行&#xff0c;恒利联创携手全球领先的考试服务提供商Pearson Vue Certiport共同亮相&#xff0c;为中国院校展现并提供数字化职业技能的教育平台及学练考体系。 作为P…

linux复习2:简单命令简述

cp 复制单个文件 cp file.txt /path/to/destination/ 将 file.txt 复制到指定的目标目录。 复制多个文件 cp file1.txt file2.txt /path/to/destination/ 将 file1.txt 和 file2.txt 复制到指定的目标目录。 复制目录&#xff08;递归复制&#xff09; cp -r /path/to/source…

【逆向篇】抓取微信小程序源码 (附加逆向工具wxappUnpacker和使用方法)

抓取微信小程序源码附加逆向工具wxappUnpacker 文章目录前言一、工具准备1 解密工具2 逆向工具 二、解密小程序1.确认小程序包位置2.打开一个小程序3.解密小程序包 三、逆向小程序1、检查nodejs2、安装依赖3、正式逆向 该文章只是学习作用&#xff0c;如果侵权请联系删除&…

【C++】拷贝构造

一种特殊的构造函数&#xff0c;用自身这种类型来构造自身 Student stu1; Student stu2stu1;//调用拷贝构造如果类中没有自定义拷贝构造&#xff0c;类中会自动提供一个默认拷贝构造如果类中定义了自定义拷贝构造&#xff0c;类中不会提供默认拷贝构造 自定义拷贝构造 类名(…

C++的IO流

目录 1. C语言的输入与输出 2. 流是什么 3. CIO流 3.1 C标准IO流 3.2 C文件IO流 4 stringstream的简单介绍 1. 将数值类型数据格式化为字符串 2. 字符串拼接 3. 序列化和反序列化结构数据 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。…

青训营刷题笔记11

水一个简单题&#xff1a; 问题描述 小C定义了一个“完美偶数”。一个正整数 xx 被认为是完美偶数需要满足以下两个条件&#xff1a; xx 是偶数&#xff1b;xx 的值在区间 [l,r][l,r] 之间。 现在&#xff0c;小C有一个长度为 nn 的数组 aa&#xff0c;她想知道在这个数组中…

游戏+AI的发展历程,AI技术在游戏行业的应用有哪些?

人工智能&#xff08;AI&#xff09;与游戏的结合&#xff0c;不仅是技术进步的体现&#xff0c;更是人类智慧的延伸。从最初的简单规则到如今的复杂决策系统&#xff0c;AI在游戏领域的发展历史可谓波澜壮阔。 早在2001年&#xff0c;就有研究指出游戏人工智能领域&#xff0…

Vue.js 插槽 Slots 实际应用 最近重构项目的时候遇到的...

前端开发中 插槽 Slots 是一个重要的概念 我们可以查看一下vue.js的官方文档 https://cn.vuejs.org/guide/components/slots 类似于连接通道一样 可以把核心代码逻辑搬到另外的地方 做一个引用 而原先的地方可能并不能这样书写 对于这个概念我在vue的官方文档里面找到了…

Windows11在WSL中安装QEMU-KVM

Windows11在WSL中安装QEMU-KVM 检查系统信息WSL检测安装所需软件端口转发 检查系统信息 打开设置-系统-系统信息&#xff08;拉到最下面&#xff09;&#xff0c;我的是 版本 Windows 11 专业版 版本号 24H2 安装日期 ‎2024/‎11/‎13 操作系统版本 26100.2314 体验 Windows …

【东莞石碣】戴尔R740服务器维修raid硬盘问题

1&#xff1a;石碣某塑料工厂下午报修一台戴尔R740服务器硬盘故障&#xff0c;催的还比较着急。 2&#xff1a;工程师经过跟用户确认故障的问题以及故障服务器型号和故障硬盘型号&#xff0c;产品和配件确认好后&#xff0c;公司仓库确认有该款硬盘现货&#xff0c;DELL 12T S…

SpringBoot学习笔记(一)

一、Spring Boot概述 &#xff08;一&#xff09;微服务概述 1、微服务 微服务&#xff08;英语&#xff1a;Microservices&#xff09;是一种软件架构风格&#xff0c;它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础&#xff0c;利用模块化的方式…

SD模型微调之LoRA

​ &#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&a…