3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,如何将聚宽(JoinQuant)的虚拟回测或模拟盘结果安全、高效地同步到个人实盘账户(如同花顺客户端)是一个常见痛点。由于聚宽目前不直接提供实盘交易通道,通常需要通过**“策略信号输出 -> 本地持仓比对 -> 自动化下单 -> 消息通知”**的链路来实现。
以下是实现该方案的完整架构与核心 Python 脚本指南:
after_trading_end 或 market_open 阶段,使用 write_file 将目标持仓(或调仓信号)写入到聚宽的研究中,或通过 API 导出。pywinauto 或 EasyTrader 等开源库)模拟键盘鼠标操作,向同花顺客户端发送闪电买卖指令。在聚宽策略代码中,每日调仓完毕后,将最新的目标持仓比例或股数写入 CSV 文件:
import json
def after_trading_end(context):
# 获取当前策略的所有多头持仓
target_positions = {}
for code, pos in context.portfolio.long_positions.items():
target_positions[code] = pos.total_amount
# 写入到研究根目录,供本地脚本下载读取
write_file('target_positions.json', json.dumps(target_positions))
log.info("目标持仓已导出")
在本地运行以下 Python 脚本。该脚本负责读取聚宽目标持仓,比对本地实盘持仓,并生成买卖差额:
import json
import requests
# 1. 模拟获取聚宽目标持仓(实际可通过聚宽 API 或下载研究文件获取)
def get_jq_target_positions():
# 示例数据:{'000001.XSHE': 1000, '600519.XSHG': 100}
# 实际应用中,可以使用 jqdatasdk 或直接读取导出的 json
return {'000001.XSHE': 1000, '600519.XSHG': 100}
# 2. 获取同花顺当前真实持仓(需根据您使用的自动化交易库获取)
def get_ths_current_positions():
# 示例数据:当前持有一半平安银行,无茅台
return {'000001.XSHE': 500}
# 3. 计算交易差额
def calculate_order_diff(target, current):
diff = {}
all_codes = set(target.keys()).union(set(current.keys()))
for code in all_codes:
t_amt = target.get(code, 0)
c_amt = current.get(code, 0)
change = t_amt - c_amt
if change != 0:
diff[code] = change
return diff
# 4. 飞书机器人推送函数
def push_to_feishu(webhook_url, content):
headers = {"Content-Type": "application/json"}
payload = {
"msg_type": "text",
"content": {
"text": content
}
}
try:
response = requests.post(webhook_url, json=payload, headers=headers)
return response.json()
except Exception as e:
print(f"飞书推送失败: {e}")
# 5. 主执行逻辑
def run_auto_trade():
FEISHU_WEBHOOK = "https://open.feishu.cn/open-apis/bot/v2/hook/your_bot_id"
target = get_jq_target_positions()
current = get_ths_current_positions()
trade_diff = calculate_order_diff(target, current)
if not trade_diff:
push_to_feishu(FEISHU_WEBHOOK, "[实盘同步] 今日策略持仓与实盘一致,无需调仓。")
return
report_lines = ["[实盘调仓执行报告]"]
for code, volume in trade_diff.items():
action = "买入" if volume > 0 else "卖出"
abs_volume = abs(volume)
# ---------------------------------------------------------
# 此处调用您的同花顺自动化下单接口,例如 EasyTrader 或 pywinauto 模拟按键
# ths_client.buy(code, price=None, amount=abs_volume) # 闪电买入
# ---------------------------------------------------------
execution_status = "成功" # 实际应根据自动化接口返回值判断
report_lines.append(f"标的: {code} | 操作: {action} | 数量: {abs_volume} | 状态: {execution_status}")
# 推送结果到飞书
push_to_feishu(FEISHU_WEBHOOK, "\n".join(report_lines))
if __name__ == "__main__":
run_auto_trade()
closeable_amount 时,应避免将今日刚买入的持仓纳入卖出差额计算。MarketOrderStyle(limit_price) 逻辑)。pywinauto)存在因客户端界面更新而失效的风险。请务必在实盘运行前在模拟环境(同花顺模拟盘)中进行充分测试。