量化交易系统之python+mysql(一)

前言

之前用python+hdf5+其他实现了一个简单功能的量化交易系统。在使用过程中,遇到了性能问题,以及扩展问题。所以,想改用mysql+redis架构。

工欲善其事,必先利其器:

windows系统,mysql-8.0.16-winx64,Navicat Premium 12,pyCharm community

正文

1.python操作mysql,用到pymysql,所以,需要在pyCharm里面,先加入pymysql的开发环境

2.实现mysql的建表、增删改

#coding=utf-8
import pymysql

class CDBMgr:
    def __init__(self,host, user, password, database):
        self.host = host
        self.user = user
        self.password = password
        self.database = database
        self.connect = None

    #connect database
    def connect_db(self):
        self.connect = pymysql.connect(self.host, self.user, self.password, self.database, charset = "utf8")

    def create_table(self):
        # 得到一个可以执行SQL语句的光标对象
        cursor = self.connect.cursor()
        # 定义要执行的SQL语句
        sql0 = 'DROP TABLE t_kdata;'
        # 执行SQL语句
        cursor.execute(sql0)

        sql = """
        CREATE TABLE t_kdata (
            id INT auto_increment  PRIMARY KEY,
            code CHAR(10) NOT NULL UNIQUE COMMENT '股票代码',
            open DECIMAL(10,2) NOT NULL COMMENT '开盘价',
            close DECIMAL(10,2) NOT NULL COMMENT '收盘价',
            high DECIMAL(10,2) NOT NULL COMMENT '最高价',
            low DECIMAL(10,2) NOT NULL COMMENT '最低价',
            amount DECIMAL(25,2) COMMENT '成交额(千元)',
            vol DECIMAL(25,2) COMMENT '成交量(手)',
            ma5vol DECIMAL(25,2)  COMMENT '5日平均成交量',
            ma10vol DECIMAL(25,2) COMMENT '10日平均成交量',
            ma20vol DECIMAL(25,2) COMMENT '20日平均成交量',
            ma30vol DECIMAL(25,2) COMMENT '30日平均成交量',
            ma5 DECIMAL(10,2) COMMENT '5日平均收盘价',
            ma10 DECIMAL(10,2) COMMENT '10日平均收盘价',
            ma20 DECIMAL(10,2) COMMENT '20日平均收盘价',
            ma30 DECIMAL(10,2) COMMENT '30日平均收盘价',
            ma60 DECIMAL(10,2) COMMENT '60日平均收盘价',
            pct_chg DECIMAL(10,2) COMMENT '涨跌幅'            
        )ENGINE=innodb DEFAULT CHARSET=utf8;
        """
        #查看注释的sql语句
        #show full columns from k_data;
        #print(sql)

        # 执行SQL语句
        cursor.execute(sql)
        # 关闭光标对象
        cursor.close()

    #增加k线数据
    def add_kdata(self, code, open, close, high, low, vol):
        if self.connect is None:
            return -1

        # 得到一个可以执行SQL语句的光标对象
        cursor = self.connect.cursor()

        # sql语句
        sql = "insert into t_kdata (code, open, close, high, low, vol) VALUE (%s,%s,%s,%s,%s,%s);"
        #sql = "insert into t_kdata (code, open, close, high, low, vol) VALUE ("+code+","+open+","+close+","+high+","+low+","+vol+");"
        print(sql)

        try:
            # 执行SQL语句
            cursor.execute(sql, (code, open, close, high, low, vol))
            #cursor.execute(sql)
            # 把修改的数据提交到数据库
            self.connect.commit()
        except Exception as e:
            # 捕捉到错误就回滚
            self.connect.rollback()
            print(e)

        # 关闭光标对象
        cursor.close()

    #根据股票代码,删除表中的数据
    def del_kdata(self,code):
        if self.connect is None:
            return -1

        # 得到一个可以执行SQL语句的光标对象
        cursor = self.connect.cursor()

        # sql语句
        sql = "delete from t_kdata where code=%s;"
        print(sql)

        try:
            # 执行SQL语句
            cursor.execute(sql, (code,))
            # 把修改的数据提交到数据库
            self.connect.commit()
        except Exception as e:
            # 捕捉到错误就回滚
            self.connect.rollback()
            print(e)

        # 关闭光标对象
        cursor.close()

    def modify_kdata(self, code, open, close, high, low, vol):
        if self.connect is None:
            return -1

        # 得到一个可以执行SQL语句的光标对象
        cursor = self.connect.cursor()

        # sql语句
        sql = "insert into t_kdata (code, open, close, high, low, vol) VALUE (%s, %s, %s, %s, %s, %s);"
        print(sql)

        try:
            # 执行SQL语句
            cursor.execute(sql, (code, open, close, high, low, vol))
            # 把修改的数据提交到数据库
            self.connect.commit()
        except Exception as e:
            # 捕捉到错误就回滚
            self.connect.rollback()
            print(e)

        # 关闭光标对象
        cursor.close()

3.调用,建表;

首先,需要引用dbmgr类


import src.datamgr.dbmgr as dbmgr
    mydbmgr = dbmgr.CDBMgr('localhost', 'root', '123', 'kdata')
    mydbmgr.connect_db()
    mydbmgr.create_table()

注意,建表执行建一次就OK了,可以用命令行建表;这为了备忘,写到代码里面。

4.调用,插入一条数据

    mydbmgr = dbmgr.CDBMgr('localhost', 'root', '123', 'kdata')
    mydbmgr.connect_db()
    #mydbmgr.create_table()
    mydbmgr.add_kdata('000001',11.38,11.36,11.55,11.28,754246)

用Navicat看到,已经插入成功:

 

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值