Python 算法交易实验87 QTV200日常推进-沪深300的交易量统计

news2024/11/15 17:02:37

说明

上一篇 讲到,就全市场的交易量来看,近3年也看不出很奇怪的地方;因此,交易量[支持度]不足而导致的策略失灵似乎也说不通。

为了进一步确认,我打算:

  • 1 获取沪深300成分股,只统计成分股的交易额变化
  • 2 获取上证指数的值,加入净买入的概念进行判断
  • 3 分析价格的日波动系数
  • 4 分析交易额的日波动系数

计算多个连续周期的变异系数(CV)可以帮助分析数据在不同时间段内的波动情况。假设你有一段时间序列数据,并希望按月、季度或其他周期计算CV。下面是步骤和一个简单的示例。

步骤

  1. 数据准备:确保你的数据按时间顺序排列,并包含日期或时间戳。

  2. 分割周期:根据需要,将数据按周期(如月、季度等)分割。

  3. 计算每个周期的平均值和标准差

  4. 计算每个周期的CV:对于每个周期,使用CV公式计算变异系数:

在这里插入图片描述

  1. 汇总结果:将每个周期的CV存储或汇总,进行进一步分析或可视化。

示例代码

假设我们有每日数据,并希望按月计算每月的CV。

import pandas as pd
import numpy as np

# 生成示例数据
np.random.seed(42)
date_range = pd.date_range(start='2024-01-01', periods=180, freq='D')
prices = np.random.normal(loc=100, scale=10, size=len(date_range))

# 创建 DataFrame
data = pd.DataFrame({
    'date': date_range,
    'price': prices
})

# 设置日期为索引
data.set_index('date', inplace=True)

# 按月分组
monthly_groups = data['price'].resample('M')

# 计算每月的均值和标准差,并计算CV
monthly_cv = monthly_groups.apply(lambda x: x.std() / x.mean())

# 打印每月的CV
print(monthly_cv)

解释

  1. resample('M'):将数据按月分组。
  2. apply(lambda x: x.std() / x.mean()):对每个分组数据计算CV。
  3. monthly_cv:存储每月的CV。

输出结果

这个代码将输出一个按月计算的CV时间序列,你可以进一步分析哪个月份波动更大,或者将结果可视化以更好地理解波动趋势。

进一步分析

你可以按不同的周期(如季度、年度等)来计算CV,并比较不同周期的波动性。此外,可以结合可视化工具(如Matplotlib或Seaborn)生成CV的变化趋势图,以便更直观地分析数据的波动情况。

变异系数函数

import numpy as np

def cov(data):
    """
    计算变异系数 (Coefficient of Variation, CV)
    
    参数:
    - data: 一个包含数值的列表或数组
    
    返回:
    - CV: 变异系数,标准差与均值的比值
    """
    data = np.array(data)
    mean = np.mean(data)
    std_dev = np.std(data)
    
    if mean == 0:
        raise ValueError("均值为零,无法计算变异系数。")
    
    cv = std_dev / mean
    return cv

# # 示例用法
# data = [10, 12, 23, 23, 16, 23, 21, 16]
# cv = cov(data)
# print(f"变异系数: {cv:.4f}")

内容

1 获取沪深300成分股,只统计成分股的交易额变化

这个接口不错。所以沪深300不仅不是300,而且还会变。

import akshare as ak

fund_portfolio_hold_em_df = ak.fund_portfolio_hold_em(symbol="510300", date="2024")
print(fund_portfolio_hold_em_df)

      序号    股票代码  股票名称  占净值比例       持股数        持仓市值              季度
0      1  600519  贵州茅台   5.12    739.18  1084666.95  20242季度股票投资明细
1      2  300750  宁德时代   2.66   3130.82   563641.81  20242季度股票投资明细
2      3  601318  中国平安   2.48  12707.17   525568.44  20242季度股票投资明细
3      4  600036  招商银行   2.36  14620.02   499858.43  20242季度股票投资明细
4      5  600900  长江电力   1.92  14087.40   407407.56  20242季度股票投资明细
..   ...     ...   ...    ...       ...         ...             ...
347  348  301559  中集环科   0.00      0.13        2.13  20241季度股票投资明细
348  349  601238  广汽集团    NaN   2413.84    21507.33  20241季度股票投资明细
349  350  600196  复星医药    NaN   1362.78    32079.90  20241季度股票投资明细
350  351  300124  汇川技术    NaN   2199.75   133524.61  20241季度股票投资明细
351  352  600362  江西铜业    NaN   1076.04    20261.89  20241季度股票投资明细

简单起见,我就用最新的沪深300权重股来筛选交易。

# 
# 获取成分股
import akshare as ak

fund_portfolio_hold_em_df = ak.fund_portfolio_hold_em(symbol="510300", date="2024")
print(fund_portfolio_hold_em_df)

from Basefuncs import *

codes = list(fund_portfolio_hold_em_df['股票代码'])
codes_str = jinja_gen_some_list_by_list(codes)


import cufflinks as cf
# from plotly.offline import iplot, init_notebook_mode
from plotly.offline import iplot, init_notebook_mode

chcfg = CHCfg(database='qtv200')
click_para = chcfg.dict()
chc = CHClient(**click_para)
chc._exe_sql('show tables')

daily_sql = f'''select data_dt, sum(amt) as total_amt 
from stock_trade 
where code in ({codes_str})
group by data_dt
order by data_dt 
'''

daily_data = chc._exe_sql(daily_sql)
daily_data_df = pd.DataFrame(daily_data, columns = ['dt','amt'])

daily_data_df.set_index('dt', inplace=True)
daily_data_df['amt_ww'] = daily_data_df['amt'] /1e8

daily_data_df['amt_ww'].iplot( kind='bar', xTitle='Date', yTitle='Amount', title='Amount Over Time')

以上取数并画图,clickhouse还是非常快,67ms。
在这里插入图片描述
乍一看,交易量有所缩小,但是也不好判别
在这里插入图片描述

2 获取上证指数的值,加入净买入的概念进行判断

我找到指数的数据接口了,之前其实没必要去下载全市场的股票数据。

import akshare as ak

index_stock_info_df = ak.index_stock_info()
# print(index_stock_info_df)

'''
 index_code display_name publish_date
0       000001         上证指数   1991-07-15
1       000002         A股指数   1992-02-21
2       000003         B股指数   1992-02-21
3       000004         工业指数   1993-05-03
4       000005         商业指数   1993-05-03
..         ...          ...          ...
718     399994   中证信息安全主题指数   2015-03-12
719     399995     中证基建工程指数   2015-03-12
720     399996     中证智能家居指数   2014-09-17
721     399997       中证白酒指数   2015-01-21
722     399998       中证煤炭指数   2015-02-13
'''

index_zh_a_hist_df = ak.index_zh_a_hist(symbol="000001", period="daily", start_date="19700101", end_date="22220101")
# print(index_zh_a_hist_df)

index_zh_a_hist_df['last_close'] = index_zh_a_hist_df['收盘'].shift(-1)
index_zh_a_hist_df['close'] = index_zh_a_hist_df['收盘']

index_zh_a_hist_df['raise_pct'] = (index_zh_a_hist_df['close'] - index_zh_a_hist_df['last_close'])/index_zh_a_hist_df['last_close']
index_zh_a_hist_df['net_amount'] = index_zh_a_hist_df['成交额'] * index_zh_a_hist_df['raise_pct']
index_zh_a_hist_df.set_index('日期', inplace=True)

import cufflinks as cf
# from plotly.offline import iplot, init_notebook_mode
from plotly.offline import iplot, init_notebook_mode

# 初始化cufflinks
cf.go_offline()
# init_notebook_mode()  

index_zh_a_hist_df['net_amount'].iplot()

加权之后算出来是这样的
在这里插入图片描述
近几年是这样的,
在这里插入图片描述

前几年是这样的
在这里插入图片描述
再早几年是这样的

在这里插入图片描述

这样我想起了变异系数的解释:

在这里插入图片描述

在这里插入图片描述

3 分析价格的日波动系数、分析交易额的日波动系数

使用AKShare 公募基金数据的东财历史数据

import akshare as ak

fund_etf_hist_em_df = ak.fund_etf_hist_em(symbol="510300", period="daily", start_date="20000101", end_date="20990201", adjust="")
print(fund_etf_hist_em_df)
     日期     开盘     收盘     最高     最低       成交量           成交额    振幅   涨跌幅    涨跌额   换手率
0     2012-05-28  2.551  2.604  2.607  2.544  12775188  3.285755e+09  2.45  1.17  0.030  1.50
1     2012-05-29  2.602  2.644  2.661  2.602   7149490  1.875593e+09  2.27  1.54  0.040  0.84
2     2012-05-30  2.642  2.636  2.647  2.633   2658872  7.017258e+08  0.53 -0.30 -0.008  0.31

将日期提取yymon,然后用收盘价作为价格,成交和作为成交量,计算变异系数

fund_etf_hist_em_df['yymon'] = fund_etf_hist_em_df['日期'].apply(lambda x: x[:7])
fund_etf_hist_em_df['price'] = fund_etf_hist_em_df['收盘']
fund_etf_hist_em_df['amt'] = fund_etf_hist_em_df['成交额']

# 按月计算变异系数
price_cov = fund_etf_hist_em_df.groupby('yymon')['price'].apply(cov)

从整体看,价格的变异系数竟然小了。
在这里插入图片描述

近期的变化倒是小乐,但是还没有想的很明白。

在这里插入图片描述
交易量的变异系数
在这里插入图片描述

近几年的,反正没看出啥。
在这里插入图片描述
回头倒是可以根据「序列突变点」推断看看。同样也是图形看不出个啥,但能发现分布的变化。或者用正态分布拟合看看。

按月的,看不出啥
在这里插入图片描述

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

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

相关文章

RDD、DataFrame、DataSet(Spark)

RDD、DataFrame、DataSet RDD (弹性分布式数据集): 版本: Spark的初始版本,1.0开始提供。特性: RDD是Spark的基础数据结构,表示一个不可变的分布式对象集合。可以通过转换操作(如map、filter、flatMap)和行动操作&…

outlook设置规则后,规则无法自动运行的解决方案

outlook设置规则后,规则无法自动运行的解决方案 问题描述解决方案说明 问题描述 在outlook设置规则对邮件进行文件夹移动时,有时会出现规则无法自动运行的情况。出现这种情况有很多原因和解决方案,本文列出其中一种。 解决方案 outlook版本…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)1.9-1.10

目录 第四门课 卷积神经网络(Convolutional Neural Networks)第一周 卷积神经网络(Foundations of Convolutional Neural Networks)1.9 池化层(Pooling layers)1.10 卷 积 神 经 网 络 示 例 ( …

JDBC的介绍

一 JDBC的简介 1.1 ODBC的出现 早期的数据库应用程序开发,因为没有通用的针对与数据库的编程接口,所以,开发人员需要学习相关数据库的API,才可以进行应用程序,这样增加了学习成本和开发周期。因此整个开发市场一直在呼…

QT creator堆栈窗体demo

创建项目选择QDialog,不要选QMainWindow #ifndef DIALOGSTACK_H #define DIALOGSTACK_H#include <QDialog> #include <QListWidget>//列表框 #include <QStackedWidget>//堆栈窗体 #include <QLabel>QT_BEGIN_NAMESPACE namespace Ui { class DialogSt…

集成电路学习:什么是NOR Flash Memory非易失性闪存存储器

一、NOR Flash Memory&#xff1a;非易失性闪存存储器 NOR Flash Memory&#xff0c;即非易失性闪存存储器的一种&#xff0c;是Flash存储器的一个重要分支。Flash存储器&#xff0c;又称为闪存&#xff0c;结合了ROM&#xff08;只读存储器&#xff09;和RAM&#xff08;随机存…

力扣面试150 分隔链表 模拟

Problem: 86. 分隔链表 &#x1f468;‍&#x1f3eb; 参考题解 Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNo…

SQL - SQL优化

在sql查询中为了提高查询效率&#xff0c;我们常常会采取一些措施对查询语句进行sql优化&#xff0c;下面总结的一些方法&#xff0c;有需要的可以参考参考 一、查询SQL尽量不要使用select *&#xff0c;而是具体字段 // 建议 SELECT id,user_name,age,tel FROM user// 不建议…

UEFI BIOS之SMBIOS

SMBIO spec: SMBIOS Specification (dmtf.org) https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.5.0.pdf SMBIOS SMBIOS&#xff08;System Management BIOS&#xff09;是一种标准化的系统信息数据结构&#xff0c;旨在提供有关计算机硬件配置、…

Java SPI机制源码

文章目录 SPI简介使用案例SPI的应用SPI机制源码SPI与类加载器双亲委派机制 SPI简介 Java的SPI&#xff08;Service Provider Interface&#xff09;机制允许第三方为应用程序提供插件式的扩展&#xff0c;而不需要修改应用程序本身的代码&#xff0c;从而实现了解耦。Java标准库…

HUAWEI华为MateBook B5-420 i5 集显(KLCZ-WXX9,KLCZ-WDH9)原装出厂Windows10系统文件下载

适用型号&#xff1a;KLCZ-WXX9、KLCZ-WDH9 链接&#xff1a;https://pan.baidu.com/s/12xnaLtcPjZoyfCcJUHynVQ?pwdelul 提取码&#xff1a;elul 华为原装系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、华为浏览器、Office办公软件、华为…

[数据集][目标检测]石油泄漏检测数据集VOC+YOLO格式6633张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6633 标注数量(xml文件个数)&#xff1a;6633 标注数量(txt文件个数)&#xff1a;6633 标注…

网络安全硬件

传统防火墙 传统防火墙 技术&#xff1a;访问控制、代理技术、会话机制 工作层次&#xff1a;应用层一下 防御模式&#xff1a;通过防御设备划分边界&#xff0c;基于IP/端口和特征进行判断&#xff1b;以隔离为基础&#xff0c;基于信任原则构建安全框架&#xff1b;以防护为…

【Rust】007-包管理与模块管理

【Rust】007-包管理与模块管理 文章目录 【Rust】007-包管理与模块管理一、包管理器&#xff1a;Cargo1、简介Cargo 官方文档仓库 2、项目初始化3、写一个小程序任务目标寻找合适的库添加库到我们的项目中代码实现cargo run运行 二、模块管理1、概述2、文件作为模块第一步&…

可靠性定义

一、广义可靠性 包含以下三个方面 1、可靠性&#xff08;Reliability&#xff09; 定义&#xff1a;产品、系统或组件在预定条件下和规定时间内&#xff0c;完成既定功能的能力。 平均故障间隔时间&#xff08;Mean Time Between Failures, MTBF&#xff09;&#xff1a; …

每天五分钟深度学习:广播机制(以python语言为例)

本文重点 因为向量化的计算方式导致效率的提升,所以现在很多时候,我们都是用向量化的计算,但是向量化计算有一个问题让人头痛就是维度的问题,本节课程我们将讲解python中的广播机制,你会发现这个机制的优秀之处。 代码实例 import numpy as np a=np.random.randn(3,4) …

使用 Milvus 和 Streamlit 搭建多模态产品推荐系统

我们可以使用 Milvus 搭建多模态 RAG 应用&#xff0c;用于产品推荐系统。用户只需简单上传一张图片并输入文字描述&#xff0c;Google 的 MagicLens 多模态 Embedding 模型就会将图像和文本编码成一个多模态向量。然后&#xff0c;使用这个向量从 Milvus 向量数据库中找到最相…

负载均衡 Ribbon 与 Fegin 远程调用原理

文章目录 一、什么是负载均衡二、Ribbon 负载均衡2.1 Ribbon 使用2.2 Ribbon 实现原理 (★)2.3 Ribbon 负载均衡算法 三、Feign 远程调用3.1 Feign 简述3.2 Feign 的集成3.3 Feign 实现原理 (★) 一、什么是负载均衡 《服务治理&#xff1a;Nacos 注册中心》 末尾提到了负载均…

简单的Linux Ftp服务搭建

简单的Linux FTP服务搭建 1.需求 公司有一个esb文件传输代理&#xff0c;其中我们程序有文件传输功能&#xff0c;需要将本地文件传输到esb文件代理服务器上&#xff0c;传输成功之后发送http请求&#xff0c;告知esb将固定文件进行传输到对应外围其他服务的文件目录中&#…

【高阶数据结构】秘法(二)——图(一):图的基本概念和存储结构

前言&#xff1a; 今天我们要讲解的是数据结构中图的部分&#xff0c;这部分在我们实际生活中也是经常会碰到的&#xff0c;同时这部分也是数据结构中比较有难度的部分&#xff0c;这部分内容我会把它分为多章来进行讲解&#xff0c;今天我们先来讲解一下图的基本概念和存储结构…