- miniQMT for Arthur
我希望让AI帮我设计量化代码,包括系统架构与具体实现,以下是我的提词,请你给出修改建议,以让AI模型更精准地生成可用代码:
使用python写一个用迅投miniqmt进行量化交易的系统,功能包括:
- 股票历史数据的获取并存储;对历史数据进行计算;
- 计算的指标因子包括macd,换手率,10日均线,20日均线,30日均线,60日均线等;
- 通过各个指标因子的权重发出自动交易指令,同时提供手动交易操作接口;
- 存储当天交易成交的信息,必要时存储(用sqlite)持仓个股的价格信息,用于计算止盈止损;
交易策略遵循以下规则:
- 分仓买入:(如每次20000元)按建仓成本价百分比向下买入补仓,如93%,86%等,达到仓位上限(如60000元)后停止买入;
- 严格止损:整体持仓成本损失大于某个百分比(如-9.5%)后全仓止损;
- 动态止盈:浮盈比例越大,动态止盈位越高,允许股价回调空间越大;首次浮盈大于一定比例时卖出一定仓位(如50%)仓以保证胜率,余下仓位按动态止盈位置卖出,比如以建仓后股价上涨到的最高价为基准, a) 最高价相比持仓成本价,小于10%时,止盈位为最高价93% b) 最高价相比持仓成本价,小于15%时,止盈位为最高价90% c) 最高价相比持仓成本价,小于30%时,止盈位为最高价87% d) 最高价相比持仓成本价,大于30%时,止盈位为最高价85%
- 网格交易:自动对持仓个股进行网格交易,网格和交易仓位可配置(比如网格高度为5%,10%,15%等,交易仓位为持仓个股数量*20%);
- 买入卖出时需要提前计算交易手数,避免资金不足或者仓位不足,以及交易所的规则(比如交易手数不能低于过100股,不能超过当日交易额度等);为了保证交易成功,交易价格需要根据市场情况动态调整,比如根据市场卖三价和买三价,避免价格过低和过高;
设计原则遵循以下规则:
- 每个功能用一个py文件存储;
- 所有可配置参数集中管理,有调试开关和丰富的代码注释和调试信息;
- 如果有log文件,定期清理,不过多占用存储空间;
- xtquant的api参考https://dict.thinktrader.net;
请按照以下架构使用QMT Python API实现量化交易系统:
一、系统架构设计
1. 核心模块
|-- config.py # **集中管理所有可配置参数**
|-- data_mgr.py # 历史数据获取存储(xtdata接口)
|-- indicator_calc.py # 多周期均线/MACD计算(pandas向量化计算)
|-- strategy_engine.py # **交易策略逻辑实现**
|-- trade_executor.py # 交易指令执行器(xttrader接口)
|-- position_mgr.py # **持仓管理与止盈止损计算**
|-- grid_trader.py # 网格交易模块
|-- risk_mgr.py # 风控校验模块
二、关键实现要点
1. 数据管理 (data_mgr.py)
- 使用xtdata.get_market_data获取股票历史数据
- 采用HDF5存储高频数据,SQLite存储元数据
- **实现增量更新机制**:last_update_date字段记录最后更新时间
2. 指标计算 (indicator_calc.py)
def calculate_emas(df, periods=[10,20,30,60]):
"""带异常值处理的多周期均线计算"""
# 使用pandas的滚动窗口计算
def calculate_macd(df, fast=12, slow=26, signal=9):
"""MACD指标计算(兼容空值处理)"""
3. 策略引擎 (strategy_engine.py)
class TradingStrategy:
def __init__(self, context):
# 初始化策略参数(从configs.py加载)
def on_tick(self, context):
"""**实现QMT的事件驱动机制**"""
# 分仓补仓逻辑(示例):
if current_price < avg_cost * 0.93:
self._add_position(context)
# 动态止盈逻辑
if max_gain > 0.15:
self._dynamic_profit_control(context)
4. 交易执行 (trade_executor.py)
class TradeExecutor:
def smart_order(self, symbol, price, amount):
"""**智能下单模块**
- 根据买三/卖三价动态调整委托价格
- 校验当日剩余交易额度
- 自动拆分大单(单笔≤1000股)"""
5. 风控管理 (risk_mgr.py)
def check_position_risk(position):
"""实时计算持仓盈亏
- 整体亏损>9.5%时触发全平仓
- 个股持仓突破网格阈值触发交易"""
三、QMT API特别注意事项
1. 必须实现init和handlebar方法
2. 使用ContextInfo对象传递策略上下文
3. 区分模拟交易和实盘交易模式
4. 使用xtdata订阅实时行情数据
5. 采用异步订单查询接口
四、调试建议
1. 在config.py设置DEBUG模式:
DEBUG = True # 启用详细日志输出
SIMULATION = True # 使用模拟交易模式
2. 日志管理建议:
- 使用RotatingFileHandler实现日志轮换
- 保留最近7天日志,单个日志≤10MB