迅投miniQMT量化交易之【网格交易】的实现(八)——init_db_tables()方法

       和大家一起分享如何使用miniQMT实现我们自己的网格交易系统。如果您对量化交易感兴趣,欢迎一起交流。

       特别声明:本文只从技术层面介绍如何通过miniQMT实现网格交易,尽管相关代码已经笔者实盘验证,但笔者不对读者的实际盈亏负责。

本专栏其他文章:

使用迅投miniQMT实时监控同花顺自选股,实现自动交易

使用python获取同花顺免费版和同花顺远航版自选股数据用于量化交易

使用python将选股策略选股结果自动更新同花顺【远航版】自选股

使用python将选股策略选股结果自动更新同花顺【免费版】自选股

迅投miniQMT实盘大单拆单批量下单方法的实现

迅投miniQMT实盘大单拆单时随机买卖量的实现方法

迅投miniQMT实盘大单拆单时使用【等差价格】下单的实现方法

迅投miniQMT量化交易之【网格交易】的实现(一)——需求分析

迅投miniQMT量化交易之【网格交易】的实现(二)——主要功能

迅投miniQMT量化交易之【网格交易】的实现(三)——GridTrade类迅投miniQMT量化交易之【网格交易】的实现(四)——参数详解迅投miniQMT量化交易之【网格交易】的实现(五)——数据库设计

迅投miniQMT量化交易之【网格交易】的实现(六)——实盘效果展示

迅投miniQMT量化交易之【网格交易】的实现(七)——__init__()方法

前面讲述了init()方法的实现,本文重点介绍init_db_tables()方法的实现。

init_db_tables()方法功能

init_db_tables())方法用于数据库表初始化。每次GridTrade类实例化时,init_db_tables()方法会先检查数据库中`stock_status`表和`trade_records`表是否存在。如不存在,则自动创建。

init_db_tables()方法全部代码

def init_db_tables(self):
    """初始化数据库表结构"""
    try:
        conn = self.db_pool.connection()
        with conn.cursor() as cursor:
            # 创建股票状态表
            cursor.execute("""
                CREATE TABLE IF NOT EXISTS stock_status (
                    stock_code VARCHAR(10) PRIMARY KEY,
                    base_price DECIMAL(10,3) NOT NULL DEFAULT 0.000,
                    min_position INT NOT NULL DEFAULT 0,
                    max_position INT NOT NULL DEFAULT 0,
                    min_price DECIMAL(10,3) NOT NULL DEFAULT 0.000,
                    max_price DECIMAL(10,3) NOT NULL DEFAULT 0.000,
                    price_type ENUM('rate', 'amount') NOT NULL DEFAULT 'rate',
                    buy_price_change DECIMAL(6,3) NOT NULL DEFAULT 0.000,
                    sell_price_change DECIMAL(6,3) NOT NULL DEFAULT 0.000,
                    buy_volume DECIMAL(10,2) NOT NULL DEFAULT 0.00,
                    sell_volume DECIMAL(10,2) NOT NULL DEFAULT 0.00
                )
            """)

            # 创建交易记录表
            cursor.execute("""
                CREATE TABLE IF NOT EXISTS trade_records (
                    id INT AUTO_INCREMENT PRIMARY KEY,
                    stock_code VARCHAR(10) NOT NULL DEFAULT '',
                    trade_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                    trade_type ENUM('buy', 'sell') NOT NULL DEFAULT 'buy',
                    price DECIMAL(10,3) NOT NULL DEFAULT 0.000,
                    volume INT NOT NULL DEFAULT 0,
                    commission DECIMAL(10,2) NOT NULL DEFAULT 0.00,
                    stamp_duty DECIMAL(10,2) NOT NULL DEFAULT 0.00
                )
            """)
            conn.commit()
            msg = f"Database tables initialized successfully!"
            print(datetime.datetime.now(), msg)            
    except Exception as e:
        msg = f"Database initialization failed: {str(e)}"
        print(datetime.datetime.now(), msg)
        raise
    finally:
        conn.close()

【未完待续】

码字不易,原创更不易,如您觉得本文对您有帮助,麻烦动动您富贵的小手,点赞、收藏、关注、订阅!!!

你可能感兴趣的:(量化交易,数据库,python,量化交易,miniQMT)