【曲线救国】聚宽交易信息保存到数据库

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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。