量化交易学习1

news2024/12/23 7:20:14

一、股票数据基本分类

可分为(1)技术面数据和(2)基本面数据

(1)技术面数据

技术面数据是通过股票的历史价格和交易量等市场数据进行计算和分析得出的指标。常用的技术指标包括移动平均线、相对强弱指标、MACD指标等。技术面分析认为市场上已有的信息都会反映在股票价格中,因此通过分析股票价格图表和技术指标,可以尽可能准确地判断价格的走势和市场趋势。
在这里插入图片描述

(2)基本面数据

基本面数据是通过分析公司的财务状况、业绩表现、竞争力等基本信息得出的评估。常用的基本面指标包括市盈率、市净率、股息率等。基本面数据通常需要通过公司公开的财务报告和公告来获取。
。

二、股票基础数据获取

使用工具:Baostock,证券宝(www.baostock.com) 是一个免费、开源的证券数据平台,无需注册即可获取大量准确、完整的证券历史行情数据和上市公司财务数据。通过Python API获取数据信息,满足量化交易投资者、数量金融爱好者、计量经济从业者的数据需求。该工具包返回的数据格式为pandas DataFrame类型,方便使用pandas/NumPy/Matplotlib进行数据分析和可视化。此外,还支持将数据保存到本地进行分析,提供了更多的灵活性和便利性。
Baostock使用文档
接口:

query_history_k_data()

这个方法可以通过API接口获取A股的历史交易数据,你可以根据需要设置参数来获得日线、周线、月线以及5分钟、15分钟、30分钟和60分钟线的数据。这些数据可以结合均线数据进行选股和分析。返回的数据是pandas库中DataFrame类型的格式。数据范围从1990年12月19日至今,可以查询不复权、前复权或后复权数据。

(1)日线使用示例

import baostock as bs
import pandas as pd
from IPython.display import display

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

#### 获取沪深A股历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
# 
rs = bs.query_history_k_data_plus("sh.600000",
    "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
    start_date='2022-07-01', end_date='2022-12-31',
    frequency="d", adjustflag="3")
print('query_history_k_data_plus respond error_code:'+rs.error_code)
print('query_history_k_data_plus respond  error_msg:'+rs.error_msg)

#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)

#### 结果集输出到csv文件 ####   
result.to_csv("./history_A_stock_k_data.csv", index=False)
display(result)

#### 登出系统 ####
bs.logout()

在这里插入图片描述
具体步骤如下:

首先导入需要用到的 baostock 和 pandas 库。
使用 bs.login() 函数登录 Baostock 系统,并输出登录返回信息。该函数返回一个对象 lg,其中包含了登录返回的错误代码和错误信息。
使用 bs.query_history_k_data_plus() 函数查询指定股票在指定时间范围内的 K 线数据,其中第一个参数为要查询的股票代码,第二个参数为要查询的 K 线数据字段列表,第三个参数为开始日期,第四个参数为结束日期,第五个参数为查询频率,第六个参数为复权类型。该函数返回一个对象 rs,其中包含了查询返回的错误代码和错误信息以及查询结果集。
将查询结果集转换成 Pandas DataFrame 格式,并输出到 CSV 文件中。首先创建一个空列表 data_list,然后使用 rs.next() 循环获取查询结果集里的每一行数据,将每一行数据存入 data_list 列表中。最后使用 Pandas 的 DataFrame 函数将 data_list 转换成 DataFrame 格式并输出到 CSV 文件中。
最后使用 bs.logout() 函数退出 Baostock 系统。

(2)分钟线使用示例

分钟线指的是股票或其他交易品种的价格走势图,每根蜡烛图表示一定时间间隔内的开盘价、收盘价、最高价和最低价。例如,1分钟线表示每根蜡烛图代表1分钟的价格走势。分钟线对于交易者来说具有重要意义,可以帮助他们快速分析市场趋势和价格波动,做出更明智的交易决策。以下是通过调用

query_history_k_data_plus()

方法来对分钟线进行数据获取。

import baostock as bs
import pandas as pd
from IPython.display import display

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

#### 获取沪深A股历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
rs = bs.query_history_k_data_plus("sh.600000",
    "date,time,code,open,high,low,close,volume,amount,adjustflag",
    start_date='2022-07-01', end_date='2022-07-31',
    frequency="5", adjustflag="3")
print('query_history_k_data_plus respond error_code:'+rs.error_code)
print('query_history_k_data_plus respond  error_msg:'+rs.error_msg)

#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)

#### 结果集输出到csv文件 ####   
result.to_csv("./history_A_stock_k_data.csv", index=False)
display(result)

#### 登出系统 ####
bs.logout()

在这里插入图片描述
技术面参数解释

code:股票代码,这个参数用于指定查询的股票或指数代码,以及所在交易所。输入格式为 “交易所代码.股票代码” 或 “交易所代码.指数代码”。其中,交易所代码"sh"代表上海证券交易所,"sz"代表深圳证券交易所。如:sh.601398,此参数不可为空。

fields:这个参数用于指定返回数据中包含哪些指标,支持多指标输入,以半角逗号分隔,填写内容作为返回类型的列。详细指标列表见历史行情指标参数章节,日线与分钟线参数不同。此参数不可为空;

start:这个参数用于指定查询的起始日期,格式“YYYY-MM-DD”,如果不指定,则默认从2015-01-01开始查询。

end:这个参数用于指定查询的结束日期,格式为“YYYY-MM-DD”。如果不指定,则默认查询最近一个交易日的数据。

frequency:这个参数用于指定查询的数据类型。可以选择返回日线、周线、月线或分钟线的K线数据。其中,大写字母表示周期,如"D"代表日线,"W"代表周线,"M"代表月线,数字表示分钟线的周期,如"5"代表5分钟线,"15"代表15分钟线等。指数只支持日线数据。周线数据只能选择每周最后一个交易日查询,月线数据只能选择每月最后一个交易日查询。

adjustflag:这个参数用于指定查询数据是否需要进行复权处理。如果需要进行复权处理,则可以选择前复权或后复权。复权类型,默认不复权:3;1:后复权;2:前复权。已支持分钟线、日线、周线、月线前后复权。

注意

对于日线数据的处理方法。因为在停牌期间没有交易,因此开盘价、最高价、最低价和收盘价都与前一个交易日的收盘价相同,成交量和成交额为0,换手率为空。

如果想将换手率转换为浮点数类型,则可以使用列表推导式,并将空字符串转换为0,最终将结果存储在"dataframe"(名为result)中的"turn"列中: result[“turn”] = [0 if x == “” else float(x) for x in result[“turn”]]

返回数据说明
在这里插入图片描述
注意“前收盘价”说明

当股票在指定交易日发生除权除息时,其前收盘价的计算方法有所不同。一般而言,前收盘价是指前一个交易日的实际收盘价,但当股权登记日与分红现金数量、配送股数和配股价等因素相结合时,前收盘价需要根据一定的计算方法得出。具体来说,需要先计算除息价,然后再计算送红股后的除权价和配股后的除权价,最后得出除权除息价。这个除权除息价就是指定交易日的前收盘价。该价格由交易所计算并公布,而在首发日,则将首发价格作为前收盘价。

具体计算方法如下:

1、计算除息价: 除息价=股息登记日的收盘价-每股所分红利现金额

2、计算除权价: 送红股后的除权价=股权登记日的收盘价/(1+每股送红股数) 配股后的除权价=(股权登记日的收盘价+配股价*每股配股数)/(1+每股配股数)

3、计算除权除息价 :除权除息价=(股权登记日的收盘价-每股所分红利现金额+配股价*每股配股数)/(1+每股送红股数+每股配股数)

关于复权数据说明

复权数据是在股票交易中调整历史价格和成交量的数据,以考虑除权、除息等事件对价格和成交量的影响。复权数据的意义在于能够更准确地反映股票的实际表现,避免因为除权、除息等事件造成的误导性信息。通过使用复权数据,投资者可以更好地了解股票的历史价格走势和成交量变化,以做出更明智的投资决策。

BaoStock使用“涨跌幅复权法”对历史股价数据进行复权处理,以便更准确地计算资金收益率。该方法的优点是可以保证初始投入的资金运用率为100%,从而避免分红或配股对投资额的影响。

然而,不同的系统可能采用不同的复权方式,因此在比较不同系统提供的股票数据时,可能会发现存在差异。例如,同花顺、通达信等软件可能采用其他的复权方式,导致与BaoStock提供的数据不一致。

(3)上证50成分股获取

上证50成分股指的是上海证券交易所(Shanghai Stock Exchange)挑选出来的50家规模最大、流动性最好的公司,这些公司在中国A股市场中具有较高的影响力和代表性。上证50指数是由这些50家公司的股票组成的指数。这个指数通常被视为中国股市的核心指标之一,因为它覆盖了50家规模大、具有代表性的公司,在市场风险和涨跌幅方面具有重要的参考意义。此外,由于该指数的成分股通常由市值较大、经营稳定的公司组成,因此被认为是一种相对较为稳健的投资方式。

query_sz50_stocks()

:这个方法通过API接口获取上证50成分股的信息,更新频率为每周一更新。这个方法返回一个pandas的DataFrame类型,即一个二维表格数据结构,其中包含了上证50成分股的详细信息。下面将结合代码对该方法进行讲解:

import baostock as bs # 导入 baostock 库
import pandas as pd   # 导入 pandas 库
from IPython.display import display

# 登陆系统
lg = bs.login()  # 调用 login 方法进行登陆
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code) # 打印登陆返回错误码
print('login respond  error_msg:'+lg.error_msg)  # 打印登陆返回错误信息

# 获取上证50成分股
rs = bs.query_sz50_stocks()  # 调用 query_sz50_stocks 方法获取上证50成分股信息
print('query_sz50 error_code:'+rs.error_code)  # 打印方法返回错误码
print('query_sz50  error_msg:'+rs.error_msg)   # 打印方法返回错误信息

# 打印结果集
sz50_stocks = []   # 创建一个空列表,用于存储查询结果
while (rs.error_code == '0') & rs.next():
    # 如果查询没有出错且还有数据
    sz50_stocks.append(rs.get_row_data())   # 将获取到的数据添加到列表中
result = pd.DataFrame(sz50_stocks, columns=rs.fields)  # 使用 pandas 将数据转换为 DataFrame 格式
# 结果集输出到csv文件
result.to_csv("sz50_stocks.csv", encoding="gbk", index=False)  # 将结果保存为 csv 文件
display(result)   # 打印结果

# 登出系统
bs.logout()  # 调用 logout 方法进行登出

在这里插入图片描述
在这里插入图片描述
参数含义

date:查询日期,格式XXXX-XX-XX,为空时默认最新日期。
返回数据说明

参数名称 参数描述
updateDate 更新日期
code 证券代码
code_name 证券名称

(4)基本面数据获取

BaoStock 除了可以获取技术面数据,还可以获取基本面数据。BaoStock 可以获取的基本面数据主要有季频盈利能力、季频营运能力、季频成长能力、季频偿债能力等。

和技术面类似,BaoStock 通过 API 获取基本面数据。指定入参后,不同的 BaoStock API 会根据入参返回相应的数据。返回的数据类型是 pandas 的 DataFrame。
基本面数据入参说明如下:

code:股票代码,sz.+6位数字代码(0.8.8版本仅支持这一种格式),如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
year:统计年份,为空时默认当前年;
quarter:统计季度,可为空,为空时默认取当前季度。不为空时只有4个取值:1,2,3,4。

在这里插入图片描述
季频盈利能力

是指公司在每个季度内所实现的盈利水平和能力。这通常涉及到一些财务指标和比率,例如每股收益(EPS)、净利润率、毛利润率等等。这些指标可以用来评估公司的经营状况和盈利能力,对投资者来说是非常重要的参考数据之一。通过了解公司的季度盈利能力,投资者可以更好地了解公司的财务状况,从而做出更明智的投资决策。

import baostock as bs
import pandas as pd
from IPython.display import display

# 登录 BaoStock 系统
lg = bs.login()

# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

# 获取600036招商银行季频盈利能力数据
profit_list = []
rs_profit = bs.query_profit_data(code="sh.600036", year=2022, quarter=4)
while (rs_profit.error_code == '0') & rs_profit.next():
    profit_list.append(rs_profit.get_row_data())

# 转换为DataFrame格式
df_profit = pd.DataFrame(profit_list, columns=rs_profit.fields)

# 打印结果
display(df_profit)

# 将结果集输出到csv文件
df_profit.to_csv("D:\\profit_data.csv", encoding="gbk", index=False)

# 退出 BaoStock 系统
bs.logout()

在这里插入图片描述

为了计算从“2020-01-06”到“2020-01-10”的平均价格:

我们可以使用日期列表找到第一个和最后一个日期的索引。列表方法index(item)接受一个参数item,Python将搜索列表以找到第一个元素等于item的值,并返回其从零开始的索引位置。
我们可以使用切片将价格子集化以对这些日期的价格进行计算。
我们可以通过将所有元素的总和除以元素数量来计算平均值。Python的sum(iterable)函数可以用于将浮点数列表中的值相。

# ---------------------------------------------------------------------------- 
#   The dates and prices lists
# ---------------------------------------------------------------------------- 
dates = [
  '2020-01-02', 
  '2020-01-03',
  '2020-01-06',
  '2020-01-07',
  '2020-01-08',
  '2020-01-09',
  '2020-01-10',
  '2020-01-13',
  '2020-01-14',
  '2020-01-15',
  ]

# Close prices
prices = [
  7.1600, 
  7.1900,
  7.0000,
  7.1000,
  6.8600,
  6.9500,
  7.0000,
  7.0200,
  7.1100,
  7.0400,
  ]
# Remember to uncomment the statements below and complete the part with '?' 
start = dates.index('2020-01-06')   
end = dates.index('2020-01-10')     
print(start, end)                   

# Now, slice the `prices` list. 
# Remember that slices do not include endpoints
prcs_w1 = prices[start:end+1]       

# Finally, calculate the average of the prices in the slice
avgprc = sum(prcs_w1)/len(prcs_w1)  
print(avgprc) 

在这里插入图片描述

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

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

相关文章

如何自己制作一个属于自己的小程序?

在这个数字化时代,小程序已经成为了我们生活中不可或缺的一部分。它们方便快捷,无需下载安装,扫一扫就能使用。如果你想拥有一个属于自己的小程序,不论是为了个人兴趣,还是商业用途,都可以通过编程或者使用…

Linux的奇妙冒险———vim的用法和本地配置

vim的用法和本地配置 一.vim的组成和功能。1.什么是vim2.vim的多种模式 二.文本编辑(普通模式)的快捷使用1.快速复制,粘贴,剪切。2.撤销,返回上一步操作3.光标的控制4.文本快捷变换5.批量化操作和注释 三.底行模式四.v…

LeakCanary原理 弱引用与垃圾回收

LeakCanary LeakCanary 通过 hook Android 的生命周期来自动检测 Activity 和 Fragment 何时被销毁,何时应该被垃圾回收,这些被 destroy 的对象被传递给 ObjectWatcher,ObjectWatcher 持有对它们的弱引用 检测对象类型 已销毁的 Activity …

数据结构—基础知识(九):树和二叉树(a)

数据结构—基础知识(九):树和二叉树(a) 树的定义 树(Tree)是n(n≥0)个结点的有限集,它或为空树(n0);或为非空树,对于非空树T: 有且仅有一个称之…

JavaEE-SSM-订单管理-前端增删改功能实现

3.5 功能2&#xff1a;添加 从列表页面切换到添加页面 编写对应添加页面的路由 * {path: /orderAdd,name: 添加订单,component: () > import(../views/OrderAdd.vue)}编写添加功能 <template><div><table border"1"><tr><td>编…

innodb底层原理和MySQL日志机制

server层 1. 连接器 客户端连接数据库需要输入账号、密码。连接器进行校验账号密码以及权限。 2. 查询缓存 连接器连接以后&#xff0c;比如输入一个select语句&#xff0c;这时候第一步就会先根据sql语句作为key给查询缓存中查看这条sql有没有已经被查询过&#xff0c;如果…

wps word 文档里的空白空间太大了

wps word 文档里的空白空间太大了&#xff0c;如下图1 点击【页面】--->【页边距】&#xff0c;把左边、右边的页边距调为0厘米。如下图2 点击【视图】--->【显示比例】从75%改为页宽&#xff0c;页宽的意思是使页面的宽度与窗口的宽度一致。如下图3 图1

微信小程序请求被阻止 Provisional headers are shown

1. ssl证书问题&#xff08;证书不匹配服务器&#xff0c;证书没有&#xff09; 解决方案&#xff1a; a. 更改证书配置&#xff08;让版本匹配&#xff09;&#xff0c;或者替换证书. 参考&#xff1a; http服务&#xff08;nginx、apache&#xff09;停用不安全的…

蓝桥杯省赛无忧 排序 课件40 冒泡排序

01 冒泡排序的思想 02 冒泡排序的实现 03 例题讲解 #include <iostream> using namespace std; void bubbleSort(int arr[], int n) {for (int i 0; i < n-1; i) { for (int j 0; j < n-i-1; j) {if (arr[j] > arr[j1]) {int temp arr[j];arr[j] arr[j1…

SAP PO平台配置

多个系统分配 &#xff1a; XPATH : /p1:mt_ERP_ZSSF_HFM_001/sapClient SPACE : p1 http://lstech.com/erp/IF0523/ZSSF_HFM_001

Python中元祖的用法

元祖tuple(,) 元祖就是不可变的列表&#xff0c;元祖用()表示,元素与元素之间用逗号隔开,数据类型没有限制。 tu (科比,詹姆斯,乔丹) tu tuple(123) 小括号中有一个元素,有逗号就是元祖,没有就是它本身。 空的小括号就是元祖 索引和切片与列表和字符串相同 不可变指的是,…

C++-QT-QString -CString -string 互转

网上常用的函数在环境&#xff08;VS2022 ATL包含QT库的项目&#xff09;中转换不了。 1.QString 转String std::string str qstr.toStdString(); //不行 QString qstr "Hello, world!";//1. 将QString转换为std::string 不行 //std::string str qstr.toSt…

【高效开发工具系列】Intellj IDEA 2023.3 版本

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

中国品牌崛起,爱可声助听器在欧美市场崭露头角

近年来&#xff0c;随着中国经济的快速发展和消费者需求不断升级&#xff0c;国产品牌影响力逐渐提升&#xff0c;成为国际市场上的新宠。其中&#xff0c;国产品牌爱可声助听器凭借其技术创新&#xff0c;在欧美市场崭露头角。 爱可声助听器是一家专注于研发国产数字助听器芯…

antv/g6绘制数据流向图

antv/g6绘制数据流向图 前言接口模拟数据htmlts页面效果 前言 在业务开发中需要绘制数据流向图&#xff0c;由于echarts关系图的限制以及需求的特殊要求&#xff0c;转而使用antv/g6实现&#xff0c;本文以代码的方式实现数据流向需求以及节点分组,版本"antv/g6": “…

UCAS-AOD遥感旋转目标检测数据集——基于YOLOv8obb,map50已达96.7%

1.UCAS-AOD简介 1.1数据说明 遥感图像&#xff0c;又名高分辨率遥感图像。遥感图像的分类依据是根据成像的介质不同来进行分类的。UCAS-AOD (Zhu et al.&#xff0c;2015)用于飞机和汽车的检测&#xff0c;包含飞机与汽车2类样本以及一定数量的反例样本&#xff08;背景&…

【arthas诊断CPU和内存问题实战】thread -n 5 + cpu火焰图 +内存火焰图

通过线程信息分析CPU 1.查看线程信息 step1: 先查看哪个线程占比cpu最高 分析&#xff1a; 可与看出 SceneWorker占比最高&#xff0c;但是是哪个类中哪个方法则不是太清楚。 我们还需要去分析代码&#xff1a; step2.分析代码 1.AbstractSceneManager的 this.sceneWorke…

DES算法的局限性与改进需求

DES算法的局限性与改进需求 DES算法是一种对称加密算法&#xff0c;具有高度的安全性和可靠性。然而&#xff0c;随着计算机技术的发展&#xff0c;DES算法的密钥长度逐渐被攻击者攻破&#xff0c;安全性受到威胁。因此&#xff0c;对DES算法进行改进以提高安全性是必要的。 3…

数字创新巨头PLAN B KRYPTO ASSETS普兰资产管理

Schutz AI金融隐私匿名公链引领全球数字金融浪潮 随着摩根大通推出颠覆性的「IndexGPT」软件服务&#xff0c;AI在金融领域的发展愈发引人瞩目。而PLAN B KRYPTO ASSETS普兰资产管理公司正积极响应这一变革&#xff0c;推出的Schutz AI金融隐私匿名公链成为全球关注的焦点。 在…

java web mvc-06-play framework intro

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …