记录一下常用的代码。
使用掘金获取当前正在交易的合约。


前提:安装有掘金的客户端和相应的库。


导入模块

如果仅仅是获取数据,那么只导入pandas和MyKlines(自定义的)模块就可以了。

其他模块,都是为了绘图而服务的。

'''
导入相关模块
==========================================================================================
'''
'''
导入相关模块
==========================================================================================
'''
print('开始运行...导入相关模块...')
import matplotlib.pyplot as plt  # 绘图
import pandas as pd  # 处理数据
import numpy as np  # 处理数据
import datetime  # 获取时间
import talib as tl  # 计算指标
import os  # 打开文件用
from pylab import mpl  # 在图表中显示中文字体
import math  # 取近似值
from MyKlines import *  # 自定义的画K线、获取数据模块#------------------------------------------------------------------
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 以黑体显示中文
mpl.rcParams['axes.unicode_minus'] = False  # 解决负号-显示错误问题
#-----------------------------------------------------------------------------------------
print('-' * 78)

根据掘金的get_instruments()函数获取期货信息

主要用到掘金API里面的get_instruments()函数,获取在交易的所有数据,然后再自定义个函数,只返回需要的数据。

获取数据:

# 获取当前的时间
now = datetime.datetime.now()
now_str = now.strftime('%Y年%m月%d日 %H:%M:%S %A')
print(f'当前的时间是:{now_str}')
#-----------------------------------------------------------------------------------------
symbols = get_instruments(symbols=None,exchanges=None,  # 上期所 默认None表示所有sec_types=4,  # 期货names=None,  # 默认None 表示所有skip_suspended=True,skip_st=True,fields=None,df=True  #是否返回dataframe格式, 默认False, 返回list[dict]
)# 上交所  SHSE
# 深交所   SZSE
# 中金所   CFFEX
# 上期所   SHFE
# 大商所   DCE
# 郑商所   CZCE
# 上海国际能源交易中心    INEprint(symbols)
print('-' * 80)

结果:

当前的时间是:2022年12月15日 11:12:14 Thursdayposition        symbol  ...               listed_date  conversion_price
0            0  CFFEX.IC1902  ... 2018-12-24 00:00:00+08:00               0.0
1            0  CFFEX.IC1903  ... 2018-07-23 00:00:00+08:00               0.0
2            0  CFFEX.IC1904  ... 2019-02-18 00:00:00+08:00               0.0
3            0  CFFEX.IC1905  ... 2019-03-18 00:00:00+08:00               0.0
4            0  CFFEX.IC1906  ... 2018-10-22 00:00:00+08:00               0.0
...        ...           ...  ...                       ...               ...
3200         0   SHFE.zn2307  ... 2022-07-18 00:00:00+08:00               0.0
3201         0   SHFE.zn2308  ... 2022-08-16 00:00:00+08:00               0.0
3202         0   SHFE.zn2309  ... 2022-09-16 00:00:00+08:00               0.0
3203         0   SHFE.zn2310  ... 2022-10-18 00:00:00+08:00               0.0
3204         0   SHFE.zn2311  ... 2022-11-16 00:00:00+08:00               0.0[3205 rows x 24 columns]

自定义函数:

def transform_data(data, contain='沥青', column_list=['sec_id', 'sec_name', 'listed_date', 'delisted_date']):"""说明:筛选合约------------------------------------变量:data:pandas dataframecontain:包含的字符串column_list:需要的列------------------------------------返回:data_choose:转换后的dataframe------------------------------------"""# 筛选条件,返回True或False# 包含BU的数据choose = data['sec_name'].str.contains(contain)data_choose = data[choose]# 筛选需要的列data_choose = data_choose[['sec_id', 'sec_name', 'listed_date', 'delisted_date']]# 把日期改为字符串# 把时间列转为字符串data_choose.listed_date = data_choose.listed_date.apply(lambda x: x.strftime("%Y-%m-%d %H:%M:%S"))data_choose.delisted_date = data_choose.delisted_date.apply(lambda x: x.strftime("%Y-%m-%d %H:%M:%S"))# 把时间列转为时间格式data_choose.listed_date = pd.to_datetime(data_choose.listed_date)data_choose.delisted_date = pd.to_datetime(data_choose.delisted_date)# 修改时间一列的列名data_choose.rename(columns={"sec_id": "ID","sec_name": "合约名称","listed_date": "上市日期","delisted_date": "退市日期",},inplace=True)return data_choosedata = transform_data(data=symbols, contain='沥青')
print(data)

结果:

--------------------------------------------------------------------------------ID      合约名称       上市日期       退市日期
2473  bu1902  石油沥青1902 2018-08-16 2019-02-15
2474  bu1903  石油沥青1903 2017-03-16 2019-03-15
2475  bu1904  石油沥青1904 2018-10-16 2019-04-15
2476  bu1905  石油沥青1905 2018-11-16 2019-05-15
2477  bu1906  石油沥青1906 2017-06-16 2019-06-17
...      ...       ...        ...        ...
2530  bu2311  石油沥青2311 2022-11-16 2023-11-15
2531  bu2312  石油沥青2312 2021-12-16 2023-12-15
2532  bu2403  石油沥青2403 2022-03-16 2024-03-15
2533  bu2406  石油沥青2406 2022-06-16 2024-06-17
2534  bu2409  石油沥青2409 2022-09-16 2024-09-18[62 rows x 4 columns]

再筛选出当前正在交易的合约:

data = data[data['上市日期'].apply(lambda x: x < now)]
data = data[data['退市日期'].apply(lambda x: x > now)]bu_list = data.ID.valuesprint(data)
print('-' * 80)
print(bu_list)

这样就获取到当前正在交易的期货合约的列表了。我这里选择的合约是石油沥青。

结果:

[62 rows x 4 columns]ID      合约名称       上市日期       退市日期
2520  bu2301  石油沥青2301 2022-03-16 2023-01-16
2521  bu2302  石油沥青2302 2022-03-16 2023-02-15
2522  bu2303  石油沥青2303 2021-03-16 2023-03-15
2523  bu2304  石油沥青2304 2022-04-18 2023-04-17
2524  bu2305  石油沥青2305 2022-05-17 2023-05-15
2525  bu2306  石油沥青2306 2021-06-16 2023-06-15
2526  bu2307  石油沥青2307 2022-07-18 2023-07-17
2527  bu2308  石油沥青2308 2022-08-16 2023-08-15
2528  bu2309  石油沥青2309 2021-09-16 2023-09-15
2529  bu2310  石油沥青2310 2022-10-18 2023-10-16
2530  bu2311  石油沥青2311 2022-11-16 2023-11-15
2531  bu2312  石油沥青2312 2021-12-16 2023-12-15
2532  bu2403  石油沥青2403 2022-03-16 2024-03-15
2533  bu2406  石油沥青2406 2022-06-16 2024-06-17
2534  bu2409  石油沥青2409 2022-09-16 2024-09-18
--------------------------------------------------------------------------------
['bu2301' 'bu2302' 'bu2303' 'bu2304' 'bu2305' 'bu2306' 'bu2307' 'bu2308''bu2309' 'bu2310' 'bu2311' 'bu2312' 'bu2403' 'bu2406' 'bu2409']

绘图

下面,就是获取列表里的数据,然后根据数据绘制图表了。

获取数据,如果返回为empty,说明这个合约没有交易,或者不存在,那么就忽略它。

# ==========================================================================================
# 确定数据开始的时间
time_delta = datetime.timedelta(days=0, hours=1, minutes=0, seconds=0)
time_start = (now - time_delta).strftime("%Y-%m-%d %H:%M:%S")
# 获取数据
close = []
future = []
position = []
for bu in bu_list:data = get_data_juejin(symbol=bu, start=time_start, end=now, frequency="1m")if not data.empty:print(data)c = data['close'].values[-1]p = data['position'].values[-1]close.append(c)future.append(bu)position.append(p)
print(future, close)

结果:

['bu2301', 'bu2302', 'bu2303', 'bu2304', 'bu2305', 'bu2306', 'bu2307', 'bu2309', 'bu2312', 'bu2406'] [3577.0, 3576.0, 3587.0, 3588.0, 3588.0, 3595.0, 3578.0, 3531.0, 3492.0, 3435.0]

可视化一下:

# 获取价格并画图
fig = plt.figure(figsize=(16, 9), dpi=100)
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()# line = mlines.Line2D(future, close, lw=2, ls='-', alpha=1, color='red')
# # 设置图层顺序
# line.set_zorder(1)
# ax1.add_line(line)
# 在不同的绘图区域,zorder不生效
ax2.bar(future, position, color='g', linewidth=0.2, zorder=1)ax1.plot(future, close, marker='o', color='red', linewidth=2, zorder=2)
ax1.grid()
ax2.grid(which='major',axis='both',alpha=0.5,color='r',linestyle='--',
)
# zorder 用来控制绘图顺序,其值越大,越在上面。plt.savefig('各期价格.jpg')# plt.show()
os.popen('各期价格.jpg')

os.popen()函数用来打开保存的图片。

用到此函数,是因为VS Code默认的绘图方式使用矢量绘画引擎,导致绘图结果显示不完美。

通过保存图片到本地,然后打开的方式,可以完美解决这个问题。

图中的折线是价格,Bar是持仓量:

使用掘金获取当前正在交易的合约并可视化价格和持仓量相关推荐

  1. Web3j通过合约地址监听transfer事件获取以太坊交易数据

    Web3j通过合约地址监听transfer事件获取以太坊交易数据 We3j web3j是一个轻量级的Java库,用于在Ethereum网络上集成客户端(节点). 核心特性 通过Java类型的JSON- ...

  2. 解决过帐时提示“无法获取内部公司交易记录的帐户”

    错误 当在 Microsoft Dynamics AX 2009 中启动了中国式凭证系统后,在进行凭证复核或过帐时提示: 英文:Fail to get the account for intercom ...

  3. 期货市场持仓量交易法则(期货持仓量公式)

    期货 中持仓量和成交量是怎么算的? 因为期货是T+0,所以交易量大于持仓量很正常.成交量就是当年成交的累计手数.持仓量是多空共同开仓数. 持仓量(inventory)是指买卖双方开立的还未实行反向平仓 ...

  4. vnpy 查询持仓量_VNPY,从发送交易指令到交易所的源代码分析

    在尝试写tick级别的策略,由于交易反馈时间要求高,感觉需要对单个order的事有个全面了解,就花了些时间尝试性去分析了VNPY中 从发送交易指令(sendOrder())到交易所,和接收成交返回信息 ...

  5. Python爬虫获取文章的标题及你的博客的阅读量,评论量。所有数据写入本地记事本。最后输出你的总阅读量!

    Python爬虫获取文章的标题及你的博客的阅读量,评论量.所有数据写入本地记事本.最后输出你的总阅读量!还可以进行筛选输出!比如阅读量大于1000,之类的! 完整代码在最后.依据阅读数量进行降序输出! ...

  6. sklearn RandomForest(随机森林)模型使用RandomSearchCV获取最优参数及模型效能可视化

    sklearn RandomForest(随机森林)模型使用RandomSearchCV获取最优参数及模型效能可视化 随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林 ...

  7. 获取socket对应的接收缓冲区中的可读数据量

    获取socket对应的接收缓冲区中的可读数据量 本文介绍如何获取当前socket对应的接收缓冲区的可读数据量 在Linux上可以使用ioctl函数 #include <sys/ioctl.h&g ...

  8. python history函数_python的history_n 和history函数 获取的成交量和持仓量出现翻倍

    使用的最新的掘金者3.用python sdk调用 history_n 和history函数获取日k线,出现有的活约交易日的成交量和持仓量翻倍了,有的日期又是正确的. 比如 动力煤 ZC2001 对应代 ...

  9. Python量化交易实战-29什么是价格动量效应

    B站配套视频教程观看 一.什么是动量策略 预先对股票收益和交易量设定过滤准则,当股票收益或股票收益和交易量同时满足过滤准则就买入或卖出股票的投资策略. 它是一种选股策略,也就是针对大量的股票进行收益率 ...

最新文章

  1. jQuery Mobile的学习时间bottonbutton的事件学习
  2. MySQL Merge引擎实现分表
  3. Python中的条件语句和循环语句
  4. vb语言程序设计_如果编程语言难度决定头发浓度,学这语言的可能要光头了
  5. Centos6.x服务器配置jdk+tomcat+mysql环境
  6. python如何遍历二维数组的列元素_for循环获取二维数组的元素时的bug
  7. Java_String_01_由转义字符串得到其原本字符串
  8. 2.shiro+jdbc+idea+maven数据库
  9. unity序列帧优化—Addressables
  10. 2022-2028年中国环保减速机行业运行动态及投资机会分析报告
  11. oracle内连接和外连接
  12. 永中office之在线预览(vue/js版)
  13. 2021-09-08Cloudera Manager集群报警,堆转储目录/tmp 或日志目录/var/log 可用空间小于 5.0 吉字节
  14. 程序员的必备装备——为健康加油
  15. LinuxShell作业题-1
  16. (转)台式机华硕主板双显卡切换,怎么舒服怎么来
  17. LinkedIn高级分析师王益:大数据时代的理想主义和现实主义(图灵访谈)
  18. 联想集团:2021/22财年第一季度业绩
  19. Altium Designer挖空开槽填坑之board cutout
  20. [4G5G专题-112]:部署 - LTE邻区规划、配置、自动邻区关系ANR

热门文章

  1. 魅族16php7.3系统,魅族Flyme 7.3稳定版发布:魅族16th等4款机型率先升级!
  2. Ubuntu12.04歌词显示osd-lyrics
  3. IOS开发 之百度地图API环境搭建
  4. 南邮通达的计算机科学与技术,2019南京邮电大学通达学院专业排名
  5. 自动化专业考研可以计算机吗,自动化专业考研可以选择什么专业?
  6. Crunch Bang 上设置crontab 定时播放音乐视频
  7. renix如何查看时延和抖动和丢包——网络测试仪实操
  8. mac上brew安装swoole扩展,采坑之路
  9. 湖南大学头歌实训小测
  10. idea eclipse 快捷键全局搜索替换代码 修改包名