global schedule_threadschedule_thread = None# 运行交易程序,参数有4个:交易端路径、资金账号、数据库路径、计划任务函数# 例如:run_stock_trading_bot(r'D:\国金证券QMT交易端\userdata_mini', '885451429', r'D:\wenjian\python\smart\data\guojin_account.db', schedule_jobs)def run_stock_trading_bot(path, account_id, db_path, schedule_jobs): global schedule_thread # 使用 global 声明以引用全局变量 while True: try: current_time = time.strftime("%H:%M", time.localtime()) if "08:30" <= current_time <= "21:20": session_id = int(random.randint(100000, 999999)) xt_trader = XtQuantTrader(path, session_id) acc = StockAccount(account_id) callback = MyXtQuantTraderCallback() xt_trader.register_callback(callback) xt_trader.start() connect_result = xt_trader.connect() if connect_result != 0: print('连接失败,程序即将重试') else: subscribe_result = xt_trader.subscribe(acc) if subscribe_result != 0: print('账号订阅失败 %d' % subscribe_result) asset = xt_trader.query_stock_asset(acc) if asset: save_stock_asset(asset, db_path) print("证券资产查询保存成功,可用资金:", asset.cash) # 检查计划任务线程是否活跃,如果不活跃则启动 if schedule_thread is None or not schedule_thread.is_alive(): schedule_thread = threading.Thread(target=schedule_jobs) schedule_thread.start() while xt_trader: time.sleep(10) current_time = datetime.now().strftime("%H:%M") if current_time > "21:20": break print("连接断开,即将重新连接") else: print("当前时间不在运行时段内") time.sleep(3600) # 睡眠一小时后再次检查 except Exception as e: print(f"运行过程中发生错误: {e}") time.sleep(3600) # 如果遇到异常,休息一小时再试
三、代码结构解析全局变量定义:schedule_thread用于存储计划任务线程,以保证在程序运行过程中,定时任务能够正确执行主函数定义:run_stock_trading_bot是主要的交易函数,包含四个参数:交易端路径、资金账号、数据库路径和计划任务函数无限循环:程序使用了一个无限循环,确保在交易时间内持续运行时间判断:通过判断当前时间是否在交易时间内(08:30至21:30),来决定是否执行交易程序交易端连接与账户订阅:首先初始化交易端对象,然后尝试连接交易端若连接失败,则程序将在输出错误信息后重试连接成功后,程序会订阅资金账号以获取交易信息资产查询与保存:查询股票资产信息,并将信息保存到指定的数据库中计划任务线程的检查与启动:检查计划任务线程是否活跃,若不活跃则启动线程,以确保定时任务可以按计划执行异常处理与重连机制:程序包含异常处理机制,当发生错误时,程序会在记录错误信息后休息一小时再尝试重连四、程序的实际应用这段代码在股票交易自动化领域具有重要意义它能够减少人工干预,提高交易效率,并且通过实时监控和自动重连机制,增加了交易过程的稳定性和可靠性特别适合量化交易者和那些希望实现交易自动化的投资者五、技术点分析多线程应用:通过多线程技术,程序能够同时执行交易任务和监控任务,提高了程序的效率和响应速度时间管理:程序根据时间判断是否执行交易操作,这一点对于遵守交易时间规则非常重要异常处理:程序中的异常处理机制能够确保程序在遇到问题时不会直接崩溃,而是尝试解决问题后继续运行六、总结该程序是一个高效、稳定的股票交易自动化工具,适用于各种量化交易策略它不仅提高了交易效率,也为投资者提供了更稳定可靠的交易体验(图片来源网络,侵删)
0 评论