和大家一起分享如何使用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())方法用于数据库表初始化。每次GridTrade类实例化时,init_db_tables()方法会先检查数据库中`stock_status`
表和`trade_records`
表是否存在。如不存在,则自动创建。
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()
【未完待续】
码字不易,原创更不易,如您觉得本文对您有帮助,麻烦动动您富贵的小手,点赞、收藏、关注、订阅!!!