首页 > 数据库 >CTP行情实时写入MySQL数据库

CTP行情实时写入MySQL数据库

时间:2023-11-30 12:55:05浏览次数:42  
标签:行情 CTP 数据库 写入 实时 MySQL

CTP行情实时写入MySQL数据库

 

CTP即中国期货市场的交易系统,是一种可以实时获取行情数据的开放式软件平台。在这个平台上,我们可以订阅多种不同的市场行情数据,例如期货、股票、基金等等。而将这些大量的数据存入数据库,可以为量化交易策略提供必要的支持。

 

在这篇文章中,我们将介绍将CTP行情实时写入MySQL数据库的方法。具体而言,我们将使用Python语言编写一个程序,实时从CTP行情中获取数据并写入MySQL数据库中。

 

我们需要下载并安装Python的一些常用库,例如pyctp、pandas和pymysql。PyCTP是一个Python封装的CTP行情接口,可以轻松实现对于实时行情的提取和订阅。Pandas是一个针对于数据处理和分析的Python库,可以实现对于数据的简单操作。而PyMySQL则是一个Python的MySQL客户端,可以实现对于数据库的连接并执行SQL命令。

 

接下来,我们可以使用PyCTP库的TraderApi类构建一个交易程序实例,从而实现对于CTP行情的订阅。假设我们要订阅IF主力合约的行情数据,我们可以使用以下代码:

 

from pyCTP.TraderApi import TraderApi
class MyApi(TraderApi):
def __init__(self):
self.market_data = []

def OnRtnDepthMarketData(self, pDepthMarketData):
self.market_data.append(pDepthMarketData)
print(pDepthMarketData)

if __name__ == "__mn__":
api = MyApi()
api.SubscribeMarketData("IF2009")
api.RegisterFront("tcp://180.168.146.187:10131")
api.Init()

 

上述代码中,我们定义了MyApi这个类,该类继承了TraderApi。在该类中,我们定义了一个market_data的列表,该列表用来存储实时行情数据。而OnRtnDepthMarketData函数则是在收到行情订阅数据时触发的回调函数,用来将行情数据存储到列表中并打印输出。

 

接下来,我们可以使用Pandas库来将列表中的数据处理为DataFrame格式,便于后续的处理和操作。假设我们要将列表中的数据转化为DataFrame,则可以使用以下代码:

 

import pandas as pd
df = pd.DataFrame(api.market_data)

 

接着,我们可以使用PyMySQL库连接并操作MySQL数据库。我们假设数据库名为db,表名为tb,表中包含字段date(日期)、time(时间)、last_price(最新价)和volume(成交量)。那么我们可以使用以下代码来连接数据库,创建数据表,并将行情数据写入表中:

 

import pymysql
db = pymysql.connect(host="localhost", user="root", password="password", database="db")
cursor = db.cursor()
sql_create_table = """CREATE TABLE IF NOT EXISTS tb
(date DATE,
time TIME,
last_price DOUBLE,
volume INT)"""

cursor.execute(sql_create_table)

sql_write_data = """INSERT INTO tb (date, time, last_price, volume)
VALUES (%s, %s, %s, %s)"""
for index, row in df.iterrows():
cursor.execute(sql_write_data, (row["UpdateTime"][:8], row["UpdateTime"][8:], row["LastPrice"], row["Volume"]))
db.commit()

 

上述代码中,我们使用pymysql库连接了本地的MySQL数据库。在数据库中创建了一个名为tb的数据表,包含date、time、last_price和volume四个字段。而后,我们使用iterrows()函数遍历处理后的DataFrame,将行情数据写入到MySQL数据库中。

 

在程序结束后,我们需要使用Close()函数关闭程序实例,以释放资源:

 

    api.Close()

 

至此,我们就实现了CTP行情实时写入MySQL数据库的程序。用户可以根据自己的需求修改数据表的字段,实现更加详细的行情数据记录和统计。

     

标签:行情,CTP,数据库,写入,实时,MySQL
From: https://www.cnblogs.com/shclbear/p/17867060.html

相关文章

  • basis of PHP DBMA about mysql
    php连接数据库header("Content-type:text/html;charset=utf8");$servername="localhost";$username="root";$password="root";$dbTable="dvwa";$conn=mysqli_connect($servername,$username,$password,$......
  • MySQL - 一致性读 vs 一致性写
    一、问题描述建表语句mysql>CREATETABLE`t`(`id`int(11)NOTNULL,`k`int(11)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDB;insertintot(id,k)values(1,1),(2,2);我们的例子中如果没有特别说明,都是默认autocommit=1。这里有个假设:事务C没有显......
  • MySQL Shell如何接管手动搭建(含仲裁节点)MGR集群
    MySQLShell如何接管手动搭建(含仲裁节点)MGR集群本文源自GreatSQL社区用户的一次提问:Q:一个包含仲裁节点(ARBITRATOR)的GreatSQLMGR集群,一开始是用手动方式构建,后来想用MySQLShell接管,可以吗?A:是可以的,不过也有一定局限性具体的操作如下检查当前MGR集群情况greatsql>selec......
  • ubuntu server 22 LTS 安装MySQL8(二进制源码方式)
    原作来源:https://github.com/aminglinux/daily_shell/blob/main/29.sh根据我自己情况稍作修改mysql下载地址:https://downloads.mysql.com/archives/community/ 按照顺序执行逐行执行注意执行过程的提示,报错需处理:tar-xvfmysql-8.0.34-linux-glibc2.17-x86_64.tarsudo......
  • mysql 页级锁
    页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。因此,采取了折衷的页级锁,一次锁定相邻的一组记录。BDB引擎支持页级锁。 从上到下,锁的粒度逐渐细粒化,但实现开销逐渐增大。 同时我们也要须知,表锁,页锁,行锁并不是一个具......
  • 第十三周Linux教材第十四章学习笔记——MySQL数据库系统
    MySQL数据库系统MySQL是一个广泛使用的关系型数据库管理系统(RDBMS),它是开源的,支持多用户和多线程。14.1基础知识1.数据库基础概念数据库(Database):**数据库是一个包含相关数据的集合,并提供了对这些数据的有效管理和访问。表(Table):**表是数据库中的基本数据结构,用于存储相关......
  • mysql慢查询日志
    一、开启并查看慢查询日志1、查看慢查询配置showvariableslike'%query%' 可以看到slow_query_log的值是OFF,也就是mysql默认是不启用慢查询日志的。这里还有个long_query_time,默认是10秒,也就是超过了10秒即为慢查询。log_queries_not_using_indexes,如果设置为ON,则会将所......
  • win7系统安装mysql及问题处理,安装mysql后net start mysql服务无法启动
    问题描述:win7系统安装mysql,安装mysql后netstartmysql服务无法启动1.下载mysql:官网地址:https://dev.mysql.com/downloads/mysql/根据自身系统位数选择对应版本下载,解压后进入bin文件夹,cmd命令下执行mysqld-install (需要配置path的可自行进行搜索)安装成功后再执行netsta......
  • 记录一次MySQL多表查询,order by不走索引的情况.
    首先是表结构,部分字段脱敏已删除 CREATETABLE`log_device_heart`(`id`intunsignedNOTNULLAUTO_INCREMENT,`device_number`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNOTNULL,`time_periods_begin`datetimeNOTNULL,`time_peri......
  • python连接数据库(连MySQL)
    Python操作和连接数据库原创 阳阳 Python小例子 2023-10-1109:20 发表于湖北在Python中,你可以使用不同的库来操作和连接数据库,最常用的是sqlite3、MySQLdb和psycopg2。使用sqlite3连接和操作SQLite数据库:import sqlite3# 连接数据库conn = sqlite3.connect('......