【曲线救国】聚宽交易信息保存到数据库
2024-01-02 22:28:36
熟悉聚宽的小伙伴们都知道,9月底聚宽和一创公布了"一创聚宽"实盘将在12月29号停服,届时不再提供实盘交易服务。
从9月底得知消息后,不少宽友尝试了各式各样的弥补方案来进行实盘交易。比如在Ptrade,QMT重新搭建自己的策略,但是不少小伙伴都遇到了数据不准确的问题,或者调用数据接口耗时太久,又或者回测耗时太久,以至于有小伙伴吐槽到“以前嫌弃聚宽回测很慢,现在离开了聚宽才发现,对比起QMT或Ptrade,聚宽简直是辆跑车!!”
这或许就是失去了才懂得珍惜吧,没有对比就没有伤害图片
本人尝试了不同的方法后,觉得现有的成本最低、出错最少的方案就是通过模拟盘把交易数据传到数据库中,然后再利用QMT获取交易信息,利用QMT进行交易(Ptrade不支持外部数据库)。
这一期我们讲一下如何把聚宽的交易信息传到数据库,以下是demo代码。
先加载所需要的库:
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import random
import uuid
from sqlalchemy import Column, String, DateTime, Integer, Boolean
from sqlalchemy.ext.declarative import declarative_base
import datetime
#导入需要的库
import pandas as pd
import numpy as np
定义自己服务器的信息:
# Define your database connection parameters
db_user = 'joinquant'
db_password = 'xxxxxxx'
db_host = '154.8.214.xx'
db_name = 'joinquant'
# Create an SQLAlchemy engine
engine = create_engine(f'mysql://{db_user}:{db_password}@{db_host}/{db_name}')
# 创建一个基类,用于声明数据模型
Base = declarative_base()
定义数据库的结构:
class JoinQuantTable(Base):
__tablename__ = 'joinquant_stock_test' # 设置数据库表名称
pk = Column(String(36), primary_key=True, default=str(uuid.uuid1())) # 主键列
code = Column(String) # 字符串列
tradetime = Column(DateTime, default=datetime.datetime.now()) # 日期时间列
order_amount = Column(Integer) # 整数列
order_price = Column(Integer)
ordertype = Column(String) # 字符串列
if_deal = Column(Boolean, default=False) # 布尔列
insertdate = Column(DateTime, default=datetime.datetime.now()) # 日期时间列
在上述代码中,定义的结构主要为:
pk:交易信息的唯一标识。
code:证券代码。
tradetime:交易时间。
order_amount:交易数量。
order_price:交易价格。
if_deal:是否已经交易。
insertdate:该条交易信息的插入时间。
以下是示例。
# 创建一个会话
Session = sessionmaker(bind=engine)
session = Session()
code=['000001.sz', '000002.sz', '000003.sz', '000004.sz', '000005.sz', '000006.sz', '000007.sz', '000008.sz', '000009.sz', '000010.sz']
# 随机生成数据并插入到数据库中
for i in range(10): # Insert 10 random records as an example
# 随机生成数据
pk = str(uuid.uuid1())
code_value = code[i]
tradetime_value = datetime.datetime.now()
order_amount_value = random.randint(100, 1000)
order_price_value = random.randint(1, 100)
ordertype_value = random.choice(['buy', 'sell'])
if_deal_value = 0
insertdate_value = datetime.datetime.now()
# 创建一个新的记录
new_record = JoinQuantTable(
code=code_value,
tradetime=tradetime_value,
order_amount=order_amount_value,
order_price=order_price_value,
ordertype=ordertype_value,
if_deal=if_deal_value,
insertdate=insertdate_value
)
# 添加记录到会话中
session.add(new_record)
# 把修改好的内容提交到数据库中
session.commit()
# 关闭会话
session.close()
从上述代码解释中可以看出,我们把每条交易信息整理好后按照数据库的结构添加一个记录record,并将其添加到会话session中。当全部整理好后一并commit到数据库中即可。
如果你喜欢小木屋分享的内容,请关注小木屋哦
文章来源:https://blog.csdn.net/sinat_21250935/article/details/135350905
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!