From ef6204bafa3cf81f059de6c12b2dab149d80a22c Mon Sep 17 00:00:00 2001 From: Win_home <240884432.com> Date: Fri, 9 May 2025 21:02:48 +0800 Subject: [PATCH] =?UTF-8?q?20250509:=E7=AC=AC=E4=B8=80=E6=AC=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B9LLM=E8=AE=A2=E5=8D=95=E6=B5=81=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../使用文档/3.28版本/AI智能订单流交易策略图文解析.md | 468 +++ .../使用文档/3.28版本/README.md | 433 +++ .../使用文档/3.28版本/专享策略20_基于LLM的订单流日内交易策略.py | 2140 ++++++++++++++ .../使用文档/3.28版本/这里填写好就可以跑了.png | Bin 0 -> 403614 bytes .../使用文档/3.31版本/专享策略20_o3mini.py | 2377 +++++++++++++++ .../使用文档/3.31版本/填写这里即可.png | Bin 0 -> 581349 bytes .../使用文档/3.31版本/更新说明_3_31.txt | 8 + .../使用文档/4.02版本_new/.vscode/settings.json | 3 + .../使用文档/4.02版本_new/04.02更新日志.txt | 16 + .../使用文档/4.02版本_new/traderdata/au2506_ofdata.json | 387 +++ .../使用文档/4.02版本_new/traderdata/au2506_stops.json | 16 + .../使用文档/4.02版本_new/traderdata/au2506traderdata.csv | 2 + .../使用文档/4.02版本_new/专享策略20_o3mini.py | 2610 +++++++++++++++++ .../使用文档/4.02版本_new/定时启动.py | 53 + .../使用文档/4.14版本_new/4.14更新日志.txt | 5 + .../使用文档/4.14版本_new/vip20_orderflow.py | 2596 ++++++++++++++++ .../使用文档/4.14版本_new/定时启动.py | 53 + .../原始文档}/专享策略20_基于LLM的订单流日内交易策略.zip | Bin 18 files changed, 11167 insertions(+) create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/AI智能订单流交易策略图文解析.md create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/README.md create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/专享策略20_基于LLM的订单流日内交易策略.py create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/这里填写好就可以跑了.png create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.31版本/专享策略20_o3mini.py create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.31版本/填写这里即可.png create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.31版本/更新说明_3_31.txt create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/.vscode/settings.json create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/04.02更新日志.txt create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506_ofdata.json create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506_stops.json create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506traderdata.csv create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/专享策略20_o3mini.py create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/定时启动.py create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/4.14更新日志.txt create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/vip20_orderflow.py create mode 100644 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/定时启动.py rename {temp/2025年松鼠策略 => 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/原始文档}/专享策略20_基于LLM的订单流日内交易策略.zip (100%) diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/AI智能订单流交易策略图文解析.md b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/AI智能订单流交易策略图文解析.md new file mode 100644 index 0000000..e3046af --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/AI智能订单流交易策略图文解析.md @@ -0,0 +1,468 @@ +# AI智能订单流交易策略图文解析 + +## 一、系统整体架构 + +AI智能订单流交易策略是一套融合高频数据分析与人工智能决策的自动化期货交易系统。该系统通过分析市场微观结构特征,结合大模型AI的综合分析能力,实现从市场监控到交易执行的全流程智能化。 + +该交易系统基于python的CTP接口开发,采用多进程架构,实现了行情数据处理、订单流分析、AI决策和交易执行的全流程自动化。系统架构主要包括: + +``` +主程序 +├── 行情进程 (run_tick_engine) +│ └── Tick数据处理 +└── 交易进程 (run_trader) + ├── MyTrader类 + │ ├── 交易逻辑处理 + │ ├── 止损止盈管理 + │ └── 日内平仓控制 + └── AI分析线程 (background_model_call) +``` + +### 系统架构图 + +``` +┌───────────────────────┐ +│ 主程序入口 │ +└───────────┬───────────┘ + │ + ┌──────┴──────┐ + ▼ ▼ +┌─────────┐ ┌─────────┐ +│行情进程 │ │交易进程 │ +└────┬────┘ └────┬────┘ + │ │ + ▼ ▼ +┌─────────┐ ┌─────────────┐ +│Tick处理 │ │ MyTrader类 │ +└────┬────┘ └──────┬──────┘ + │ │ + ▼ ▼ +┌─────────┐ ┌───────────┐ ┌───────────┐ +│K线构建 │ │交易信号处理│ ←── │ AI分析线程│ +└────┬────┘ └──────┬────┘ └───────────┘ + │ │ + ▼ ▼ +┌─────────┐ ┌───────────┐ +│订单流分析│ │风险管理系统│ +└─────────┘ └───────────┘ +``` + +系统采用多进程架构设计,主要分为两个核心进程: + +1. **行情进程**:负责接收和处理实时市场数据 + - Tick数据处理 + - K线构建 + - 订单流分析 + +2. **交易进程**:负责交易决策与执行 + - AI模型分析(异步线程) + - 交易信号处理 + - 风险管理系统 + - 订单执行 + +这种架构设计有效分离了数据处理和交易执行,确保系统稳定性和响应速度。 + +## 二、核心数据流程 + +### 数据流向图 + +``` +┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ +│ CTP接口 │ → │ Tick数据 │ → │ K线数据 │ → │订单流分析 │ +└───────────┘ └───────────┘ └───────────┘ └─────┬─────┘ + │ +┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│订单执行系统│ ← │交易信号生成│ ← │ AI决策分析│ ← ────┘ +└───────────┘ └───────────┘ └───────────┘ +``` + +系统数据处理的完整流程如下: + +1. **Tick数据接收**:从CTP接口获取实时行情数据 +2. **K线构建**:将Tick数据聚合成分钟级K线 +3. **订单流分析**:计算Delta值和堆积指标 +4. **AI模型分析**:利用大模型分析市场状态 +5. **交易信号生成**:生成包含方向、置信度和风控参数的信号 +6. **订单执行**:根据信号执行交易策略 + +## 三、订单流分析详解 + +订单流分析是该系统的核心特色,它通过分析每一笔成交背后的买卖意图,揭示常规技术分析无法察觉的市场微观结构。 + +### 订单流原理图 + +``` +价格 + ▲ + │ ┌────┐ + │ │ │ + │ ┌───┘ └───┐ + │ │ │ + │ │ └───┐ + │ │ │ + │ │ │ + └───┴─────────────────┴────────► 时间 + ↑ ↑ ↑ ↑ + │ │ │ │ + +5 -3 +8 -2 ← Delta值 + │ │ │ │ + └─────┴─────┴─────┘ + │ + Delta累计 = +8 +``` + +订单流分析的核心概念: + +#### 1. Delta值计算 + +Delta值表示主动买入成交量与主动卖出成交量的差值: + +- **主动买入**:成交价 ≥ 卖一价时的成交 +- **主动卖出**:成交价 ≤ 买一价时的成交 +- **Delta = 主动买入量 - 主动卖出量** + +系统中这部分实现的关键代码: + +```python +# 判断交易是主动买入还是主动卖出 +if LastPrice >= Ap: # 高于卖一价成交,视为主动买入 + askDict[str(LastPrice)] += Volume +if LastPrice <= Bp: # 低于买一价成交,视为主动卖出 + bidDict[str(LastPrice)] += Volume + +# 计算Delta值 +delta = (sum(askDictResult.values()) - sum(bidDictResult.values())) +``` + +#### 2. 堆积指标(DJ) + +堆积指标用于识别主力资金的集中买卖行为,通过分析买卖盘异常大单的堆积现象,发现大资金的布局意图: + +- **多头堆积**:某价位的卖单量远大于邻近价位的买单量 +- **空头堆积**:某价位的买单量远大于邻近价位的卖单量 + +堆积形成的市场意义: +- 多头堆积形成后,价格往往出现上涨 +- 空头堆积形成后,价格往往出现下跌 + +这种微观结构变化,往往领先于价格变动,为交易提供了先机。 + +### 订单流指标解读 + +| 指标名称 | 计算方法 | 市场含义 | 交易信号 | +|---------|---------|---------|---------| +| Delta值 | 主动买入量-主动卖出量 | 单根K线买卖力量对比 | 正值=买方强势,负值=卖方强势 | +| Delta累计 | Delta值的累计曲线 | 资金流向趋势 | 向上倾斜=做多信号,向下倾斜=做空信号 | +| 堆积指标(DJ) | 基于买卖盘大单异常计算 | 大资金买卖意图 | 正值=多头堆积,负值=空头堆积 | +| 买卖比值 | 主动买入量/主动卖出量 | 短期市场情绪 | >1.5买方强势,<0.7卖方强势 | + +## 四、AI决策系统工作流程 + +系统采用DeepSeek大模型作为核心分析引擎,实现类似专业交易员的市场分析和决策能力。 + +### AI决策流程图 + +``` +┌────────────┐ ┌────────────┐ ┌────────────┐ +│ 市场数据整合 │ ──► │ 数据格式化 │ ──► │ 提示词构建 │ +└──────┬─────┘ └──────┬─────┘ └──────┬─────┘ + │ │ │ + └──────────────────┼──────────────────┘ + │ + ▼ +┌────────────┐ ┌────────────┐ ┌────────────┐ +│ 交易信号执行 │ ◄── │ 信号质量检查 │ ◄── │ 大模型API调用│ +└────────────┘ └────────────┘ └────────────┘ +``` + +#### 1. 数据格式化 + +系统通过`format_data_for_llm`方法将市场数据转换为文本格式,供AI模型分析: + +```python +data_text = "订单流数据分析:\n\n" +data_text += f"当前时间: {recent_data['datetime'].iloc[-1]}\n" +data_text += f"当前价格: {recent_data['close'].iloc[-1]}\n" +data_text += f"MA5: {ma5:.2f}\n" +data_text += f"MA10: {ma10:.2f}\n" +data_text += f"MA20: {ma20:.2f}\n" +data_text += f"订单流净值: {recent_data['delta'].iloc[-1]}\n" +data_text += f"堆积指标: {recent_data['dj'].iloc[-1]}\n" +# ...更多市场数据... +``` + +#### 2. AI分析要素 + +AI模型会综合分析以下关键因素: + +- **技术形态**:均线排列、K线形态、支撑阻力位 +- **订单流特征**:Delta趋势、堆积情况、买卖力量对比 +- **市场状态**:超买超卖、波动性、当前位置 +- **趋势强度**:价格动量、趋势持续性 +- **当前持仓**:持仓状态、盈亏情况、风险敞口 + +#### 3. 交易信号格式 + +AI模型返回的交易信号包含以下要素: + +``` +action: 开多/开空/平多/平空/不操作 +reason: 交易理由 +confidence: 置信度(1-10) +stop_loss: 止损价 +take_profit: 止盈价 +trailing_percent: 跟踪止损百分比 +``` + +例如,当系统检测到强势上涨趋势时,可能生成如下信号: + +``` +action: 开多 +reason: 均线形成多头排列,价格突破前期高点,订单流Delta累计持续走高 +confidence: 8 +stop_loss: 4382 +take_profit: 4425 +trailing_percent: 0.006 +``` + +#### 4. 信号质量控制 + +为确保交易信号的可靠性,系统采用多重过滤机制: + +- **置信度阈值**:只有置信度≥6的信号才会执行 +- **时效性检查**:超过15秒的信号将被忽略 +- **市场适应性**:AI会根据不同市场环境给出不同置信度 + +## 五、风险管理系统 + +风险控制是交易系统的生命线,本系统采用三层防护的止损体系。 + +### 风险管理层次图 + +``` +┌─────────────────────────────────────────┐ +│ 风险管理系统 │ +└───────────────┬─────────────────────────┘ + │ + ┌───────────┴───────────┐ + │ │ +┌───▼───┐ ┌────▼───┐ +│止损系统│ │平仓系统 │ +└───┬───┘ └────┬───┘ + │ │ + ▼ ▼ +┌───────────────┐ ┌──────────────┐ +│ 固定止损 │ │ 日内自动平仓 │ +└───────────────┘ └──────────────┘ +┌───────────────┐ ┌──────────────┐ +│ 跟踪止损 │ │ 反向信号平仓 │ +└───────────────┘ └──────────────┘ +┌───────────────┐ ┌──────────────┐ +│ AI动态止损 │ │ AI指令平仓 │ +└───────────────┘ └──────────────┘ +``` + +#### 1. 固定止损 + +固定止损是最基本的风险控制措施,在开仓时就设定了明确的止损价格: + +- **多头止损**:开仓价 × (1 - fixed_stop_loss_percent) +- **空头止损**:开仓价 × (1 + fixed_stop_loss_percent) + +默认固定止损比例为1%,可根据不同品种波动性调整。 + +#### 2. 跟踪止损 + +跟踪止损能够在保留利润空间的同时,为交易提供风险保护: + +```python +# 更新多头跟踪止损价 - 只在价格上涨时更新 +if stops['long']['trailing_stop'] > 0: + new_trailing_stop = current_bid * (1 - self.trailing_stop_percent) + if new_trailing_stop > stops['long']['trailing_stop']: + self.update_stop_order_dict(instrument_id, 'long', None, None, None, None, new_trailing_stop) +``` + +跟踪止损的工作原理: +- 随着价格向有利方向移动,止损价位也相应调整 +- 当价格回撤超过设定的百分比时,触发止损 +- 默认跟踪止损比例为0.5%,由AI模型根据市场波动性动态调整 + +#### 3. 日内平仓机制 + +系统设有日内自动平仓功能,避免隔夜风险: + +- **收盘平仓时间**:15:00-15:15 或 23:00-23:15 +- **平仓逻辑**:强制平掉所有持仓,无论盈亏 +- **禁开新仓**:平仓后设置day_closed标志,禁止当日再开新仓 + +## 六、持仓管理与数据存储 + +### 持仓数据结构 + +系统对每个合约独立管理持仓信息,使用嵌套字典结构: + +```python +self.stop_order_dict[instrument_id] = { + 'long': { + 'position': 0, # 多头持仓量 + 'entry_price': 0, # 开仓价格 + 'stop_loss': 0, # 止损价格 + 'take_profit': 0, # 止盈价格 + 'trailing_stop': 0 # 跟踪止损价格 + }, + 'short': { + 'position': 0, # 空头持仓量 + 'entry_price': 0, # 开仓价格 + 'stop_loss': 0, # 止损价格 + 'take_profit': 0, # 止盈价格 + 'trailing_stop': 0 # 跟踪止损价格 + } +} +``` + +### 数据存储结构 + +系统在`traderdata/`目录下保存以下数据文件: + +| 文件名 | 内容 | 用途 | +|-------|-----|------| +| `{合约代码}_ofdata.json` | 订单流历史数据 | 用于回测分析和模型训练 | +| `{合约代码}traderdata.csv` | 持仓和止损止盈数据 | 用于持仓状态恢复 | +| `{合约代码}_stops.json` | 详细止盈止损设置 | 用于风险管理参数存储 | + +这种数据存储设计允许系统在重启后能够恢复交易状态,避免信息丢失。 + +## 七、系统参数优化指南 + +### 关键参数对照表 + +| 参数名称 | 默认值 | 作用 | 调整建议 | +|---------|-------|-----|---------| +| py | 5 | 委托价格偏移量(跳数) | 低波动品种:1-3
高波动品种:5-10 | +| trailing_stop_percent | 0.005 | 跟踪止损百分比(0.5%) | 低波动品种:0.002-0.005
高波动品种:0.008-0.01 | +| fixed_stop_loss_percent | 0.01 | 固定止损百分比(1%) | 低波动品种:0.005-0.01
高波动品种:0.015-0.02 | +| Lots | 1 | 下单手数 | 根据资金量和风险偏好调整 | +| BAR_RESAMPLE_RULE | '1T' | K线时间粒度 | 短线:'1T'(1分钟)
中线:'5T'(5分钟)
长线:'15T'(15分钟) | +| trader_rows | 10 | AI分析触发的最小数据行数 | 高频:5
中频:10
低频:20或更高 | + +### 针对不同品种的优化建议 + +**商品期货(如螺纹钢、铜、原油)**: +- 波动性较大,建议使用较大的止损范围(1.5%-2%) +- K线粒度建议使用1分钟或5分钟 +- 委托价格偏移量设置较大(5-10跳) + +**金融期货(如股指、国债)**: +- 波动性相对较小,建议使用较小的止损范围(0.5%-1%) +- K线粒度建议使用5分钟或15分钟 +- 委托价格偏移量设置较小(1-3跳) + +## 八、常见应用场景 + +### 场景一:趋势突破交易 + +**市场特征**: +- 均线形成多头排列 +- 价格突破重要阻力位 +- 订单流Delta累计呈上升趋势 + +**系统响应**: +- AI识别趋势突破形态,给出高置信度开仓信号 +- 设置前期突破点下方的止损位置 +- 采用较小的跟踪止损比例,让利润奔跑 + +**典型执行流程图**: +``` +价格突破阻力位 → AI分析(8分置信度) → 开多信号 → +设置止损(阻力位下方) → 价格持续上涨 → +跟踪止损上移 → 最终获利平仓 +``` + +### 场景二:超买超卖反转交易 + +**市场特征**: +- 价格处于极端位置(日内位置>85%或<15%) +- 订单流指标与价格出现背离 +- K线形成反转形态(如吞没形态) + +**系统响应**: +- AI模型识别到反转信号,给出开仓建议 +- 设置相对紧密的止损位置 +- 目标价位设为前期支撑/阻力位 + +**典型执行流程图**: +``` +价格极度超买 → 订单流指标转弱 → +AI分析(7分置信度) → 开空信号 → +设置紧密止损 → 价格回落 → 目标价位获利了结 +``` + +## 九、系统优势与局限性 + +### 主要优势 + +1. **微观结构洞察**:通过订单流分析看清市场真实供需状态 +2. **智能决策能力**:大模型AI提供类似专业交易员的分析能力 +3. **自适应参数**:系统能根据市场状态动态调整风控参数 +4. **多层风险控制**:完善的止损体系保障资金安全 +5. **数据持久化**:交易状态保存与恢复机制,确保系统稳定性 + +### 局限性 + +1. **数据质量依赖**:订单流分析对行情数据质量要求较高 +2. **API成本**:大模型API调用存在成本,需考虑经济性 +3. **延迟问题**:AI分析存在延迟,不适合超短线交易 +4. **特殊行情**:在极端行情下,止损可能因滑点而失效 +5. **模型局限**:AI模型对某些特殊市场环境可能缺乏足够认知 + +## 十、操作指南 + +### 运行前准备 + +1. **环境配置**: + - Python 3.7-3.10 + - 安装相关依赖库:AlgoPlus、pandas、numpy、openai等 + - 创建必要的数据存储目录:traderdata/ + +2. **账户配置**: + ```python + # 模拟盘或实盘账户配置 + future_account = get_simulate_account( + investor_id='您的账户ID', + password='您的密码', + server_name='电信1', + subscribe_list=[b'au2506'], # 订阅的合约 + ) + ``` + +3. **API配置**: + ```python + # DeepSeek API配置 + api_key = "您的DeepSeek API密钥" + os.environ["OPENAI_API_KEY"] = api_key + ``` + +### 运行与监控 + +1. **启动系统**: + - 运行主程序文件:`python 实盘运行版本_版本6.py` + - 确认系统连接成功并开始接收数据 + +2. **运行监控**: + - 观察控制台输出的K线数据和订单流分析结果 + - 查看AI模型的分析结果和交易信号 + - 监控持仓状态和止损止盈位置 + +3. **常见问题排查**: + - API连接失败:检查API密钥和网络连接 + - 数据文件读写错误:检查目录权限和磁盘空间 + - 交易信号不执行:检查置信度是否满足阈值要求 + +## 结语 + +AI智能订单流交易策略系统通过融合订单流分析和人工智能决策,为期货交易提供了一套全自动化的解决方案。系统能够捕捉市场微观结构变化,洞察主力资金动向,并结合AI的理解能力做出合理的交易决策。 + +这套系统适合有一定编程和交易基础的用户,可以作为决策辅助工具或全自动交易系统使用。在实际应用中,请务必先在模拟环境中充分测试,并确保完全理解风险管理机制,保证资金安全。 + +**风险提示**:期货交易存在高风险,本系统仅供学习研究使用,实盘交易盈亏自负。请确保充分了解期货交易风险,根据自身风险承受能力谨慎投资。 \ No newline at end of file diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/README.md b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/README.md new file mode 100644 index 0000000..0a3ed0a --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/README.md @@ -0,0 +1,433 @@ +# AI智能订单流交易策略详细说明 + +## 项目简介 + +本项目是一个基于订单流分析与大语言模型(LLM)集成的智能期货交易系统,通过AlgoPlus接口对接CTP交易系统,实现全自动化的交易策略执行。系统核心特点是结合高频Tick数据订单流分析与人工智能决策系统,对期货市场进行实时监控、分析和交易。 + +### 技术架构 + +- **数据层**:通过CTP接口获取实时Tick数据 +- **分析层**:订单流分析、K线构建、技术指标计算 +- **决策层**:基于DeepSeek大模型的AI决策系统 +- **执行层**:自动化交易执行系统,包含风险控制模块 + +## 核心功能详解 + +### 1. 订单流数据处理 + +系统处理原始Tick数据,构建以下信息: +- **成交订单流**:分析每个价位的买入/卖出压力 +- **多空资金流向**:计算买卖力量对比指标 +- **堆积指标(DJ)**:识别主力资金大量买入卖出信号 +- **订单流趋势**:分析订单流累计变化趋势 +- **波动性指标**:监控市场情绪变化 + +### 2. 技术分析模块 + +系统自动构建并分析以下技术分析指标: +- **移动平均线**:5、10、20周期均线系统,监控均线形态(多头排列、空头排列、金叉、死叉) +- **K线形态识别**:自动识别大阳线、大阴线、十字星、吞没形态等经典K线组合 +- **趋势强度**:计算价格趋势的强度和持续性 +- **支撑阻力位**:自动识别近期关键价格区域 +- **超买超卖状态**:判断当前价格在日内区间的位置 + +### 3. AI决策系统 + +系统集成了DeepSeek大模型作为核心决策引擎: +- **市场状态识别**:全面分析当前市场环境 +- **交易信号生成**:产生开仓、平仓或调整持仓的信号 +- **风险参数建议**:动态优化止损止盈水平 +- **多层验证机制**:通过置信度评分过滤低质量信号 + +完整的交易决策包含: +- **方向**:开多/开空/平多/平空/不操作 +- **置信度**:1-10分级评估系统 +- **止损价**:推荐的止损位置 +- **止盈价**:推荐的止盈位置 +- **跟踪百分比**:针对当前市场波动性优化的跟踪止损参数 + +### 4. 风险控制系统 + +多层次风险管理机制: +- **固定止损**:基于开仓价设置硬性止损点 +- **跟踪止损**:随价格变动动态调整止损价位,锁定盈利 +- **日内平仓**:自动在交易时段结束前平仓,避免隔夜风险 +- **反向信号管理**:收到反向信号时智能处理现有持仓 +- **资金管理**:控制单笔交易风险占比 + +### 5. 数据存储与分析 + +系统自动保存交易和市场数据: +- **订单流历史数据**:以JSON格式保存,方便后续分析 +- **交易记录**:包含所有成交信息 +- **止损止盈设置**:记录每个合约的风险管理参数 +- **AI决策记录**:保存模型分析结果和建议 + +## 详细系统配置指南 + +### 环境要求 + +- **操作系统**:Windows 7/10/11 或 Linux (Ubuntu 18.04+) +- **Python版本**:Python 3.7-3.10(推荐3.8) +- **内存要求**:至少4GB RAM(推荐8GB以上) +- **存储空间**:至少500MB可用空间 +- **网络要求**:稳定的网络连接,低延迟 + +### 依赖安装 + +```bash +# 安装基础依赖 +pip install AlgoPlus +pip install pandas numpy +pip install python-dateutil + +# 安装AI模型依赖 +pip install openai +pip install requests + +``` + +### 详细配置选项 + +#### 1. 基础交易参数 + +可在`MyTrader`类初始化方法中修改: + +```python +# 基础交易参数 +self.py = 5 # 委托价格偏移量,单位跳数 +self.Lots = 1 # 每次开仓手数 +self.trailing_stop_percent = 0.005 # 跟踪止损百分比(0.5%) +self.fixed_stop_loss_percent = 0.01 # 固定止损百分比(1%) +self.dj_X = 1 # 订单流堆积参数阈值 + +# AI模型控制 +self.use_ai_model = True # 是否启用AI模型 +self.trader_rows = 10 # 触发AI分析的最小数据行数 + +# 日内交易控制 +self.day_closed = False # 日内平仓标志 +``` + +#### 2. 高级参数配置 + +在主程序中设置: + +```python +# 全局参数配置 +GLOBAL_LLM_CONFIG = { + 'api_key': 'your-api-key', # API密钥 + 'base_url': 'https://api.deepseek.com', # API基础URL + 'model_name': 'deepseek-reasoner' # 模型名称 +} + +# K线时间粒度设置 +BAR_RESAMPLE_RULE = '1T' # 1分钟K线 +# 其他可选值: +# '5T' - 5分钟K线 +# '15T' - 15分钟K线 +# '30T' - 30分钟K线 +# '1H' - 1小时K线 +# '4H' - 4小时K线 +# '5S' - 5秒K线 + +# 历史数据加载设置 +LOAD_HISTORY = False # 是否加载历史数据 +HISTORY_ROWS = 30 # 加载历史数据行数 +``` + +#### 3. 主力合约设置 + +在交易账户配置中设置要交易的合约: + +```python +# 模拟盘设置 +future_account = get_simulate_account( + investor_id='您的账户ID', + password='您的密码', + server_name='电信1', + # 订阅多个合约示例 + subscribe_list=[ + b'au2506', # 黄金主力合约 + b'rb2410', # 螺纹钢主力合约 + b'IF2406', # 沪深300指数期货主力合约 + b'cu2407' # 铜主力合约 + ], +) +``` + +## 详细使用指南 + +### 首次运行前准备 + +1. **创建必要目录**: + ```bash + mkdir -p traderdata logs + ``` + +2. **API密钥配置**: + 确保在代码中配置了正确的DeepSeek API密钥: + ```python + api_key = "您的API密钥" + os.environ["OPENAI_API_KEY"] = api_key + ``` + +3. **账户检查**: + - 模拟账户:确认Simnow账户可正常登录 + - 实盘账户:确认资金足够,交易权限已开通 + +4. **合约选择**: + - 建议从流动性好的品种开始,如螺纹钢(rb)、黄金(au)、沪深300(IF) + - 确保所选合约处于交易时段 + +### 运行系统 + +1. **启动主程序**: + ```bash + python 实盘运行版本_版本6.py + ``` + +2. **启动确认**: + - 确认系统显示"API连接测试成功" + - 确认系统正确连接到CTP服务器 + - 确认接收到Tick数据 + +3. **监控运行状态**: + - 观察新K线形成和订单流数据生成 + - 观察AI模型分析结果 + - 监控交易执行和持仓状态 + +### 高级操作指南 + +#### 多合约交易管理 + +系统支持同时监控多个合约,对每个合约独立生成交易信号和执行交易: + +1. **风险分散**:建议同时监控多个相关性低的品种 +2. **资金分配**:可通过调整`self.Lots`参数控制各合约下单手数 +3. **单独配置**:每个合约的止损止盈设置独立保存和管理 + +#### 自定义止损止盈策略 + +系统提供了多种止损止盈机制,可以根据不同市场环境调整: + +1. **固定止损**:适合趋势明确的市场 + ```python + self.fixed_stop_loss_percent = 0.01 # 1%止损 + ``` + +2. **跟踪止损**:适合波动较大的市场 + ```python + self.trailing_stop_percent = 0.005 # 0.5%跟踪止损 + ``` + +3. **动态止损**:由AI模型根据市场状态动态调整 + - 系统会根据波动性自动建议0.0001-0.001范围内的跟踪止损参数 + +#### 回测与优化 + +虽然本系统主要面向实盘交易,但可以通过以下方式进行策略评估: + +1. **离线数据分析**: + - 查看`traderdata/{合约代码}_ofdata.json`中的历史数据和AI决策记录 + - 分析交易成功率和盈亏比 + +2. **参数优化**: + - 针对不同品种调整`self.py`委托价格偏移量 + - 针对不同波动性市场调整止损止盈参数 + - 调整`trader_rows`参数控制AI分析触发频率 + +## 技术架构详解 + +### 多进程架构 + +系统采用多进程设计,实现行情和交易的分离: +- **行情进程**:专注于数据接收和处理 +- **交易进程**:负责交易决策和执行 +- **AI分析线程**:在后台异步运行,不阻塞主交易流程 + +``` +主程序 +│ +├── 行情进程 (run_tick_engine) +│ └── Tick数据处理 +│ ├── 构建K线 +│ └── 计算订单流指标 +│ +└── 交易进程 (run_trader) + ├── MyTrader实例 + │ ├── 交易逻辑处理 + │ ├── 止损止盈管理 + │ └── 日内平仓控制 + │ + └── AI分析线程 (background_model_call) + └── 交易信号生成 +``` + +### 数据流向 + +系统数据流向设计清晰,各模块职责明确: + +``` +CTP行情接口 → Tick数据 → K线构建 → 订单流分析 + ↓ +交易执行 ← 交易信号 ← AI模型分析 ← 市场数据融合 +``` + +### 核心类解析 + +#### `MyTrader`类 + +继承自`TraderApiBase`,实现以下核心功能: +- 处理交易回报和订单状态 +- 管理持仓和风险控制 +- 协调AI模型交易决策 +- 执行交易指令 + +关键方法: +- `background_model_call`:调用AI模型进行分析 +- `check_stop_conditions`:检查止损止盈条件 +- `clear_position_info`:清理持仓信息 +- `format_data_for_llm`:格式化数据供AI模型分析 + +#### AI决策系统 + +`call_deepseek_model`函数负责调用DeepSeek大模型: +- 采用重试机制确保API调用可靠性 +- 解析AI模型返回的交易信号 +- 处理异常情况和错误 + +## 故障排除 + +### 常见问题与解决方案 + +1. **CTP连接问题** + - **症状**:无法连接到CTP服务器或频繁断连 + - **解决方案**: + - 检查网络连接稳定性 + - 确认服务器地址和端口正确 + - 检查账户密码是否正确 + +2. **AI模型调用失败** + - **症状**:"API调用失败"错误 + - **解决方案**: + - 验证API密钥有效性 + - 检查网络能否访问DeepSeek API + - 查看是否达到API调用限制 + +3. **数据文件读写错误** + - **症状**:"读取或保存JSON文件时出错" + - **解决方案**: + - 确认traderdata目录存在且有写权限 + - 检查磁盘空间是否充足 + - 确保没有其他程序锁定目标文件 + +4. **交易执行问题** + - **症状**:交易信号生成但未执行 + - **解决方案**: + - 检查置信度是否达到执行阈值(≥6) + - 确认是否在交易时段内 + - 确认是否有足够可用资金 + +### 日志与调试 + +系统提供详细的控制台输出用于监控和调试: + +``` +===== 开始AI分析 [15:30:45] ===== +正在分析合约: au2506 +分析数据行数: 25 +最新价格: 486.35 +... +AI模型分析完成,结果已放入队列,耗时: 5.32秒 +分析结果: {'action': '开多', 'confidence': 8, 'reason': '订单流持续为正...'} +===== AI分析完成 ===== + +===== 执行AI模型交易信号 [15:30:53] ===== +信号生成时间: 15:30:50 +信号类型: 开多 +置信度: 8 +理由: 订单流持续为正... +... +执行开多操作 +设置止损价: 482.35, 止盈价: 489.28, 跟踪止损价: 483.72, 跟踪百分比: 0.500% +===== 交易信号执行完成 ===== +``` + +## 性能优化建议 + +1. **降低API调用频率**: + - 增加`trader_rows`参数值,减少AI模型调用频率 + - 在低波动时段可考虑暂时禁用AI分析 + +2. **优化数据存储**: + - 定期清理过时的历史数据文件 + - 使用更高效的数据结构和存储格式 + +3. **减少不必要的计算**: + - 调整K线时间粒度,避免过于频繁的处理 + - 针对性能瓶颈部分进行代码优化 + +## 进阶开发指南 + +### 自定义扩展 + +系统设计具有良好的扩展性,可以在以下方面进行自定义开发: + +1. **增加新的技术指标**: + 在`format_data_for_llm`方法中添加新的技术分析指标 + +2. **优化订单流算法**: + 修改`GetOrderFlow_dj`函数,实现更精细的订单流分析 + +3. **扩展风险管理策略**: + 在`check_stop_conditions`中实现更复杂的止损止盈策略 + +4. **自定义AI提示词**: + 修改`call_deepseek_model`函数中的prompt变量,优化AI分析效果 + +### 集成其他AI模型 + +除了默认的DeepSeek模型,系统架构支持集成其他AI服务: + +```python +# 使用其他LLM服务示例 +def call_alternative_model(data_df, trader_instance): + # 配置新的客户端 + client = AlternativeClient(api_key="your-api-key") + + # 准备数据 + data_text = trader_instance.format_data_for_llm(data_df) + + # 调用API + response = client.chat(prompt=data_text) + + # 解析结果 + trading_signal = parse_response(response) + + return trading_signal +``` + +## 资产风险声明 + +本交易系统仅供学习和研究使用,实际交易存在以下风险: + +1. **市场风险**:期货市场波动可能导致重大损失 +2. **系统风险**:软件故障、网络延迟等可能影响交易执行 +3. **模型风险**:AI分析并非100%准确,可能做出错误判断 +4. **流动性风险**:某些合约在特定时段可能缺乏足够流动性 +5. **操作风险**:参数设置不当可能导致意外损失 + +使用本系统进行实盘交易,盈亏自负。请确保充分了解期货交易风险,谨慎投资。 + +## 技术支持与更新 + +本系统仍在持续完善中,欢迎提供反馈和建议。使用过程中如遇问题,请提供以下信息: + +1. 系统运行环境(操作系统版本、Python版本) +2. 完整的错误信息和日志 +3. 问题发生时的操作步骤 + +## 版权声明 + +本策略代码版权归作者所有,仅供个人学习使用,禁止商业传播和销售。 \ No newline at end of file diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/专享策略20_基于LLM的订单流日内交易策略.py b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/专享策略20_基于LLM的订单流日内交易策略.py new file mode 100644 index 0000000..2a5f96c --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/专享策略20_基于LLM的订单流日内交易策略.py @@ -0,0 +1,2140 @@ +''' +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +该代码的主要目的是处理Tick数据并生成交易信号。代码中定义了一个tickcome函数,它接收到Tick数据后会进行一系列的处理,包括构建Tick字典、更新上一个Tick的成交量、保存Tick数据、生成K线数据等。其中涉及到的一些函数有: + +on_tick(tick): 处理单个Tick数据,根据Tick数据生成K线数据。 +tickdata(df, symbol): 处理Tick数据,生成K线数据。 +orderflow_df_new(df_tick, df_min, symbol): 处理Tick和K线数据,生成订单流数据。 +GetOrderFlow_dj(kData): 计算订单流的信号指标。 +除此之外,代码中还定义了一个MyTrader类,继承自TraderApiBase,用于实现交易相关的功能。 +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 +''' +from multiprocessing import Process, Queue +from AlgoPlus.CTP.MdApi import run_tick_engine +from AlgoPlus.CTP.FutureAccount import get_simulate_account +from AlgoPlus.CTP.FutureAccount import FutureAccount +from AlgoPlus.CTP.TraderApiBase import TraderApiBase +from AlgoPlus.ta.time_bar import tick_to_bar +import pandas as pd +from datetime import datetime +from datetime import time as s_time +import operator +import time +import numpy as np +import os +import re +import json +import requests # 添加requests库用于API调用 +from openai import OpenAI # 导入OpenAI客户端 +import threading +from queue import Queue as ThreadQueue +import warnings +warnings.filterwarnings("ignore", category=FutureWarning) + +# 在文件顶部定义全局变量 +tickdatadict = {} # 存储Tick数据的字典 +quotedict = {} # 存储行情数据的字典 +ofdatadict = {} # 存储K线数据的字典 +trader_df = pd.DataFrame({}) # 存储交易数据的DataFrame对象 +previous_volume = {} # 上一个Tick的成交量 +tsymbollist={} +# 全局LLM配置变量 +GLOBAL_LLM_CONFIG = {} # 全局大模型配置参数 +# 全局交易信号队列,用于存储AI模型生成的交易信号 +AI_SIGNAL_QUEUE = ThreadQueue() +# 标记是否有AI线程正在运行 +AI_THREAD_RUNNING = False +# K线时间粒度 +BAR_RESAMPLE_RULE = '1T' # 设置K线时间粒度,默认1分钟 + + +def tickcome(md_queue): + global previous_volume + + data=md_queue + instrument_id = data['InstrumentID'].decode() # 品种代码 + ActionDay = data['ActionDay'].decode() # 交易日日期 + update_time = data['UpdateTime'].decode() # 更新时间 + #zzg_quant + update_millisec = str(data['UpdateMillisec']) # 更新毫秒数 + created_at = ActionDay[:4] + '-' + ActionDay[4:6] + '-' + ActionDay[6:] + ' ' + update_time + '.' + update_millisec #创建时间 + # 构建tick字典 + tick = { + 'symbol': instrument_id, # 品种代码和交易所ID + 'created_at':datetime.strptime(created_at, "%Y-%m-%d %H:%M:%S.%f"), + #'created_at': created_at, # 创建时间 + 'price': float(data['LastPrice']), # 最新价 + 'last_volume': int(data['Volume']) - previous_volume.get(instrument_id, 0) if previous_volume.get(instrument_id, 0) != 0 else 0, # 瞬时成交量 + 'bid_p': float(data['BidPrice1']), # 买价 + 'bid_v': int(data['BidVolume1']), # 买量 + 'ask_p': float(data['AskPrice1']), # 卖价 + 'ask_v': int(data['AskVolume1']), # 卖量 + 'UpperLimitPrice': float(data['UpperLimitPrice']), # 涨停价 + 'LowerLimitPrice': float(data['LowerLimitPrice']), # 跌停价 + 'TradingDay': data['TradingDay'].decode(), # 交易日日期 + 'cum_volume': int(data['Volume']), # 最新总成交量 + 'cum_amount': float(data['Turnover']), # 最新总成交额 + 'cum_position': int(data['OpenInterest']), # 合约持仓量 + } + # 更新上一个Tick的成交量 + previous_volume[instrument_id] = int(data['Volume']) + if tick['last_volume']>0: + #print(tick['created_at'],'vol:',tick['last_volume']) + # 处理Tick数据 + on_tick(tick) + + +def can_time(hour, minute): + hour = str(hour) + minute = str(minute) + if len(minute) == 1: + minute = "0" + minute + return int(hour + minute) + +def on_tick(tick): + + tm=can_time(tick['created_at'].hour,tick['created_at'].minute) + #print(tick['symbol']) + #print(1) + #if tm>1500 and tm<2100 : + # return + if tick['last_volume']==0: + return + quotes = tick + timetick=str(tick['created_at']).replace('+08:00', '') + tsymbol=tick['symbol'] + if tsymbol not in tsymbollist.keys(): + # 获取tick的买卖价和买卖量 + #zzg_quant + tsymbollist[tsymbol]=tick + bid_p=quotes['bid_p'] + ask_p=quotes['ask_p'] + bid_v=quotes['bid_v'] + ask_v=quotes['ask_v'] + else: + # 获取上一个tick的买卖价和买卖量 + rquotes =tsymbollist[tsymbol] + bid_p=rquotes['bid_p'] + ask_p=rquotes['ask_p'] + bid_v=rquotes['bid_v'] + ask_v=rquotes['ask_v'] + tsymbollist[tsymbol]=tick + tick_dt=pd.DataFrame({'datetime':timetick,'symbol':tick['symbol'],'mainsym':tick['symbol'].rstrip('0123456789').upper(),'lastprice':tick['price'], + 'vol':tick['last_volume'], + 'bid_p':bid_p,'ask_p':ask_p,'bid_v':bid_v,'ask_v':ask_v},index=[0]) + sym = tick_dt['symbol'][0] + #print(tick_dt) + tickdata(tick_dt,sym) + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def data_of(df): + global trader_df + # 将df数据合并到trader_df中 + trader_df = pd.concat([trader_df, df], ignore_index=True) + #print('trader_df: ', len(trader_df)) + #print(trader_df) + +def process(bidDict, askDict, symbol): + try: + # 尝试从quotedict中获取对应品种的报价数据 + dic = quotedict[symbol] + bidDictResult = dic['bidDictResult'] + askDictResult = dic['askDictResult'] + except: + # 如果获取失败,则初始化bidDictResult和askDictResult为空字典 + bidDictResult, askDictResult = {}, {} + + # 将所有买盘字典和卖盘字典的key合并,并按升序排序 + sList = sorted(set(list(bidDict.keys()) + list(askDict.keys()))) + + # 遍历所有的key,将相同key的值进行累加 + for s in sList: + if s in bidDict: + if s in bidDictResult: + bidDictResult[s] = int(bidDict[s]) + bidDictResult[s] + else: + bidDictResult[s] = int(bidDict[s]) + if s not in askDictResult: + askDictResult[s] = 0 + else: + if s in askDictResult: + askDictResult[s] = int(askDict[s]) + askDictResult[s] + else: + askDictResult[s] = int(askDict[s]) + if s not in bidDictResult: + bidDictResult[s] = 0 + + # 构建包含bidDictResult和askDictResult的字典,并存入quotedict中 + df = {'bidDictResult': bidDictResult, 'askDictResult': askDictResult} + quotedict[symbol] = df + + return bidDictResult, askDictResult +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + +def tickdata(df,symbol): + tickdata =pd.DataFrame({'datetime':df['datetime'],'symbol':df['symbol'],'lastprice':df['lastprice'], + 'volume':df['vol'],'bid_p':df['bid_p'],'bid_v':df['bid_v'],'ask_p':df['ask_p'],'ask_v':df['ask_v']}) + try: + if symbol in tickdatadict.keys(): + rdf=tickdatadict[symbol] + rdftm=pd.to_datetime(rdf['bartime'][0]).strftime('%Y-%m-%d %H:%M:%S') + now=str(tickdata['datetime'][0]) + if now>rdftm: + try: + oo=ofdatadict[symbol] + data_of(oo) + #print('oo',oo) + if symbol in quotedict.keys(): + quotedict.pop(symbol) + if symbol in tickdatadict.keys(): + tickdatadict.pop(symbol) + if symbol in ofdatadict.keys(): + ofdatadict.pop(symbol) + except IOError as e: + print('rdftm捕获到异常',e) + tickdata['bartime'] = pd.to_datetime(tickdata['datetime']) + tickdata['open'] = tickdata['lastprice'] + tickdata['high'] = tickdata['lastprice'] + tickdata['low'] = tickdata['lastprice'] + tickdata['close'] = tickdata['lastprice'] + tickdata['starttime'] = tickdata['datetime'] + else: + tickdata['bartime'] = rdf['bartime'] + tickdata['open'] = rdf['open'] + tickdata['high'] = max(tickdata['lastprice'].values,rdf['high'].values) + tickdata['low'] = min(tickdata['lastprice'].values,rdf['low'].values) + tickdata['close'] = tickdata['lastprice'] + tickdata['volume']=df['vol']+rdf['volume'].values + tickdata['starttime'] = rdf['starttime'] + else : + print('新bar的第一个tick进入') + tickdata['bartime'] = pd.to_datetime(tickdata['datetime']) + tickdata['open'] = tickdata['lastprice'] + tickdata['high'] = tickdata['lastprice'] + tickdata['low'] = tickdata['lastprice'] + tickdata['close'] = tickdata['lastprice'] + tickdata['starttime'] = tickdata['datetime'] + except IOError as e: + print('捕获到异常',e) + + + tickdata['bartime'] = pd.to_datetime(tickdata['bartime']) + bardata = tickdata.resample(on = 'bartime', rule = BAR_RESAMPLE_RULE, label = 'right', closed = 'right').agg({'starttime':'first','symbol':'last','open':'first','high':'max','low':'min','close':'last','volume':'sum'}).reset_index(drop = False) + bardata =bardata.dropna().reset_index(drop = True) + bardata['bartime'] = pd.to_datetime(bardata['bartime'][0]).strftime('%Y-%m-%d %H:%M:%S') + tickdatadict[symbol]=bardata + tickdata['volume']=df['vol'].values + #print(bardata['symbol'].values,bardata['bartime'].values) + orderflow_df_new(tickdata,bardata,symbol) + # time.sleep(0.5) + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def orderflow_df_new(df_tick,df_min,symbol): + startArray = pd.to_datetime(df_min['starttime']).values + voluememin= df_min['volume'].values + highs=df_min['high'].values + lows=df_min['low'].values + opens=df_min['open'].values + closes=df_min['close'].values + #endArray = pd.to_datetime(df_min['bartime']).values + endArray = df_min['bartime'].values + #print(endArray) + deltaArray = np.zeros((len(endArray),)) + tTickArray = pd.to_datetime(df_tick['datetime']).values + bp1TickArray = df_tick['bid_p'].values + ap1TickArray = df_tick['ask_p'].values + lastTickArray = df_tick['lastprice'].values + volumeTickArray = df_tick['volume'].values + symbolarray = df_tick['symbol'].values + indexFinal = 0 + for index,tEnd in enumerate(endArray): + dt=endArray[index] + start = startArray[index] + bidDict = {} + askDict = {} + bar_vol=voluememin[index] + bar_close=closes[index] + bar_open=opens[index] + bar_low=lows[index] + bar_high=highs[index] + bar_symbol=symbolarray[index] + # for indexTick in range(indexFinal,len(df_tick)): + # if tTickArray[indexTick] >= tEnd: + # break + # elif (tTickArray[indexTick] >= start) & (tTickArray[indexTick] < tEnd): + Bp = round(bp1TickArray[0],4) + Ap = round(ap1TickArray[0],4) + LastPrice = round(lastTickArray[0],4) + Volume = volumeTickArray[0] + if LastPrice >= Ap: + if str(LastPrice) in askDict.keys(): + askDict[str(LastPrice)] += Volume + else: + askDict[str(LastPrice)] = Volume + if LastPrice <= Bp: + if str(LastPrice) in bidDict.keys(): + bidDict[str(LastPrice)] += Volume + else: + bidDict[str(LastPrice)] = Volume + # indexFinal = indexTick + bidDictResult,askDictResult = process(bidDict,askDict,symbol) + bidDictResult=dict(sorted(bidDictResult.items(),key=operator.itemgetter(0))) + askDictResult=dict(sorted(askDictResult.items(),key=operator.itemgetter(0))) + prinslist=list(bidDictResult.keys()) + asklist=list(askDictResult.values()) + bidlist=list(bidDictResult.values()) + delta=(sum(askDictResult.values()) - sum(bidDictResult.values())) + #print(prinslist,asklist,bidlist) + #print(len(prinslist),len(bidDictResult),len(askDictResult)) + df=pd.DataFrame({'price':pd.Series([prinslist]),'Ask':pd.Series([asklist]),'Bid':pd.Series([bidlist])}) + #df=pd.DataFrame({'price':pd.Series(bidDictResult.keys()),'Ask':pd.Series(askDictResult.values()),'Bid':pd.Series(bidDictResult.values())}) + df['symbol']=bar_symbol + df['datetime']=dt + df['delta']=str(delta) + df['close']=bar_close + df['open']=bar_open + df['high']=bar_high + df['low']=bar_low + df['volume']=bar_vol + #df['ticktime']=tTickArray[0] + df['dj'] = GetOrderFlow_dj(df) + ofdatadict[symbol]=df + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def GetOrderFlow_dj(kData): + Config = { + 'Value1': 3, + 'Value2': 3, + 'Value3': 3, + 'Value4': True, + } + aryData = kData + djcout = 0 + + # 遍历kData中的每一行,计算djcout指标 + for index, row in aryData.iterrows(): + kItem = aryData.iloc[index] + high = kItem['high'] + low = kItem['low'] + close = kItem['close'] + open = kItem['open'] + dtime = kItem['datetime'] + price_s = kItem['price'] + Ask_s = kItem['Ask'] + Bid_s = kItem['Bid'] + delta = kItem['delta'] + + price_s = price_s + Ask_s = Ask_s + Bid_s = Bid_s + + gj = 0 + xq = 0 + gxx = 0 + xxx = 0 + + # 遍历price_s中的每一个元素,计算相关指标 + for i in np.arange(0, len(price_s), 1): + duiji = { + 'price': 0, + 'time': 0, + 'longshort': 0, + } + + if i == 0: + delta = delta + + order= { + "Price":price_s[i], + "Bid":{ "Value":Bid_s[i]}, + "Ask":{ "Value":Ask_s[i]} + } + #空头堆积 + if i >= 0 and i < len(price_s) - 1: + if (order["Bid"]["Value"] > Ask_s[i + 1] * int(Config['Value1'])): + gxx += 1 + gj += 1 + if gj >= int(Config['Value2']) and Config['Value4'] == True: + duiji['price'] = price_s[i] + duiji['time'] = dtime + duiji['longshort'] = -1 + if float(duiji['price']) > 0: + djcout += -1 + else: + gj = 0 + #多头堆积 + if i >= 1 and i <= len(price_s) - 1: + if (order["Ask"]["Value"] > Bid_s[i - 1] * int(Config['Value1'])): + xq += 1 + xxx += 1 + if xq >= int(Config['Value2']) and Config['Value4'] == True: + duiji['price'] = price_s[i] + duiji['time'] = dtime + duiji['longshort'] = 1 + if float(duiji['price']) > 0: + djcout += 1 + else: + xq = 0 + + # 返回计算得到的djcout值 + return djcout + +#交易程序--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +class MyTrader(TraderApiBase): + def __init__(self, broker_id, td_server, investor_id, password, app_id, auth_code, md_queue=None, page_dir='', private_resume_type=2, public_resume_type=2): + # Cython类不使用super().__init__()方式调用父类初始化方法 + # TraderApiBase.__init__会由Cython自动处理 + + self.py=30 #设置委托价格的偏移,更加容易促成成交。仅螺纹,其他品种根据最小点波动,自己设置 + self.cont_df=0 + self.trailing_stop_percent = 0.005 #跟踪出场参数,从0.02减小到0.005 + self.fixed_stop_loss_percent = 0.01 #固定出场参数 + self.dj_X=1 #开仓的堆积参数 + + self.pos=0 + self.Lots=1 #下单手数 + self.short_trailing_stop_price = 0 + self.long_trailing_stop_price = 0 + self.sl_long_price=0 + self.sl_shor_price=0 + self.out_long=0 + self.out_short=0 + self.clearing_executed=False + self.day_closed = False # 添加日内平仓标志 + self.kgdata = True #历史数据加载一次 + self.holddata=True #持仓数据加载一次 + self.use_ai_model = True # 是否使用AI模型来分析 + + # 新增止盈止损字典,按合约ID索引 + self.stop_order_dict = {} + + # 新增历史数据加载相关参数 + self.load_history = False # 是否加载历史数据 + self.history_rows = 30 # 默认加载30行历史数据 + self.trader_rows = 10 # 当tader_df里的数据大于10行时开始计算指标及触发AI模型 + + def load_history_data(self, instrument_id): + """ + 加载历史数据 + + Args: + instrument_id: 合约ID + """ + if not self.load_history: + return + + try: + # 不再只提取英文字母,使用完整的合约代码 + symbol = str(instrument_id) + json_file_path = f"traderdata/{symbol}_ofdata.json" + + # 检查traderdata目录是否存在 + if not os.path.exists("traderdata"): + print(f"traderdata目录不存在,创建目录") + os.makedirs("traderdata") + + if os.path.exists(json_file_path): + try: + # 读取JSON文件,使用lines=True确保正确读取每行JSON + df = pd.read_json(json_file_path, lines=True) + + if len(df) == 0: + print(f"历史数据文件为空: {json_file_path}") + print("将使用实时数据开始交易") + return False + + # 如果数据行数超过设定的历史行数,只取最后N行 + if len(df) > self.history_rows: + df = df.tail(self.history_rows) + print(f"历史数据超过设定行数,仅加载最后{self.history_rows}行") + + # 更新全局trader_df + global trader_df + trader_df = df + + print(f"\n===== 历史数据加载成功 =====") + print(f"合约: {instrument_id}") + print(f"数据行数: {len(df)}行") + print(f"数据时间范围: {df['datetime'].iloc[0]} 到 {df['datetime'].iloc[-1]}") + print(f"最新价格: {df['close'].iloc[-1]}") + print(f"最新成交量: {df['volume'].iloc[-1]}") + print("===========================\n") + + # 更新cont_df + self.cont_df = len(df) + + # 计算日均线 + if len(df) > 0: + df['dayma'] = df['close'].mean() + + # 计算累积的delta值 + df['delta'] = df['delta'].astype(float) + df['delta累计'] = df['delta'].cumsum() + + return True + except Exception as e: + print(f"\n===== 历史数据加载错误 =====") + print(f"合约: {instrument_id}") + print(f"读取JSON错误: {e}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + else: + print(f"\n===== 历史数据加载提示 =====") + print(f"合约: {instrument_id}") + print(f"未找到历史数据文件: {json_file_path}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + + except Exception as e: + print(f"\n===== 历史数据加载错误 =====") + print(f"合约: {instrument_id}") + print(f"错误信息: {e}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + + #读取保存的数据 + def read_to_csv(self,symbol): + # 文件夹路径和文件路径 + # 使用完整的合约代码 + symbol = str(symbol) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}traderdata.csv") + # 如果文件夹不存在则创建 + if not os.path.exists(folder_path): + os.makedirs(folder_path) + + # 读取保留的模型数据CSV文件 + if os.path.exists(file_path): + df = pd.read_csv(file_path) + if not df.empty and self.holddata==True: + # 选择最后一行数据 + row = df.iloc[-1] + # 根据CSV文件的列名将数据赋值给相应的属性 + self.pos = int(row['pos']) + self.short_trailing_stop_price = float(row['short_trailing_stop_price']) + self.long_trailing_stop_price = float(row['long_trailing_stop_price']) + self.sl_long_price = float(row['sl_long_price']) + self.sl_shor_price = float(row['sl_shor_price']) + # self.out_long = int(row['out_long']) + # self.out_short = int(row['out_short']) + print("找到历史交易数据文件,已经更新持仓,止损止盈数据", df.iloc[-1]) + self.holddata=False + else: + pass + #print("没有找到历史交易数据文件", file_path) + #如果没有找到CSV,则初始化变量 + + pass + + #保存数据 + def save_to_csv(self,symbol): + # 使用完整的合约代码 + symbol = str(symbol) + # 创建DataFrame + data = { + 'datetime': [datetime.now().strftime('%Y-%m-%d %H:%M:%S')], # 使用当前时间 + 'pos': [self.pos], + 'short_trailing_stop_price': [self.short_trailing_stop_price], + 'long_trailing_stop_price': [self.long_trailing_stop_price], + 'sl_long_price': [self.sl_long_price], + 'sl_shor_price': [self.sl_shor_price], + } + + df = pd.DataFrame(data) + + # 将DataFrame保存到CSV文件 + df.to_csv(f"traderdata/{symbol}traderdata.csv", index=False) + + #每日收盘重置数据 + def day_data_reset(self,data): + # 获取当前时间 + current_time = datetime.now().time() + + # 第一时间范围 + clearing_time1_start = s_time(14,55) + clearing_time1_end = s_time(15,00) + + # 第二时间范围 + clearing_time2_start = s_time(2,25) + clearing_time2_end = s_time(2,30) + + current_bid = float(data['BidPrice1']) # 当前买价 + current_ask = float(data['AskPrice1']) # 当前卖价 + + # 创建一个标志变量,用于记录是否已经执行过 + self.clearing_executed = False + # 检查当前时间第一个操作的时间范围内 + if clearing_time1_start <= current_time <= clearing_time1_end and not self.clearing_executed : + self.clearing_executed = True # 设置标志变量为已执行 + + # 如果有持仓,强制平仓 + if self.pos != 0: + print("交易日结束,开始强制平仓") + # 遍历所有合约发送平仓指令 + for instrument_id in list(self.stop_order_dict.keys()): + stops = self.stop_order_dict[instrument_id] + + # 平多仓 + if stops['long']['position'] > 0: + print(f"发送平多仓指令: {instrument_id}, 手数: {stops['long']['position']}, 价格: {current_bid}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_bid - self.py, + stops['long']['position'], + b'1', b'3') + # 平空仓 + if stops['short']['position'] > 0: + print(f"发送平空仓指令: {instrument_id}, 手数: {stops['short']['position']}, 价格: {current_ask}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_ask + self.py, + stops['short']['position'], + b'0', b'3') + + # 清空所有合约的持仓信息 + for instrument_id in list(self.stop_order_dict.keys()): + self.clear_position_info(instrument_id, 'all') + self.day_closed = True # 设置日内平仓标志 + print("日内交易已结束,禁止开新仓") + + # 检查当前时间是否在第二个操作的时间范围内 + elif clearing_time2_start <= current_time <= clearing_time2_end and not self.clearing_executed : + self.clearing_executed = True # 设置标志变量为已执行 + + # 如果有持仓,强制平仓 + if self.pos != 0: + print("交易日结束,开始强制平仓") + # 遍历所有合约发送平仓指令 + for instrument_id in list(self.stop_order_dict.keys()): + stops = self.stop_order_dict[instrument_id] + + # 平多仓 + if stops['long']['position'] > 0: + print(f"发送平多仓指令: {instrument_id}, 手数: {stops['long']['position']}, 价格: {current_bid}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_bid - self.py, + stops['long']['position'], + b'1', b'3') + # 平空仓 + if stops['short']['position'] > 0: + print(f"发送平空仓指令: {instrument_id}, 手数: {stops['short']['position']}, 价格: {current_ask}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_ask + self.py, + stops['short']['position'], + b'0', b'3') + + # 清空所有合约的持仓信息 + for instrument_id in list(self.stop_order_dict.keys()): + self.clear_position_info(instrument_id, 'all') + self.day_closed = True # 设置日内平仓标志 + print("日内交易已结束,禁止开新仓") + else: + self.clearing_executed = False + # 在新交易日开始时重置日内平仓标志 + if current_time < clearing_time1_start or (current_time > clearing_time1_end and current_time < clearing_time2_start): + self.day_closed = False + return self.clearing_executed + + def OnRtnTrade(self, pTrade): + print("||成交回报||", pTrade) + + # 获取成交信息 + instrument_id = pTrade['InstrumentID'].decode() + direction = pTrade['Direction'].decode() # '0'为买入,'1'为卖出 + offset_flag = pTrade['OffsetFlag'].decode() # '0'为开仓,'1'为平仓,'3'为平今 + volume = pTrade['Volume'] + price = pTrade['Price'] + + # 根据成交类型更新持仓信息 + if offset_flag in ['1', '3']: # 平仓或平今 + # 判断平的是多头还是空头 + if direction == '1': # 卖出,平多头 + print(f"平多头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + else: # 买入,平空头 + print(f"平空头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + + elif offset_flag == '0': # 开仓 + if direction == '0': # 买入,开多头 + print(f"开多头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 如果有空头持仓,先清空 + if instrument_id in self.stop_order_dict and self.stop_order_dict[instrument_id]['short']['position'] > 0: + self.clear_position_info(instrument_id, 'short') + + # 设置多头持仓信息 + sl_price = price * (1 - self.fixed_stop_loss_percent) # 默认止损价 + tp_price = price * (1 + self.trailing_stop_percent) # 默认止盈价 + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = price * (1 - self.trailing_stop_percent) + + print(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新多头持仓信息,设置合理的跟踪止损初始值 + self.update_stop_order_dict(instrument_id, 'long', volume, price, sl_price, tp_price, initial_trailing_stop) + self.pos = volume # 更新全局持仓状态 + + # 兼容旧代码 + self.long_trailing_stop_price = initial_trailing_stop + self.sl_long_price = sl_price + self.save_to_csv(instrument_id) + + else: # 卖出,开空头 + print(f"开空头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 如果有多头持仓,先清空 + if instrument_id in self.stop_order_dict and self.stop_order_dict[instrument_id]['long']['position'] > 0: + self.clear_position_info(instrument_id, 'long') + + # 设置空头持仓信息 + sl_price = price * (1 + self.fixed_stop_loss_percent) # 默认止损价 + tp_price = price * (1 - self.trailing_stop_percent) # 默认止盈价 + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = price * (1 + self.trailing_stop_percent) + + print(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新空头持仓信息,设置合理的跟踪止损初始值 + self.update_stop_order_dict(instrument_id, 'short', self.Lots, price, sl_price, tp_price, initial_trailing_stop) + self.pos = -1 # 更新全局持仓状态 + + # 兼容旧代码 + self.short_trailing_stop_price = initial_trailing_stop + self.sl_shor_price = sl_price + self.save_to_csv(instrument_id) + + def OnRspOrderInsert(self, pInputOrder, pRspInfo, nRequestID, bIsLast): + print("||OnRspOrderInsert||", pInputOrder, pRspInfo, nRequestID, bIsLast) + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + # 订单状态通知 + def OnRtnOrder(self, pOrder): + print("||订单回报||", pOrder) + + def Join(self): + data = None + # 记录上次加载止盈止损信息的时间和合约 + last_load_time = {} + + while True: + if self.status == 0: + + while not self.md_queue.empty(): + data = self.md_queue.get(block=False) + instrument_id = data['InstrumentID'].decode() # 品种代码 + + # 首次运行时加载历史数据 + if self.kgdata: + self.load_history_data(instrument_id) + self.kgdata = False + + # 加载该合约的止盈止损信息,避免频繁加载 + current_time = time.time() + if instrument_id not in last_load_time or current_time - last_load_time.get(instrument_id, 0) > 60: # 每60秒才重新加载一次 + self.load_stop_orders_from_file(instrument_id) + last_load_time[instrument_id] = current_time + + # 检查止盈止损条件 + self.check_stop_conditions(data) + + # 在每个tick都检查和处理AI交易信号 - 移到这里以提高执行速度 + if self.use_ai_model: + self.check_and_process_ai_signals(data) + + # 原有代码... + self.read_to_csv(instrument_id) + self.day_data_reset(data) + tickcome(data) + #新K线开始,启动交易程序 and 保存行情数据 + if len(trader_df)>self.cont_df and len(trader_df)>0: + # 计算日均线 + trader_df['dayma'] = trader_df['close'].mean() + + # 计算累积的delta值 + trader_df['delta'] = trader_df['delta'].astype(float) + trader_df['delta累计'] = trader_df['delta'].cumsum() + + # 检查文件是否存在 + json_file_path = f"traderdata/{instrument_id}_ofdata.json" + if os.path.exists(json_file_path): + try: + # 读取现有数据 + existing_df = pd.read_json(json_file_path, lines=True) + # 合并新数据 + combined_df = pd.concat([existing_df, trader_df.tail(1)], ignore_index=True) + # 保存合并后的数据,使用lines=True确保每行是独立的JSON对象 + combined_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + except Exception as e: + print(f"读取或保存JSON文件时出错: {e}") + # 如果读取出错,直接保存当前数据 + trader_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + else: + # 创建新文件并保存整个DataFrame + trader_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + + # 更新跟踪止损价格 - 兼容旧版本代码 + if self.long_trailing_stop_price >0 and self.pos>0: + self.long_trailing_stop_price = trader_df['low'].iloc[-1] if self.long_trailing_stop_price0 and self.pos<0: + self.short_trailing_stop_price = trader_df['high'].iloc[-1] if trader_df['high'].iloc[-1] self.trader_rows: + AI_THREAD_RUNNING = True + ai_thread = threading.Thread( + target=self.background_model_call, + args=(trader_df, instrument_id) + ) + ai_thread.daemon = True # 设置为守护线程,主程序退出时自动结束 + ai_thread.start() + print("启动AI分析线程...") + + print(trader_df) + self.cont_df=len(trader_df) + else: + time.sleep(1) + + def background_model_call(self, data_df, instrument_id): + """ + 在后台线程中调用大模型,并将交易信号放入队列 + + Args: + data_df: 包含订单流数据的DataFrame + instrument_id: 合约ID + """ + global AI_THREAD_RUNNING + + start_time = datetime.now() + print(f"\n===== 开始AI分析 [{start_time.strftime('%H:%M:%S')}] =====") + print(f"正在分析合约: {instrument_id}") + + try: + # 复制DataFrame以避免在不同线程间共享数据可能导致的问题 + df_copy = data_df.copy() + + # 输出分析的数据行数 + print(f"分析数据行数: {len(df_copy)}") + print(f"最新价格: {df_copy['close'].iloc[-1] if len(df_copy) > 0 else 'N/A'}") + + # 调用大模型获取交易信号 + trading_signal = call_deepseek_model(df_copy, self) # 传递self参数 + + # 计算分析耗时 + end_time = datetime.now() + elapsed = (end_time - start_time).total_seconds() + + # 将交易信号和合约ID一起放入队列 + signal_data = { + 'signal': trading_signal, + 'instrument_id': instrument_id, + 'timestamp': end_time # 使用结束时间作为时间戳 + } + + AI_SIGNAL_QUEUE.put(signal_data) + print(f"AI模型分析完成,结果已放入队列,耗时: {elapsed:.2f}秒") + print(f"分析结果: {trading_signal}") + print("===== AI分析完成 =====\n") + except Exception as e: + end_time = datetime.now() + elapsed = (end_time - start_time).total_seconds() + print(f"AI模型分析线程出现异常: {e}") + print(f"异常详情:") + import traceback + traceback.print_exc() + print(f"分析失败,耗时: {elapsed:.2f}秒") + print("===== AI分析异常结束 =====\n") + finally: + # 标记线程已完成 + AI_THREAD_RUNNING = False + + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + def check_and_process_ai_signals(self, data): + """ + 检查并处理AI产生的交易信号 + 每个tick都会调用此函数,实现更快的交易信号响应 + """ + if AI_SIGNAL_QUEUE.empty(): + return + + # 从队列中获取信号 + signal_data = AI_SIGNAL_QUEUE.get() + trading_signal = signal_data['signal'] + instrument_id = signal_data['instrument_id'] + signal_time = signal_data['timestamp'] + + # 检查信号是否过期(超过15秒) + if (datetime.now() - signal_time).total_seconds() > 15: + print(f"AI信号已过期,忽略: {trading_signal}") + return + + # 验证合约ID是否匹配 + if instrument_id != data['InstrumentID'].decode(): + # 如果合约不匹配,将信号放回队列以便后续处理 + AI_SIGNAL_QUEUE.put(signal_data) + return + + print(f"\n===== 执行AI模型交易信号 [{datetime.now().strftime('%H:%M:%S')}] =====") + print(f"信号生成时间: {signal_time.strftime('%H:%M:%S')}") + print(f"信号类型: {trading_signal.get('action', '不操作')}") + print(f"置信度: {trading_signal.get('confidence', 0)}") + print(f"理由: {trading_signal.get('reason', '')}") + + # 根据AI模型返回的交易信号执行交易 + action = trading_signal.get('action', '不操作') + confidence = trading_signal.get('confidence', 0) + reason = trading_signal.get('reason', '') + stop_loss = trading_signal.get('stop_loss', 0) + take_profit = trading_signal.get('take_profit', 0) + trailing_percent = trading_signal.get('trailing_percent', 0) + + # 如果AI建议了有效的跟踪止损百分比,则更新参数 + if 0.0001 <= trailing_percent <= 0.001: + old_percent = self.trailing_stop_percent + self.trailing_stop_percent = trailing_percent + print(f"更新跟踪止损百分比参数: {old_percent*100:.3f}% -> {trailing_percent*100:.3f}%") + + # 获取现有持仓信息 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + current_stops = self.stop_order_dict[instrument_id] + + # 如果持有多头或空头头寸,更新跟踪止损价 + if current_stops['long']['position'] > 0: + entry_price = current_stops['long']['entry_price'] + new_trailing_stop = float(data['BidPrice1']) * (1 - self.trailing_stop_percent) + old_trailing_stop = current_stops['long']['trailing_stop'] + + # 只有当新计算的跟踪止损价更高时才更新 + if new_trailing_stop > old_trailing_stop: + self.update_stop_order_dict(instrument_id, 'long', None, None, None, None, new_trailing_stop) + print(f"已根据新参数更新多头跟踪止损价: {old_trailing_stop} -> {new_trailing_stop}") + + # 兼容旧代码 + self.long_trailing_stop_price = new_trailing_stop + self.save_to_csv(instrument_id) + + elif current_stops['short']['position'] > 0: + entry_price = current_stops['short']['entry_price'] + new_trailing_stop = float(data['AskPrice1']) * (1 + self.trailing_stop_percent) + old_trailing_stop = current_stops['short']['trailing_stop'] + + # 只有当新计算的跟踪止损价更低时才更新 + if new_trailing_stop < old_trailing_stop or old_trailing_stop == 0: + self.update_stop_order_dict(instrument_id, 'short', None, None, None, None, new_trailing_stop) + print(f"已根据新参数更新空头跟踪止损价: {old_trailing_stop} -> {new_trailing_stop}") + + # 兼容旧代码 + self.short_trailing_stop_price = new_trailing_stop + self.save_to_csv(instrument_id) + + # 只有当置信度大于等于5时才执行交易 + if confidence >= 6: + print(f"开始执行交易,当前价格: 买一{data['BidPrice1']} / 卖一{data['AskPrice1']}") + + # 获取现有持仓信息 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + current_stops = self.stop_order_dict[instrument_id] + + if action == '开多' and current_stops['long']['position'] <= 0: + # 如果持有空头头寸,先平空 + if current_stops['short']['position'] > 0: + print('执行平空操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['AskPrice1']+self.py, + current_stops['short']['position'], + b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + + # 开多 + print('执行开多操作') + entry_price = float(data['AskPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price+self.py, self.Lots, b'0', b'0') + + # 使用AI建议的止损止盈价格 + sl_price = stop_loss if stop_loss > 0 else entry_price * (1 - self.fixed_stop_loss_percent) + tp_price = take_profit if take_profit > 0 else entry_price * (1 + self.trailing_stop_percent) + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = entry_price * (1 - self.trailing_stop_percent) + + print(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新多头持仓信息,设置合理的跟踪止损初始值 + self.update_stop_order_dict(instrument_id, 'long', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = 1 # 更新全局持仓状态 + + # 兼容旧代码 + self.long_trailing_stop_price = initial_trailing_stop + self.sl_long_price = sl_price + self.save_to_csv(instrument_id) + + elif action == '开空' and current_stops['short']['position'] <= 0: + # 如果持有多头头寸,先平多 + if current_stops['long']['position'] > 0: + print('执行平多操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['BidPrice1']-self.py, + current_stops['long']['position'], + b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + + # 开空 + print('执行开空操作') + entry_price = float(data['BidPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price-self.py, self.Lots, b'1', b'0') + + # 使用AI建议的止损止盈价格 + sl_price = stop_loss if stop_loss > 0 else entry_price * (1 + self.fixed_stop_loss_percent) + tp_price = take_profit if take_profit > 0 else entry_price * (1 - self.trailing_stop_percent) + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = entry_price * (1 + self.trailing_stop_percent) + + print(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新空头持仓信息,设置合理的跟踪止损初始值 + self.update_stop_order_dict(instrument_id, 'short', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = -1 # 更新全局持仓状态 + + # 兼容旧代码 + self.short_trailing_stop_price = initial_trailing_stop + self.sl_shor_price = sl_price + self.save_to_csv(instrument_id) + + elif action == '平多' and current_stops['long']['position'] > 0: + print('执行平多操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['BidPrice1']-self.py, + current_stops['long']['position'], + b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + + elif action == '平空' and current_stops['short']['position'] > 0: + print('执行平空操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['AskPrice1']+self.py, + current_stops['short']['position'], + b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + + # 如果AI建议调整止损止盈价格 + elif action == '不操作': + if stop_loss > 0: + if current_stops['long']['position'] > 0: # 多头持仓 + self.update_stop_order_dict(instrument_id, 'long', None, None, stop_loss, None, None) + print(f'已调整多头止损价: {stop_loss}') + + # 兼容旧代码 + self.sl_long_price = stop_loss + self.save_to_csv(instrument_id) + elif current_stops['short']['position'] > 0: # 空头持仓 + self.update_stop_order_dict(instrument_id, 'short', None, None, stop_loss, None, None) + print(f'已调整空头止损价: {stop_loss}') + + # 兼容旧代码 + self.sl_shor_price = stop_loss + self.save_to_csv(instrument_id) + + if take_profit > 0: + if current_stops['long']['position'] > 0: # 多头持仓 + self.update_stop_order_dict(instrument_id, 'long', None, None, None, take_profit, None) + print(f'已调整多头止盈价: {take_profit}') + + # 兼容旧代码 + self.long_trailing_stop_price = take_profit + self.save_to_csv(instrument_id) + elif current_stops['short']['position'] > 0: # 空头持仓 + self.update_stop_order_dict(instrument_id, 'short', None, None, None, take_profit, None) + print(f'已调整空头止盈价: {take_profit}') + + # 兼容旧代码 + self.short_trailing_stop_price = take_profit + self.save_to_csv(instrument_id) + + print("===== 交易信号执行完成 =====\n") + else: + print(f"信号置信度{confidence}低于执行阈值(5),不执行交易") + print("===== 交易信号处理完成 =====\n") + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + def format_data_for_llm(self, df): + """ + 将DataFrame格式化为适合LLM分析的文本格式,包含历史交易信息 + """ + # 提取最近几条记录 + recent_data = df.tail(self.trader_rows) + + # 构建基本信息 + data_text = "订单流数据分析:\n\n" + + # 提取最新行情数据 + instrument_id = recent_data['symbol'].iloc[-1] + + # 添加最新价格和交易量信息 + data_text += f"当前时间: {recent_data['datetime'].iloc[-1]}\n" + data_text += f"当前价格: {recent_data['close'].iloc[-1]}\n" + data_text += f"开盘价: {recent_data['open'].iloc[-1]}\n" + data_text += f"最高价: {recent_data['high'].iloc[-1]}\n" + data_text += f"最低价: {recent_data['low'].iloc[-1]}\n" + data_text += f"成交量: {recent_data['volume'].iloc[-1]}\n" + + # 计算价格趋势 + if len(recent_data) >= 5: + price_trend = recent_data['close'].pct_change().tail(5).mean() * 100 + data_text += f"价格短期趋势: {'上涨' if price_trend > 0 else '下跌'} ({price_trend:.2f}%)\n" + + # 计算价格波动性 + if len(recent_data) >= 5: + volatility = recent_data['close'].pct_change().tail(5).std() * 100 + data_text += f"价格波动性: {volatility:.2f}%\n" + + # 添加支撑和阻力位分析 + recent_high = recent_data['high'].max() + recent_low = recent_data['low'].min() + data_text += f"近期阻力位: {recent_high}\n" + data_text += f"近期支撑位: {recent_low}\n" + + # 添加均线分析 - 计算5、10、20均线 + if len(df) >= 20: + # 计算均线 + ma5 = df['close'].rolling(5).mean().iloc[-1] + ma10 = df['close'].rolling(10).mean().iloc[-1] + ma20 = df['close'].rolling(20).mean().iloc[-1] + + data_text += f"MA5: {ma5:.2f}\n" + data_text += f"MA10: {ma10:.2f}\n" + data_text += f"MA20: {ma20:.2f}\n" + + # 判断均线形态 + if abs(ma5 - ma10) / ma10 < 0.001 and abs(ma10 - ma20) / ma20 < 0.001: + ma_pattern = "均线粘合" + elif ma5 > ma10 and ma10 > ma20: + ma_pattern = "多头排列" + elif ma5 < ma10 and ma10 < ma20: + ma_pattern = "空头排列" + elif ma5 > ma10 and ma10 < ma20: + ma_pattern = "金叉形态" + elif ma5 < ma10 and ma10 > ma20: + ma_pattern = "死叉形态" + else: + ma_pattern = "无明显形态" + + data_text += f"均线形态: {ma_pattern}\n" + + # 价格与均线关系 + current_price = df['close'].iloc[-1] + data_text += f"价格相对MA5: {'上方' if current_price > ma5 else '下方'} ({(current_price/ma5-1)*100:.2f}%)\n" + data_text += f"价格相对MA10: {'上方' if current_price > ma10 else '下方'} ({(current_price/ma10-1)*100:.2f}%)\n" + data_text += f"价格相对MA20: {'上方' if current_price > ma20 else '下方'} ({(current_price/ma20-1)*100:.2f}%)\n" + + # 日内超涨超跌分析 + if len(df) >= 20: + # 计算日内振幅 + daily_high = df['high'].iloc[-20:].max() + daily_low = df['low'].iloc[-20:].min() + daily_range = (daily_high - daily_low) / daily_low * 100 + + # 当前价格在日内范围的位置 + current_in_range = (df['close'].iloc[-1] - daily_low) / (daily_high - daily_low) * 100 if (daily_high - daily_low) > 0 else 50 + + data_text += f"日内振幅: {daily_range:.2f}%\n" + data_text += f"价格在日内范围的位置: {current_in_range:.2f}% (0%为日低, 100%为日高)\n" + + # 判断超涨超跌 + if current_in_range > 85: + data_text += "日内状态: 可能超涨\n" + elif current_in_range < 15: + data_text += "日内状态: 可能超跌\n" + else: + data_text += "日内状态: 正常区间\n" + + # 形态识别 + if len(df) >= 20: + # 简单K线形态识别 + recent_k = df.tail(5).copy() + + # 计算实体和影线 + recent_k['body'] = abs(recent_k['close'] - recent_k['open']) + recent_k['upper_shadow'] = recent_k.apply(lambda x: x['high'] - max(x['open'], x['close']), axis=1) + recent_k['lower_shadow'] = recent_k.apply(lambda x: min(x['open'], x['close']) - x['low'], axis=1) + + # 最新K线特征 + latest_k = recent_k.iloc[-1] + prev_k = recent_k.iloc[-2] if len(recent_k) > 1 else None + + data_text += "\nK线形态分析:\n" + + # 判断最新K线类型 + if latest_k['body'] == 0: + k_type = "十字星" + elif latest_k['upper_shadow'] > 2 * latest_k['body'] and latest_k['lower_shadow'] < 0.5 * latest_k['body']: + k_type = "上影线长" + elif latest_k['lower_shadow'] > 2 * latest_k['body'] and latest_k['upper_shadow'] < 0.5 * latest_k['body']: + k_type = "下影线长" + elif latest_k['close'] > latest_k['open'] and latest_k['body'] > np.mean(recent_k['body']): + k_type = "大阳线" + elif latest_k['close'] < latest_k['open'] and latest_k['body'] > np.mean(recent_k['body']): + k_type = "大阴线" + elif latest_k['close'] > latest_k['open']: + k_type = "小阳线" + elif latest_k['close'] < latest_k['open']: + k_type = "小阴线" + else: + k_type = "普通K线" + + data_text += f"最新K线类型: {k_type}\n" + + # 判断简单组合形态 + if prev_k is not None: + if prev_k['close'] < prev_k['open'] and latest_k['close'] > latest_k['open'] and latest_k['open'] <= prev_k['close'] and latest_k['close'] > prev_k['open']: + data_text += "组合形态: 可能构成看涨吞没形态\n" + elif prev_k['close'] > prev_k['open'] and latest_k['close'] < latest_k['open'] and latest_k['open'] >= prev_k['close'] and latest_k['close'] < prev_k['open']: + data_text += "组合形态: 可能构成看跌吞没形态\n" + elif prev_k['close'] < prev_k['open'] and latest_k['close'] > latest_k['open'] and latest_k['body'] > 1.5 * prev_k['body']: + data_text += "组合形态: 可能构成看涨势能增强\n" + elif prev_k['close'] > prev_k['open'] and latest_k['close'] < latest_k['open'] and latest_k['body'] > 1.5 * prev_k['body']: + data_text += "组合形态: 可能构成看跌势能增强\n" + + # 添加订单流特定数据 + data_text += f"\n订单流净值: {recent_data['delta'].iloc[-1]}\n" + data_text += f"订单流累计值: {recent_data['delta累计'].iloc[-1] if 'delta累计' in recent_data.columns else '无数据'}\n" + data_text += f"堆积指标: {recent_data['dj'].iloc[-1]}\n" + + # 添加日均线数据 + data_text += f"日均线: {recent_data['dayma'].iloc[-1] if 'dayma' in recent_data.columns else '无数据'}\n" + + # 添加价格与日均线的关系 + if 'dayma' in recent_data.columns: + price_above_ma = recent_data['close'].iloc[-1] > recent_data['dayma'].iloc[-1] + data_text += f"价格位于日均线: {'上方' if price_above_ma else '下方'}\n" + + # 订单流全面分析 + data_text += "\n订单流详细分析:\n" + + # 计算订单流趋势 + if len(recent_data) >= 5: + delta_values = recent_data['delta'].values + delta_trend = np.mean(np.diff(delta_values)) if len(delta_values) > 1 else 0 + data_text += f"订单流趋势: {'增强中' if delta_trend > 0 else '减弱中'} (变化率: {delta_trend:.2f})\n" + + # 计算订单流强度(使用绝对值的平均值) + delta_strength = np.mean(np.abs(recent_data['delta'].values)) + data_text += f"订单流强度: {delta_strength:.2f}\n" + + # 订单流指标超涨超跌分析 + if len(df) >= 20: + delta_values = df['delta'].iloc[-20:].values + delta_mean = np.mean(delta_values) + delta_std = np.std(delta_values) + current_delta = df['delta'].iloc[-1] + + # Z分数计算 + if delta_std > 0: + delta_z = (current_delta - delta_mean) / delta_std + data_text += f"订单流偏离度(Z分数): {delta_z:.2f}\n" + + if delta_z > 2: + data_text += "订单流状态: 可能超买\n" + elif delta_z < -2: + data_text += "订单流状态: 可能超卖\n" + else: + data_text += "订单流状态: 正常区间\n" + + # 买卖力量对比 + if 'bid_v' in recent_data.columns and 'ask_v' in recent_data.columns: + bid_power = recent_data['bid_v'].mean() + ask_power = recent_data['ask_v'].mean() + power_ratio = bid_power / ask_power if ask_power != 0 else float('inf') + data_text += f"买卖比例: {power_ratio:.2f} (>1买方强势,<1卖方强势)\n" + + # 订单流累计趋势 + if 'delta累计' in recent_data.columns and len(recent_data) >= 2: + cumulative_start = recent_data['delta累计'].iloc[0] + cumulative_end = recent_data['delta累计'].iloc[-1] + cumulative_change = cumulative_end - cumulative_start + data_text += f"累计订单流变化: {cumulative_change:.2f} (从 {cumulative_start:.2f} 到 {cumulative_end:.2f})\n" + + # 订单流波动性 + delta_volatility = np.std(recent_data['delta'].values) + data_text += f"订单流波动性: {delta_volatility:.2f}\n" + + # 订单流与价格相关性 + if len(recent_data) >= 10: # 确保有足够数据计算相关性 + price_changes = recent_data['close'].pct_change().dropna() + delta_changes = recent_data['delta'].iloc[1:].reset_index(drop=True) # 对齐索引 + if len(price_changes) > 0 and len(delta_changes) == len(price_changes): + try: + correlation = np.corrcoef(price_changes, delta_changes)[0, 1] if len(price_changes) > 1 else 0 + data_text += f"订单流与价格相关性: {correlation:.2f}\n" + data_text += f"相关性解读: {'强正相关' if correlation > 0.7 else '正相关' if correlation > 0.3 else '弱相关' if correlation > -0.3 else '负相关' if correlation > -0.7 else '强负相关'}\n" + except: + data_text += "订单流与价格相关性: 计算错误\n" + + # 订单流势能分析(最近几分钟的方向) + recent_deltas = recent_data['delta'].tail(5).values + positive_count = sum(1 for x in recent_deltas if x > 0) + negative_count = sum(1 for x in recent_deltas if x < 0) + data_text += f"最近订单流方向: {'多头主导' if positive_count > negative_count else '空头主导' if positive_count < negative_count else '方向不明'} ({positive_count}正/{negative_count}负)\n" + + # 订单流强弱可视化 + delta_last_5 = recent_data['delta'].tail(5).values + strength_visual = "" + for val in delta_last_5: + if val > 3: + strength_visual += "↑↑ " + elif val > 0: + strength_visual += "↑ " + elif val < -3: + strength_visual += "↓↓ " + elif val < 0: + strength_visual += "↓ " + else: + strength_visual += "→ " + data_text += f"订单流强弱可视化 (最近5分钟): {strength_visual}\n" + + # 添加最近几条记录的趋势 + data_text += "\n最近几条记录的趋势:\n" + + # 添加最近5条记录的关键指标变化 + for i in range(min(5, len(recent_data))): + idx = -(i+1) + data_text += f"记录 {i+1}: 时间={recent_data['datetime'].iloc[idx]}, 价格={recent_data['close'].iloc[idx]}, " + data_text += f"订单流净值={recent_data['delta'].iloc[idx]}, 堆积={recent_data['dj'].iloc[idx]}\n" + + # 添加当前持仓信息,使用新的止盈止损字典 + data_text += "\n当前持仓状态:\n" + + # 获取该合约的止盈止损信息 + stops = self.stop_order_dict.get(instrument_id, { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + }) + + # 获取多头和空头持仓信息 + long_pos = stops.get('long', {}).get('position', 0) + short_pos = stops.get('short', {}).get('position', 0) + + # 判断当前持仓方向 + if long_pos > 0: + data_text += f"持仓方向: 多头\n" + data_text += f"持仓数量: {long_pos}\n" + data_text += f"开仓价格: {stops['long']['entry_price']}\n" + data_text += f"止损价格: {stops['long']['stop_loss']}\n" + data_text += f"止盈价格: {stops['long']['take_profit']}\n" + data_text += f"跟踪止损价: {stops['long']['trailing_stop']}\n" + + # 计算当前盈亏 + current_price = recent_data['close'].iloc[-1] + profit_percent = (current_price - stops['long']['entry_price']) / stops['long']['entry_price'] * 100 + data_text += f"当前盈亏: {profit_percent:.2f}%\n" + elif short_pos > 0: + data_text += f"持仓方向: 空头\n" + data_text += f"持仓数量: {short_pos}\n" + data_text += f"开仓价格: {stops['short']['entry_price']}\n" + data_text += f"止损价格: {stops['short']['stop_loss']}\n" + data_text += f"止盈价格: {stops['short']['take_profit']}\n" + data_text += f"跟踪止损价: {stops['short']['trailing_stop']}\n" + + # 计算当前盈亏 + current_price = recent_data['close'].iloc[-1] + profit_percent = (stops['short']['entry_price'] - current_price) / stops['short']['entry_price'] * 100 + data_text += f"当前盈亏: {profit_percent:.2f}%\n" + else: + data_text += "持仓方向: 空仓\n" + data_text += "持仓数量: 0\n" + + # 添加风险管理参数信息 + data_text += "\n风险管理参数设置:\n" + data_text += f"固定止损百分比: {self.fixed_stop_loss_percent * 100:.2f}%\n" + data_text += f"跟踪止损百分比: {self.trailing_stop_percent * 100:.2f}%\n" + + # 添加交易建议提示 + data_text += "\n请根据以上信息,分析当前市场状态并给出交易建议。需要考虑:\n" + data_text += "1. 当前持仓状态是否合理\n" + data_text += "2. 是否需要调整止损止盈位置\n" + data_text += "3. 是否需要平仓或反手\n" + data_text += "4. 是否适合开新仓\n" + data_text += "5. 是否需要调整跟踪止损百分比参数(范围建议:0.0001-0.001)\n" + data_text += "6. 是否出现抄底摸顶机会\n" + data_text += "7. 是否存在日内波段交易机会\n" + + return data_text + + def update_stop_order_dict(self, instrument_id, direction, position, entry_price=None, stop_loss=None, take_profit=None, trailing_stop=None): + """ + 更新止盈止损字典 + + Args: + instrument_id: 合约ID + direction: 方向 'long' 或 'short' + position: 持仓手数 + entry_price: 开仓价格 + stop_loss: 止损价格 + take_profit: 止盈价格 + trailing_stop: 跟踪止损价格 + """ + # 确保合约ID在字典中存在 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + # 更新指定方向的数据,仅更新提供的参数 + if position is not None: + self.stop_order_dict[instrument_id][direction]['position'] = position + + if entry_price is not None: + self.stop_order_dict[instrument_id][direction]['entry_price'] = entry_price + + if stop_loss is not None: + self.stop_order_dict[instrument_id][direction]['stop_loss'] = stop_loss + + if take_profit is not None: + self.stop_order_dict[instrument_id][direction]['take_profit'] = take_profit + + if trailing_stop is not None: + self.stop_order_dict[instrument_id][direction]['trailing_stop'] = trailing_stop + + # 保存到文件 + self.save_stop_orders_to_file(instrument_id) + + def save_stop_orders_to_file(self, instrument_id): + """将止盈止损信息保存到文件""" + # 使用完整的合约代码 + symbol = str(instrument_id) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}_stops.json") + + # 如果文件夹不存在则创建 + if not os.path.exists(folder_path): + os.makedirs(folder_path) + + # 保存字典到JSON文件 + with open(file_path, 'w') as f: + json.dump(self.stop_order_dict.get(instrument_id, {}), f, indent=4) + + # 获取该合约的止盈止损信息 + stops = self.stop_order_dict.get(instrument_id, { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + }) + + # 打印详细信息 + print(f"\n===== 已更新止盈止损信息: {instrument_id} =====") + print(f"多头持仓: {stops['long']['position']} 手") + print(f"多头入场价: {stops['long']['entry_price']}") + print(f"多头止损价: {stops['long']['stop_loss']}") + print(f"多头止盈价: {stops['long']['take_profit']}") + print(f"多头跟踪止损: {stops['long']['trailing_stop']}") + print(f"空头持仓: {stops['short']['position']} 手") + print(f"空头入场价: {stops['short']['entry_price']}") + print(f"空头止损价: {stops['short']['stop_loss']}") + print(f"空头止盈价: {stops['short']['take_profit']}") + print(f"空头跟踪止损: {stops['short']['trailing_stop']}") + print("======================================\n") + + def load_stop_orders_from_file(self, instrument_id): + """从文件加载止盈止损信息""" + # 如果合约ID已经在字典中,直接返回,避免重复加载 + if instrument_id in self.stop_order_dict: + return True + + # 使用完整的合约代码 + symbol = str(instrument_id) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}_stops.json") + + if os.path.exists(file_path): + try: + with open(file_path, 'r') as f: + stops_data = json.load(f) + + # 更新字典 + self.stop_order_dict[instrument_id] = stops_data + print(f"首次加载止盈止损信息: {instrument_id}") + return True + except Exception as e: + print(f"加载止盈止损信息失败: {e}") + + # 如果文件不存在,初始化空字典结构 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + print(f"初始化止盈止损结构: {instrument_id}") + + return False + + def check_stop_conditions(self, data): + """检查是否满足止盈止损条件""" + instrument_id = data['InstrumentID'].decode() + + # 如果该合约不在止盈止损字典中,直接返回 + if instrument_id not in self.stop_order_dict: + return + + current_bid = float(data['BidPrice1']) # 当前买价 + current_ask = float(data['AskPrice1']) # 当前卖价 + + stops = self.stop_order_dict[instrument_id] + + # 检查多头止盈止损 + if stops['long']['position'] > 0: + # 检查止损 + if stops['long']['stop_loss'] > 0 and current_bid <= stops['long']['stop_loss']: + print(f"触发多头止损: {instrument_id}, 价格: {current_bid}, 止损价: {stops['long']['stop_loss']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 检查跟踪止损 - 新增的逻辑 + elif stops['long']['trailing_stop'] > 0 and current_bid < stops['long']['trailing_stop']: + print(f"触发多头跟踪止损: {instrument_id}, 价格: {current_bid}, 跟踪止损价: {stops['long']['trailing_stop']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 检查止盈 + elif stops['long']['take_profit'] > 0 and current_bid >= stops['long']['take_profit']: + print(f"触发多头止盈: {instrument_id}, 价格: {current_bid}, 止盈价: {stops['long']['take_profit']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.update_stop_order_dict(instrument_id, 'long', 0, 0, 0, 0) + self.pos = 0 # 更新全局持仓状态 + + # 更新跟踪止损价 - 只在价格上涨时更新 + elif stops['long']['trailing_stop'] > 0: + # 只有当前价格比之前设置的跟踪止损价高一定幅度时才更新 + new_trailing_stop = current_bid * (1 - self.trailing_stop_percent) + if new_trailing_stop > stops['long']['trailing_stop']: + self.update_stop_order_dict(instrument_id, 'long', None, None, None, None, new_trailing_stop) + print(f"更新多头跟踪止损: {instrument_id}, 新止损价: {new_trailing_stop}") + + # 检查空头止盈止损 + if stops['short']['position'] > 0: + # 检查止损 + if stops['short']['stop_loss'] > 0 and current_ask >= stops['short']['stop_loss']: + print(f"触发空头止损: {instrument_id}, 价格: {current_ask}, 止损价: {stops['short']['stop_loss']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.update_stop_order_dict(instrument_id, 'short', 0, 0, 0, 0, 0) + self.pos = 0 # 更新全局持仓状态 + + # 检查跟踪止损 - 新增的逻辑 + elif stops['short']['trailing_stop'] > 0 and current_ask > stops['short']['trailing_stop']: + print(f"触发空头跟踪止损: {instrument_id}, 价格: {current_ask}, 跟踪止损价: {stops['short']['trailing_stop']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + self.pos = 0 # 更新全局持仓状态 + + # 检查止盈 + elif stops['short']['take_profit'] > 0 and current_ask <= stops['short']['take_profit']: + print(f"触发空头止盈: {instrument_id}, 价格: {current_ask}, 止盈价: {stops['short']['take_profit']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.update_stop_order_dict(instrument_id, 'short', 0, 0, 0, 0, 0) + self.pos = 0 # 更新全局持仓状态 + + # 更新跟踪止损价 - 只在价格下跌时更新 + elif stops['short']['trailing_stop'] > 0: + # 只有当前价格比之前设置的跟踪止损价低一定幅度时才更新 + new_trailing_stop = current_ask * (1 + self.trailing_stop_percent) + if new_trailing_stop < stops['short']['trailing_stop'] or stops['short']['trailing_stop'] == 0: + self.update_stop_order_dict(instrument_id, 'short', None, None, None, None, new_trailing_stop) + print(f"更新空头跟踪止损: {instrument_id}, 新止损价: {new_trailing_stop}") + + #保存数据 + + def clear_position_info(self, instrument_id, direction): + """ + 清空指定合约和方向的持仓信息 + + Args: + instrument_id: 合约ID + direction: 方向 'long' 或 'short' 或 'all' + """ + # 确保合约ID在字典中存在 + if instrument_id not in self.stop_order_dict: + return + + if direction == 'long' or direction == 'all': + # 清空多头持仓信息 + self.stop_order_dict[instrument_id]['long'] = { + 'position': 0, + 'entry_price': 0, + 'stop_loss': 0, + 'take_profit': 0, + 'trailing_stop': 0 + } + # 兼容旧代码 + if direction == 'long': + self.long_trailing_stop_price = 0 + self.sl_long_price = 0 + + if direction == 'short' or direction == 'all': + # 清空空头持仓信息 + self.stop_order_dict[instrument_id]['short'] = { + 'position': 0, + 'entry_price': 0, + 'stop_loss': 0, + 'take_profit': 0, + 'trailing_stop': 0 + } + # 兼容旧代码 + if direction == 'short': + self.short_trailing_stop_price = 0 + self.sl_shor_price = 0 + + # 同步全局持仓状态 + if direction == 'all': + self.pos = 0 + self.long_trailing_stop_price = 0 + self.short_trailing_stop_price = 0 + self.sl_long_price = 0 + self.sl_shor_price = 0 + + # 保存到文件 + self.save_stop_orders_to_file(instrument_id) + self.save_to_csv(instrument_id) + + print(f"已清空{instrument_id}的{direction}持仓信息") + +# 修改call_deepseek_model函数,移除JSON格式输出的要求,改为从普通文本响应中提取交易信号。 +def call_deepseek_model(data_df, trader_instance, max_retries=2): + """ + 调用deepseek-r1大模型分析订单流数据 + + Args: + data_df: 包含订单流数据的DataFrame + trader_instance: MyTrader实例,用于访问持仓信息 + max_retries: 最大重试次数 + + Returns: + dict: 包含交易信号的字典 + """ + # 直接从环境变量获取API密钥 + api_key = os.environ.get("OPENAI_API_KEY") or GLOBAL_LLM_CONFIG.get('api_key') + base_url = GLOBAL_LLM_CONFIG.get('base_url', "https://api.deepseek.com") + model_name = GLOBAL_LLM_CONFIG.get('model_name', "deepseek-reasoner") + + # 检查API密钥是否为空 + if not api_key: + print("错误: API密钥未设置,请在main函数中配置GLOBAL_LLM_CONFIG['api_key']") + return {"action": "不操作", "reason": "API密钥未设置", "confidence": 0, "stop_loss": 0, "take_profit": 0} + + # 将DataFrame转换为可读性好的文本,传递trader_instance + data_text = trader_instance.format_data_for_llm(data_df) + + # 构建提示词 + prompt = f""" + 作为期货交易员,基于以下市场数据做出交易决策: + + {data_text} + + 请重点考虑以下关键因素: + 1. 均线形态(5、10、20均线)的排列状态及价格位置 + 2. 价格趋势、波动性与关键支撑阻力位 + 3. 日内超涨超跌状态,寻找高胜率反转交易机会 + 4. K线组合形态,尤其关注反转信号和动量变化 + 5. 订单流趋势变化与力度 + 6. 买卖力量对比和资金流向 + 7. 当前持仓状态与盈亏情况 + 8. 风险回报比与止损止盈设置合理性 + 9. 适合的交易时机与市场环境判断 + + 【风险控制原则】: + - 严格控制每笔交易亏损不超过本金的1% + - 止损位设置应紧凑,一般不超过开仓价的0.3%-0.8% + - 风险回报比至少为1:1.5,建议争取1:2或更高 + - 在不明确的市场环境下,以保护资金为第一要务 + + 请根据市场状态和持仓情况,给出明确的交易指令: + 1. 交易方向: 开多/开空/平多/平空/不操作 + 2. 执行理由: 详细说明交易逻辑,结合技术形态、价格位置、订单流特征和市场状态,包括对当前持仓的处理方案 + 3. 置信度: 1-10的数字,必须是整数 + 4. 止损价: 明确的止损价格(必须是数字),确保亏损控制在合理范围内,不能过大 + 5. 止盈价: 明确的止盈价格(必须是数字),应至少是止损距离的1.5倍 + 6. 跟踪止损百分比: 0.0001-0.001之间的数字,根据市场波动性调整 + + 请按以下格式返回交易决策,格式必须严格匹配: + action: 开多/开空/平多/平空/不操作 + reason: 交易理由 + confidence: 置信度(1-10) + stop_loss: 止损价 + take_profit: 止盈价 + trailing_percent: 跟踪止损百分比(0.0001-0.001) + """ + + system_prompt = {"role": "system", + "content": "你是一位经验丰富的期货交易员,拥有多年实盘交易经验,精通订单流分析和技术形态识别。你的交易风格注重实战执行,善于制定明确的入场出场策略和风险控制方案。特别擅长日内波段交易和抄底摸顶策略,能准确捕捉超涨超跌反转机会和均线形态变化带来的交易信号,并能迅速做出果断决策。你综合考虑市场情绪、技术指标与价格行为,在保护资金安全的前提下寻求最佳交易机会。根据当前市场状态和持仓情况,你能给出明确的交易执行方案、止损止盈设置以及仓位管理建议。请确保以指定的格式返回交易决策。"} + + # 添加重试机制 + retries = 0 + while retries <= max_retries: + try: + # 如果不是第一次尝试,输出重试信息 + if retries > 0: + print(f"正在进行第 {retries} 次重试...") + + # 调试信息 + print(f"使用API参数: base_url={base_url}, model={model_name}") + + # 添加明显的提示信息,表示正在调用大模型API + print("\n============================================") + print("【正在调用大模型API进行交易分析,请稍候...】") + print("============================================\n") + + # 记录开始时间 + api_start_time = time.time() + + # 使用OpenAI客户端格式调用API + client = OpenAI(api_key=api_key, base_url=base_url) + + response = client.chat.completions.create( + model=model_name, + messages=[ + system_prompt, + {"role": "user", "content": prompt} + ], + temperature=0.1, + # 移除JSON格式输出的要求 + max_tokens=8192, + timeout=60 # 将超时时间从30秒增加到60秒 + ) + + # 计算API调用耗时 + api_elapsed = time.time() - api_start_time + + # 提取模型输出的内容 + model_response = response.choices[0].message.content + print(f"模型响应耗时: {api_elapsed:.2f}秒") + print("模型响应前100字符: " + model_response[:100] + "...") + + # 添加明显的提示信息,表示API调用已完成 + print("\n============================================") + print("【大模型API调用完成】") + print("============================================\n") + + # 从文本中解析出交易信号 + try: + trading_signal = parse_trading_signal(model_response) + return trading_signal + except Exception as parse_err: + print(f"解析模型响应出错: {parse_err}") + # 尝试从自由文本中提取关键信息 + return extract_trading_signal_from_text(model_response) + + except Exception as e: + retries += 1 + if retries <= max_retries: + print(f"调用大模型API出错: {e}") + print(f"将在3秒后重试...") + time.sleep(3) # 等待3秒后重试 + else: + print(f"已达到最大重试次数 ({max_retries}),调用大模型API失败") + print(f"错误详情: {e}") + print("\n请检查以下几点:") + print("1. API密钥格式是否正确,应以'sk-'开头") + print("2. 确认已安装最新版本的openai库: pip install --upgrade openai") + print("3. 确认您的API密钥对应的模型是否为deepseek-reasoner") + # 返回默认的不操作信号 + return {"action": "不操作", "reason": f"API调用失败: {str(e)[:100]}", "confidence": 0, "stop_loss": 0, "take_profit": 0} + + # 如果所有重试都失败了,返回默认值 + return {"action": "不操作", "reason": "API调用重试耗尽", "confidence": 0, "stop_loss": 0, "take_profit": 0} + +def parse_trading_signal(text): + """ + 从文本格式的模型响应中解析出交易信号 + + Args: + text: 模型响应文本 + + Returns: + dict: 包含交易信号的字典 + """ + lines = text.strip().split('\n') + trading_signal = {} + + for line in lines: + if ':' in line: + key, value = line.split(':', 1) + key = key.strip().lower() + value = value.strip() + + if key == 'action': + trading_signal['action'] = value + elif key == 'reason': + trading_signal['reason'] = value + elif key == 'confidence': + try: + trading_signal['confidence'] = int(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+', value) + if match: + trading_signal['confidence'] = int(match.group()) + else: + trading_signal['confidence'] = 0 + elif key == 'stop_loss': + try: + trading_signal['stop_loss'] = float(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + trading_signal['stop_loss'] = float(match.group()) + else: + trading_signal['stop_loss'] = 0 + elif key == 'take_profit': + try: + trading_signal['take_profit'] = float(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + trading_signal['take_profit'] = float(match.group()) + else: + trading_signal['take_profit'] = 0 + elif key == 'trailing_percent' or key == 'trailing_stop_percent': + try: + value_float = float(value) + # 确保值在合理范围内 + if 0.0005 <= value_float <= 0.015: + trading_signal['trailing_percent'] = value_float + else: + # 如果值不在预期范围内,尝试判断是否使用了百分比格式 + if value_float >= 0.05 and value_float <= 1.5: + # 可能是百分比格式,转换为小数 + trading_signal['trailing_percent'] = value_float / 100 + else: + # 设置为默认值 + trading_signal['trailing_percent'] = 0.005 + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + try: + trailing_value = float(match.group()) + if trailing_value >= 0.5 and trailing_value <= 10: + trading_signal['trailing_percent'] = trailing_value / 100 + else: + trading_signal['trailing_percent'] = trailing_value + except: + trading_signal['trailing_percent'] = 0.02 + else: + trading_signal['trailing_percent'] = 0.02 + + # 检查是否有缺失的字段,如果有,设置默认值 + if 'action' not in trading_signal: + trading_signal['action'] = '不操作' + if 'reason' not in trading_signal: + trading_signal['reason'] = '未提供理由' + if 'confidence' not in trading_signal: + trading_signal['confidence'] = 0 + if 'stop_loss' not in trading_signal: + trading_signal['stop_loss'] = 0 + if 'take_profit' not in trading_signal: + trading_signal['take_profit'] = 0 + if 'trailing_percent' not in trading_signal: + trading_signal['trailing_percent'] = 0.005 # 修改默认值 + + return trading_signal + +def extract_trading_signal_from_text(text): + """ + 从自由格式文本中尝试提取交易信号 + + Args: + text: 模型响应文本 + + Returns: + dict: 包含交易信号的字典 + """ + # 默认交易信号 + trading_signal = { + "action": "不操作", + "reason": "无法解析模型响应", + "confidence": 0, + "stop_loss": 0, + "take_profit": 0, + "trailing_percent": 0.005 # 更新默认的跟踪止损百分比 + } + + # 尝试判断交易方向 + text_lower = text.lower() + if "开多" in text_lower: + trading_signal["action"] = "开多" + elif "开空" in text_lower: + trading_signal["action"] = "开空" + elif "平多" in text_lower: + trading_signal["action"] = "平多" + elif "平空" in text_lower: + trading_signal["action"] = "平空" + elif "不操作" in text_lower or "观望" in text_lower: + trading_signal["action"] = "不操作" + + # 尝试从文本中提取置信度 + import re + confidence_matches = re.findall(r'置信度[::]\s*(\d+)', text_lower) + if confidence_matches: + try: + trading_signal["confidence"] = int(confidence_matches[0]) + except ValueError: + pass + + # 尝试提取止损价 + stop_loss_matches = re.findall(r'止损价[::]\s*(\d+(\.\d+)?)', text_lower) + if stop_loss_matches: + try: + trading_signal["stop_loss"] = float(stop_loss_matches[0][0]) + except ValueError: + pass + + # 尝试提取止盈价 + take_profit_matches = re.findall(r'止盈价[::]\s*(\d+(\.\d+)?)', text_lower) + if take_profit_matches: + try: + trading_signal["take_profit"] = float(take_profit_matches[0][0]) + except ValueError: + pass + + # 尝试提取跟踪止损百分比 + trailing_matches = re.findall(r'跟踪止损百分比[::]\s*(\d+(\.\d+)?)', text_lower) + if not trailing_matches: + trailing_matches = re.findall(r'跟踪百分比[::]\s*(\d+(\.\d+)?)', text_lower) + + if trailing_matches: + try: + trailing_value = float(trailing_matches[0][0]) + # 判断是否为百分比格式 + if trailing_value >= 0.5 and trailing_value <= 10: + trading_signal["trailing_percent"] = trailing_value / 100 + else: + trading_signal["trailing_percent"] = trailing_value + except ValueError: + pass + + # 提取理由 + reason_matches = re.findall(r'理由[::]\s*(.*?)(?=\n|$)', text_lower) + if reason_matches: + trading_signal["reason"] = reason_matches[0] + + return trading_signal + +# 修改run_trader函数,不再传递llm_config参数 +def run_trader(broker_id, td_server, investor_id, password, app_id, auth_code, md_queue=None, page_dir='', private_resume_type=2, public_resume_type=2, load_history=False, history_rows=1000,trader_rows=10): + my_trader = MyTrader( + broker_id, + td_server, + investor_id, + password, + app_id, + auth_code, + md_queue, + page_dir, + private_resume_type, + public_resume_type + ) + + # 设置历史数据加载参数 + my_trader.load_history = load_history + my_trader.history_rows = history_rows + my_trader.trader_rows = trader_rows + my_trader.Join() + +# 修改主函数中的配置和调用方式 +if __name__ == '__main__': + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + + # 配置大模型参数 - 直接通过环境变量设置 + import os + # 设置您的实际API密钥 + api_key = "" # 请确保使用有效的密钥 + os.environ["OPENAI_API_KEY"] = api_key + + # 同时设置到全局变量中 + GLOBAL_LLM_CONFIG['api_key'] = api_key + GLOBAL_LLM_CONFIG['base_url'] = "https://api.deepseek.com" + GLOBAL_LLM_CONFIG['model_name'] = "deepseek-reasoner" + # 历史数据加载配置 + LOAD_HISTORY = False # 是否加载历史数据 + HISTORY_ROWS = 30 # 加载历史文件中数据量 + TRADER_ROWS = 10 # 当tader_df里的数据大于10行时开始计算指标及触发AI模型 + # 设置K线时间粒度 + BAR_RESAMPLE_RULE = '1T' # 1分钟K线,可以修改为'5T'(5分钟),'15T'(15分钟)等,也可用'5S'(5秒),'30S'(30秒)或'1H'(1小时),'2H'(2小时),'4H'(4小时),'1D'(1天) + + # 测试API连接 + print(f"测试API连接,使用密钥: {api_key[:5]}...{api_key[-5:]}") + try: + client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com") + response = client.chat.completions.create( + model="deepseek-reasoner", + messages=[ + {"role": "system", "content": "你是一个助手"}, + {"role": "user", "content": "测试"} + ], + stream=True, # 新增此行 + max_tokens=10 + ) + print("API连接测试成功!") + except Exception as e: + print(f"API连接测试失败: {e}") + import traceback + traceback.print_exc() + + #用simnow模拟,不要忘记屏蔽下方实盘的future_account字典 + future_account = get_simulate_account( + investor_id='', # simnow账户,注意是登录账户的ID,SIMNOW个人首页查看 + password='', # simnow密码 + server_name='电信1', # 电信1、电信2、移动、TEST、N视界 + subscribe_list=[b'au2506'], # 合约列表 + ) + + # #实盘用这个,不要忘记屏蔽上方simnow的future_account字典 + # future_account = FutureAccount( + # broker_id='', # 期货公司BrokerID + # server_dict={'TDServer': "ip:port", 'MDServer': 'ip:port'}, # TDServer为交易服务器,MDServer为行情服务器。服务器地址格式为"ip:port。" + # reserve_server_dict={}, # 备用服务器地址 + # investor_id='', # 账户 + # password='', # 密码 + # app_id='simnow_client_test', # 认证使用AppID + # auth_code='0000000000000000', # 认证使用授权码 + # subscribe_list=[b'rb2405'], # 订阅合约列表 + # md_flow_path='./log', # MdApi流文件存储地址,默认MD_LOCATION + # td_flow_path='./log', # TraderApi流文件存储地址,默认TD_LOCATION + # ) + + print('开始',len(future_account.subscribe_list)) + # 共享队列 + share_queue = Queue(maxsize=200) + + # 行情进程 + md_process = Process(target=run_tick_engine, args=(future_account, [share_queue])) + + # 交易进程 - 增加历史数据加载参数 + trader_process = Process(target=run_trader, args=( + future_account.broker_id, + future_account.server_dict['TDServer'], + future_account.investor_id, + future_account.password, + future_account.app_id, + future_account.auth_code, + share_queue, # 队列 + future_account.td_flow_path, + 2, # private_resume_type + 2, # public_resume_type + LOAD_HISTORY, # 传递历史数据加载参数 + HISTORY_ROWS, # 传递历史数据行数参数 + TRADER_ROWS, # 传递最低计算阈值 + )) + + md_process.start() + trader_process.start() + + md_process.join() + trader_process.join() + + \ No newline at end of file diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/这里填写好就可以跑了.png b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.28版本/这里填写好就可以跑了.png new file mode 100644 index 0000000000000000000000000000000000000000..96ad4e616ebae7f352bce4b07f6ece4f14d2a127 GIT binary patch literal 403614 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

)u* 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¬i_3D~0qA*8PphBrZ6?hi!rUt0E0_ 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�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%0A4NtUhV2O%LT;4WCqmG$eV3 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 q0: + #print(tick['created_at'],'vol:',tick['last_volume']) + # 处理Tick数据 + on_tick(tick) + + +def can_time(hour, minute): + hour = str(hour) + minute = str(minute) + if len(minute) == 1: + minute = "0" + minute + return int(hour + minute) + +def on_tick(tick): + + tm=can_time(tick['created_at'].hour,tick['created_at'].minute) + #print(tick['symbol']) + #print(1) + #if tm>1500 and tm<2100 : + # return + if tick['last_volume']==0: + return + quotes = tick + timetick=str(tick['created_at']).replace('+08:00', '') + tsymbol=tick['symbol'] + if tsymbol not in tsymbollist.keys(): + # 获取tick的买卖价和买卖量 + #zzg_quant + tsymbollist[tsymbol]=tick + bid_p=quotes['bid_p'] + ask_p=quotes['ask_p'] + bid_v=quotes['bid_v'] + ask_v=quotes['ask_v'] + else: + # 获取上一个tick的买卖价和买卖量 + rquotes =tsymbollist[tsymbol] + bid_p=rquotes['bid_p'] + ask_p=rquotes['ask_p'] + bid_v=rquotes['bid_v'] + ask_v=rquotes['ask_v'] + tsymbollist[tsymbol]=tick + tick_dt=pd.DataFrame({'datetime':timetick,'symbol':tick['symbol'],'mainsym':tick['symbol'].rstrip('0123456789').upper(),'lastprice':tick['price'], + 'vol':tick['last_volume'], + 'bid_p':bid_p,'ask_p':ask_p,'bid_v':bid_v,'ask_v':ask_v},index=[0]) + sym = tick_dt['symbol'][0] + #print(tick_dt) + + # 直接调用tickdata,不传递resample_rule参数,让其自行从全局配置获取 + tickdata(tick_dt, sym) + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def data_of(df): + global trader_df + # 将df数据合并到trader_df中 + trader_df = pd.concat([trader_df, df], ignore_index=True) + #print('trader_df: ', len(trader_df)) + #print(trader_df) + +def process(bidDict, askDict, symbol): + try: + # 尝试从quotedict中获取对应品种的报价数据 + dic = quotedict[symbol] + bidDictResult = dic['bidDictResult'] + askDictResult = dic['askDictResult'] + except: + # 如果获取失败,则初始化bidDictResult和askDictResult为空字典 + bidDictResult, askDictResult = {}, {} + + # 将所有买盘字典和卖盘字典的key合并,并按升序排序 + sList = sorted(set(list(bidDict.keys()) + list(askDict.keys()))) + + # 遍历所有的key,将相同key的值进行累加 + for s in sList: + if s in bidDict: + if s in bidDictResult: + bidDictResult[s] = int(bidDict[s]) + bidDictResult[s] + else: + bidDictResult[s] = int(bidDict[s]) + if s not in askDictResult: + askDictResult[s] = 0 + else: + if s in askDictResult: + askDictResult[s] = int(askDict[s]) + askDictResult[s] + else: + askDictResult[s] = int(askDict[s]) + if s not in bidDictResult: + bidDictResult[s] = 0 + + # 构建包含bidDictResult和askDictResult的字典,并存入quotedict中 + df = {'bidDictResult': bidDictResult, 'askDictResult': askDictResult} + quotedict[symbol] = df + + return bidDictResult, askDictResult +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + +def tickdata(df, symbol): + tickdata =pd.DataFrame({'datetime':df['datetime'],'symbol':df['symbol'],'lastprice':df['lastprice'], + 'volume':df['vol'],'bid_p':df['bid_p'],'bid_v':df['bid_v'],'ask_p':df['ask_p'],'ask_v':df['ask_v']}) + try: + if symbol in tickdatadict.keys(): + rdf=tickdatadict[symbol] + rdftm=pd.to_datetime(rdf['bartime'][0]).strftime('%Y-%m-%d %H:%M:%S') + now=str(tickdata['datetime'][0]) + if now>rdftm: + try: + oo=ofdatadict[symbol] + data_of(oo) + #print('oo',oo) + if symbol in quotedict.keys(): + quotedict.pop(symbol) + if symbol in tickdatadict.keys(): + tickdatadict.pop(symbol) + if symbol in ofdatadict.keys(): + ofdatadict.pop(symbol) + except IOError as e: + print('rdftm捕获到异常',e) + tickdata['bartime'] = pd.to_datetime(tickdata['datetime']) + tickdata['open'] = tickdata['lastprice'] + tickdata['high'] = tickdata['lastprice'] + tickdata['low'] = tickdata['lastprice'] + tickdata['close'] = tickdata['lastprice'] + tickdata['starttime'] = tickdata['datetime'] + else: + tickdata['bartime'] = rdf['bartime'] + tickdata['open'] = rdf['open'] + tickdata['high'] = max(tickdata['lastprice'].values,rdf['high'].values) + tickdata['low'] = min(tickdata['lastprice'].values,rdf['low'].values) + tickdata['close'] = tickdata['lastprice'] + tickdata['volume']=df['vol']+rdf['volume'].values + tickdata['starttime'] = rdf['starttime'] + else : + print('新bar的第一个tick进入') + tickdata['bartime'] = pd.to_datetime(tickdata['datetime']) + tickdata['open'] = tickdata['lastprice'] + tickdata['high'] = tickdata['lastprice'] + tickdata['low'] = tickdata['lastprice'] + tickdata['close'] = tickdata['lastprice'] + tickdata['starttime'] = tickdata['datetime'] + except IOError as e: + print('捕获到异常',e) + + + tickdata['bartime'] = pd.to_datetime(tickdata['bartime']) + # 直接从全局配置获取resample_rule + resample_rule = GLOBAL_LLM_CONFIG.get('bar_resample_rule') + + # 使用resample_rule生成K线 + bardata = tickdata.resample(on = 'bartime', rule = resample_rule, label = 'right', closed = 'right').agg({'starttime':'first','symbol':'last','open':'first','high':'max','low':'min','close':'last','volume':'sum'}).reset_index(drop = False) + bardata =bardata.dropna().reset_index(drop = True) + bardata['bartime'] = pd.to_datetime(bardata['bartime'][0]).strftime('%Y-%m-%d %H:%M:%S') + tickdatadict[symbol]=bardata + tickdata['volume']=df['vol'].values + #print(bardata['symbol'].values,bardata['bartime'].values) + orderflow_df_new(tickdata,bardata,symbol) + # time.sleep(0.5) + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def orderflow_df_new(df_tick,df_min,symbol): + startArray = pd.to_datetime(df_min['starttime']).values + voluememin= df_min['volume'].values + highs=df_min['high'].values + lows=df_min['low'].values + opens=df_min['open'].values + closes=df_min['close'].values + #endArray = pd.to_datetime(df_min['bartime']).values + endArray = df_min['bartime'].values + #print(endArray) + deltaArray = np.zeros((len(endArray),)) + tTickArray = pd.to_datetime(df_tick['datetime']).values + bp1TickArray = df_tick['bid_p'].values + ap1TickArray = df_tick['ask_p'].values + lastTickArray = df_tick['lastprice'].values + volumeTickArray = df_tick['volume'].values + symbolarray = df_tick['symbol'].values + indexFinal = 0 + for index,tEnd in enumerate(endArray): + dt=endArray[index] + start = startArray[index] + bidDict = {} + askDict = {} + bar_vol=voluememin[index] + bar_close=closes[index] + bar_open=opens[index] + bar_low=lows[index] + bar_high=highs[index] + bar_symbol=symbolarray[index] + # for indexTick in range(indexFinal,len(df_tick)): + # if tTickArray[indexTick] >= tEnd: + # break + # elif (tTickArray[indexTick] >= start) & (tTickArray[indexTick] < tEnd): + Bp = round(bp1TickArray[0],4) + Ap = round(ap1TickArray[0],4) + LastPrice = round(lastTickArray[0],4) + Volume = volumeTickArray[0] + if LastPrice >= Ap: + if str(LastPrice) in askDict.keys(): + askDict[str(LastPrice)] += Volume + else: + askDict[str(LastPrice)] = Volume + if LastPrice <= Bp: + if str(LastPrice) in bidDict.keys(): + bidDict[str(LastPrice)] += Volume + else: + bidDict[str(LastPrice)] = Volume + # indexFinal = indexTick + bidDictResult,askDictResult = process(bidDict,askDict,symbol) + bidDictResult=dict(sorted(bidDictResult.items(),key=operator.itemgetter(0))) + askDictResult=dict(sorted(askDictResult.items(),key=operator.itemgetter(0))) + prinslist=list(bidDictResult.keys()) + asklist=list(askDictResult.values()) + bidlist=list(bidDictResult.values()) + delta=(sum(askDictResult.values()) - sum(bidDictResult.values())) + #print(prinslist,asklist,bidlist) + #print(len(prinslist),len(bidDictResult),len(askDictResult)) + df=pd.DataFrame({'price':pd.Series([prinslist]),'Ask':pd.Series([asklist]),'Bid':pd.Series([bidlist])}) + #df=pd.DataFrame({'price':pd.Series(bidDictResult.keys()),'Ask':pd.Series(askDictResult.values()),'Bid':pd.Series(bidDictResult.values())}) + df['symbol']=bar_symbol + df['datetime']=dt + df['delta']=str(delta) + df['close']=bar_close + df['open']=bar_open + df['high']=bar_high + df['low']=bar_low + df['volume']=bar_vol + #df['ticktime']=tTickArray[0] + df['dj'] = GetOrderFlow_dj(df) + ofdatadict[symbol]=df + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def GetOrderFlow_dj(kData): + Config = { + 'Value1': 3, + 'Value2': 3, + 'Value3': 3, + 'Value4': True, + } + aryData = kData + djcout = 0 + + # 遍历kData中的每一行,计算djcout指标 + for index, row in aryData.iterrows(): + kItem = aryData.iloc[index] + high = kItem['high'] + low = kItem['low'] + close = kItem['close'] + open = kItem['open'] + dtime = kItem['datetime'] + price_s = kItem['price'] + Ask_s = kItem['Ask'] + Bid_s = kItem['Bid'] + delta = kItem['delta'] + + price_s = price_s + Ask_s = Ask_s + Bid_s = Bid_s + + gj = 0 + xq = 0 + gxx = 0 + xxx = 0 + + # 遍历price_s中的每一个元素,计算相关指标 + for i in np.arange(0, len(price_s), 1): + duiji = { + 'price': 0, + 'time': 0, + 'longshort': 0, + } + + if i == 0: + delta = delta + + order= { + "Price":price_s[i], + "Bid":{ "Value":Bid_s[i]}, + "Ask":{ "Value":Ask_s[i]} + } + #空头堆积 + if i >= 0 and i < len(price_s) - 1: + if (order["Bid"]["Value"] > Ask_s[i + 1] * int(Config['Value1'])): + gxx += 1 + gj += 1 + if gj >= int(Config['Value2']) and Config['Value4'] == True: + duiji['price'] = price_s[i] + duiji['time'] = dtime + duiji['longshort'] = -1 + if float(duiji['price']) > 0: + djcout += -1 + else: + gj = 0 + #多头堆积 + if i >= 1 and i <= len(price_s) - 1: + if (order["Ask"]["Value"] > Bid_s[i - 1] * int(Config['Value1'])): + xq += 1 + xxx += 1 + if xq >= int(Config['Value2']) and Config['Value4'] == True: + duiji['price'] = price_s[i] + duiji['time'] = dtime + duiji['longshort'] = 1 + if float(duiji['price']) > 0: + djcout += 1 + else: + xq = 0 + + # 返回计算得到的djcout值 + return djcout + +#交易程序--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +class MyTrader(TraderApiBase): + def __init__(self, broker_id, td_server, investor_id, password, app_id, auth_code, md_queue=None, page_dir='', private_resume_type=2, public_resume_type=2): + # Cython类不使用super().__init__()方式调用父类初始化方法 + # TraderApiBase.__init__会由Cython自动处理 + + self.py=30 #设置委托价格的偏移,更加容易促成成交。仅螺纹,其他品种根据最小点波动,自己设置 + self.cont_df=0 + self.trailing_stop_percent = 0.005 #跟踪出场参数,从0.02减小到0.005 + self.fixed_stop_loss_percent = 0.01 #固定出场参数 + self.dj_X=1 #开仓的堆积参数 + + self.pos=0 + self.Lots=1 #下单手数 + self.short_trailing_stop_price = 0 + self.long_trailing_stop_price = 0 + self.sl_long_price=0 + self.sl_shor_price=0 + self.out_long=0 + self.out_short=0 + self.clearing_executed=False + self.day_closed = False # 添加日内平仓标志 + self.kgdata = True #历史数据加载一次 + self.holddata=True #持仓数据加载一次 + self.use_ai_model = True # 是否使用AI模型来分析 + + # 新增止盈止损字典,按合约ID索引 + self.stop_order_dict = {} + + # 新增历史数据加载相关参数 + self.load_history = False # 是否加载历史数据 + self.history_rows = 30 # 默认加载30行历史数据 + self.trader_rows = 10 # 当tader_df里的数据大于10行时开始计算指标及触发AI模型 + + def load_history_data(self, instrument_id): + """ + 加载历史数据 + + Args: + instrument_id: 合约ID + """ + if not self.load_history: + return + + try: + # 不再只提取英文字母,使用完整的合约代码 + symbol = str(instrument_id) + json_file_path = f"traderdata/{symbol}_ofdata.json" + + # 检查traderdata目录是否存在 + if not os.path.exists("traderdata"): + print(f"traderdata目录不存在,创建目录") + os.makedirs("traderdata") + + if os.path.exists(json_file_path): + try: + # 读取JSON文件,使用lines=True确保正确读取每行JSON + df = pd.read_json(json_file_path, lines=True) + + if len(df) == 0: + print(f"历史数据文件为空: {json_file_path}") + print("将使用实时数据开始交易") + return False + + # 如果数据行数超过设定的历史行数,只取最后N行 + if len(df) > self.history_rows: + df = df.tail(self.history_rows) + print(f"历史数据超过设定行数,仅加载最后{self.history_rows}行") + + # 更新全局trader_df + global trader_df + trader_df = df + + print(f"\n===== 历史数据加载成功 =====") + print(f"合约: {instrument_id}") + print(f"数据行数: {len(df)}行") + print(f"数据时间范围: {df['datetime'].iloc[0]} 到 {df['datetime'].iloc[-1]}") + print(f"最新价格: {df['close'].iloc[-1]}") + print(f"最新成交量: {df['volume'].iloc[-1]}") + print("===========================\n") + + # 更新cont_df + self.cont_df = len(df) + + # 计算日均线 + if len(df) > 0: + df['dayma'] = df['close'].mean() + + # 计算累积的delta值 + df['delta'] = df['delta'].astype(float) + df['delta累计'] = df['delta'].cumsum() + + return True + except Exception as e: + print(f"\n===== 历史数据加载错误 =====") + print(f"合约: {instrument_id}") + print(f"读取JSON错误: {e}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + else: + print(f"\n===== 历史数据加载提示 =====") + print(f"合约: {instrument_id}") + print(f"未找到历史数据文件: {json_file_path}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + + except Exception as e: + print(f"\n===== 历史数据加载错误 =====") + print(f"合约: {instrument_id}") + print(f"错误信息: {e}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + + #读取保存的数据 + def read_to_csv(self,symbol): + # 文件夹路径和文件路径 + # 使用完整的合约代码 + symbol = str(symbol) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}traderdata.csv") + # 如果文件夹不存在则创建 + if not os.path.exists(folder_path): + os.makedirs(folder_path) + + # 读取保留的模型数据CSV文件 + if os.path.exists(file_path): + df = pd.read_csv(file_path) + if not df.empty and self.holddata==True: + # 选择最后一行数据 + row = df.iloc[-1] + # 根据CSV文件的列名将数据赋值给相应的属性 + self.pos = int(row['pos']) + self.short_trailing_stop_price = float(row['short_trailing_stop_price']) + self.long_trailing_stop_price = float(row['long_trailing_stop_price']) + self.sl_long_price = float(row['sl_long_price']) + self.sl_shor_price = float(row['sl_shor_price']) + # self.out_long = int(row['out_long']) + # self.out_short = int(row['out_short']) + print("找到历史交易数据文件,已经更新持仓,止损止盈数据", df.iloc[-1]) + self.holddata=False + else: + pass + #print("没有找到历史交易数据文件", file_path) + #如果没有找到CSV,则初始化变量 + + pass + + #保存数据 + def save_to_csv(self,symbol): + # 使用完整的合约代码 + symbol = str(symbol) + # 创建DataFrame + data = { + 'datetime': [datetime.now().strftime('%Y-%m-%d %H:%M:%S')], # 使用当前时间 + 'pos': [self.pos], + 'short_trailing_stop_price': [self.short_trailing_stop_price], + 'long_trailing_stop_price': [self.long_trailing_stop_price], + 'sl_long_price': [self.sl_long_price], + 'sl_shor_price': [self.sl_shor_price], + } + + df = pd.DataFrame(data) + + # 将DataFrame保存到CSV文件 + df.to_csv(f"traderdata/{symbol}traderdata.csv", index=False) + + #每日收盘重置数据 + def day_data_reset(self,data): + # 获取当前时间 + current_time = datetime.now().time() + + # 第一时间范围 + clearing_time1_start = s_time(14,55) + clearing_time1_end = s_time(15,00) + + # 第二时间范围 + clearing_time2_start = s_time(2,25) + clearing_time2_end = s_time(2,30) + + current_bid = float(data['BidPrice1']) # 当前买价 + current_ask = float(data['AskPrice1']) # 当前卖价 + + # 创建一个标志变量,用于记录是否已经执行过 + self.clearing_executed = False + # 检查当前时间第一个操作的时间范围内 + if clearing_time1_start <= current_time <= clearing_time1_end and not self.clearing_executed : + self.clearing_executed = True # 设置标志变量为已执行 + + # 如果有持仓,强制平仓 + if self.pos != 0: + print("交易日结束,开始强制平仓") + # 遍历所有合约发送平仓指令 + for instrument_id in list(self.stop_order_dict.keys()): + stops = self.stop_order_dict[instrument_id] + + # 平多仓 + if stops['long']['position'] > 0: + print(f"发送平多仓指令: {instrument_id}, 手数: {stops['long']['position']}, 价格: {current_bid}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_bid - self.py, + stops['long']['position'], + b'1', b'3') + # 平空仓 + if stops['short']['position'] > 0: + print(f"发送平空仓指令: {instrument_id}, 手数: {stops['short']['position']}, 价格: {current_ask}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_ask + self.py, + stops['short']['position'], + b'0', b'3') + + # 清空所有合约的持仓信息 + for instrument_id in list(self.stop_order_dict.keys()): + self.clear_position_info(instrument_id, 'all') + self.day_closed = True # 设置日内平仓标志 + print("日内交易已结束,禁止开新仓") + + # 检查当前时间是否在第二个操作的时间范围内 + elif clearing_time2_start <= current_time <= clearing_time2_end and not self.clearing_executed : + self.clearing_executed = True # 设置标志变量为已执行 + + # 如果有持仓,强制平仓 + if self.pos != 0: + print("交易日结束,开始强制平仓") + # 遍历所有合约发送平仓指令 + for instrument_id in list(self.stop_order_dict.keys()): + stops = self.stop_order_dict[instrument_id] + + # 平多仓 + if stops['long']['position'] > 0: + print(f"发送平多仓指令: {instrument_id}, 手数: {stops['long']['position']}, 价格: {current_bid}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_bid - self.py, + stops['long']['position'], + b'1', b'3') + # 平空仓 + if stops['short']['position'] > 0: + print(f"发送平空仓指令: {instrument_id}, 手数: {stops['short']['position']}, 价格: {current_ask}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_ask + self.py, + stops['short']['position'], + b'0', b'3') + + # 清空所有合约的持仓信息 + for instrument_id in list(self.stop_order_dict.keys()): + self.clear_position_info(instrument_id, 'all') + self.day_closed = True # 设置日内平仓标志 + print("日内交易已结束,禁止开新仓") + else: + self.clearing_executed = False + # 在新交易日开始时重置日内平仓标志 + if current_time < clearing_time1_start or (current_time > clearing_time1_end and current_time < clearing_time2_start): + self.day_closed = False + return self.clearing_executed + + def OnRtnTrade(self, pTrade): + print("||成交回报||", pTrade) + + # 获取成交信息 + instrument_id = pTrade['InstrumentID'].decode() + direction = pTrade['Direction'].decode() # '0'为买入,'1'为卖出 + offset_flag = pTrade['OffsetFlag'].decode() # '0'为开仓,'1'为平仓,'3'为平今 + volume = pTrade['Volume'] + price = pTrade['Price'] + + # 根据成交类型更新持仓信息 + if offset_flag in ['1', '3']: # 平仓或平今 + # 判断平的是多头还是空头 + if direction == '1': # 卖出,平多头 + print(f"平多头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + else: # 买入,平空头 + print(f"平空头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + + elif offset_flag == '0': # 开仓 + if direction == '0': # 买入,开多头 + print(f"开多头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 如果有空头持仓,先清空 + if instrument_id in self.stop_order_dict and self.stop_order_dict[instrument_id]['short']['position'] > 0: + self.clear_position_info(instrument_id, 'short') + + # 设置多头持仓信息 + sl_price = price * (1 - self.fixed_stop_loss_percent) # 默认止损价 + tp_price = price * (1 + self.trailing_stop_percent) # 默认止盈价 + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = price * (1 - self.trailing_stop_percent) + + log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + STOPLOSS_LOGGER.info(log_message) + + # 更新多头持仓信息,设置合理的跟踪止损初始值 + self.update_stop_order_dict(instrument_id, 'long', volume, price, sl_price, tp_price, initial_trailing_stop) + self.pos = volume # 更新全局持仓状态 + + # 兼容旧代码 + self.long_trailing_stop_price = initial_trailing_stop + self.sl_long_price = sl_price + self.save_to_csv(instrument_id) + + else: # 卖出,开空头 + print(f"开空头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 如果有多头持仓,先清空 + if instrument_id in self.stop_order_dict and self.stop_order_dict[instrument_id]['long']['position'] > 0: + self.clear_position_info(instrument_id, 'long') + + # 设置空头持仓信息 + sl_price = price * (1 + self.fixed_stop_loss_percent) # 默认止损价 + tp_price = price * (1 - self.trailing_stop_percent) # 默认止盈价 + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = price * (1 + self.trailing_stop_percent) + + log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + STOPLOSS_LOGGER.info(log_message) + + # 更新空头持仓信息,设置合理的跟踪止损初始值 + self.update_stop_order_dict(instrument_id, 'short', self.Lots, price, sl_price, tp_price, initial_trailing_stop) + self.pos = -1 # 更新全局持仓状态 + + # 兼容旧代码 + self.short_trailing_stop_price = initial_trailing_stop + self.sl_shor_price = sl_price + self.save_to_csv(instrument_id) + + def OnRspOrderInsert(self, pInputOrder, pRspInfo, nRequestID, bIsLast): + print("||OnRspOrderInsert||", pInputOrder, pRspInfo, nRequestID, bIsLast) + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + # 订单状态通知 + def OnRtnOrder(self, pOrder): + print("||订单回报||", pOrder) + + def Join(self): + data = None + # 记录上次加载止盈止损信息的时间和合约 + last_load_time = {} + + while True: + if self.status == 0: + + while not self.md_queue.empty(): + data = self.md_queue.get(block=False) + instrument_id = data['InstrumentID'].decode() # 品种代码 + + # 首次运行时加载历史数据 + if self.kgdata: + self.load_history_data(instrument_id) + self.kgdata = False + + # 加载该合约的止盈止损信息,避免频繁加载 + current_time = time.time() + if instrument_id not in last_load_time or current_time - last_load_time.get(instrument_id, 0) > 60: # 每60秒才重新加载一次 + self.load_stop_orders_from_file(instrument_id) + last_load_time[instrument_id] = current_time + + # 检查止盈止损条件 + self.check_stop_conditions(data) + + # 在每个tick都检查和处理AI交易信号 - 移到这里以提高执行速度 + if self.use_ai_model: + self.check_and_process_ai_signals(data) + + # 原有代码... + self.read_to_csv(instrument_id) + self.day_data_reset(data) + tickcome(data) + #新K线开始,启动交易程序 and 保存行情数据 + if len(trader_df)>self.cont_df and len(trader_df)>0: + # 计算日均线 + trader_df['dayma'] = trader_df['close'].mean() + + # 计算累积的delta值 + trader_df['delta'] = trader_df['delta'].astype(float) + trader_df['delta累计'] = trader_df['delta'].cumsum() + + # 检查文件是否存在 + json_file_path = f"traderdata/{instrument_id}_ofdata.json" + + # 确保待保存的新数据中datetime字段是格式化的日期时间字符串 + if 'datetime' in trader_df.columns: + # 无论什么类型,都统一转换为字符串格式 + trader_df['datetime'] = trader_df['datetime'].astype(str) + + if os.path.exists(json_file_path): + try: + # 读取现有数据 + existing_df = pd.read_json(json_file_path, lines=True) + + # 确保现有数据中的datetime字段是字符串类型 + if 'datetime' in existing_df.columns: + existing_df['datetime'] = existing_df['datetime'].astype(str) + + # 合并新数据 + combined_df = pd.concat([existing_df, trader_df.tail(1)], ignore_index=True) + # 保存合并后的数据,使用lines=True确保每行是独立的JSON对象 + combined_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + except Exception as e: + print(f"读取或保存JSON文件时出错: {e}") + # 如果读取出错,直接保存当前数据 + trader_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + else: + # 创建新文件并保存整个DataFrame + trader_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + + # 更新跟踪止损价格 - 兼容旧版本代码 + if self.long_trailing_stop_price >0 and self.pos>0: + self.long_trailing_stop_price = trader_df['low'].iloc[-1] if self.long_trailing_stop_price0 and self.pos<0: + self.short_trailing_stop_price = trader_df['high'].iloc[-1] if trader_df['high'].iloc[-1] self.trader_rows: + AI_THREAD_RUNNING = True + ai_thread = threading.Thread( + target=self.background_model_call, + args=(trader_df, instrument_id) + ) + ai_thread.daemon = True # 设置为守护线程,主程序退出时自动结束 + ai_thread.start() + print("启动AI分析线程...") + + print(trader_df['datetime']) + self.cont_df=len(trader_df) + else: + time.sleep(1) + + def background_model_call(self, data_df, instrument_id): + """ + 在后台线程中调用大模型,并将交易信号放入队列 + + Args: + data_df: 包含订单流数据的DataFrame + instrument_id: 合约ID + """ + global AI_THREAD_RUNNING + + start_time = datetime.now() + log_message = f"\n===== 开始AI分析 [{start_time.strftime('%Y-%m-%d %H:%M:%S')}] =====" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = f"正在分析合约: {instrument_id}" + print(log_message) + AI_LOGGER.info(log_message) + + try: + # 复制DataFrame以避免在不同线程间共享数据可能导致的问题 + df_copy = data_df.copy() + + # 输出分析的数据行数 + log_message = f"分析数据行数: {len(df_copy)}" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = f"最新价格: {df_copy['close'].iloc[-1] if len(df_copy) > 0 else 'N/A'}" + print(log_message) + AI_LOGGER.info(log_message) + + # 调用大模型获取交易信号 + trading_signal = call_deepseek_model(df_copy, self) # 传递self参数 + + # 计算分析耗时 + end_time = datetime.now() + elapsed = (end_time - start_time).total_seconds() + + # 将交易信号和合约ID一起放入队列 + signal_data = { + 'signal': trading_signal, + 'instrument_id': instrument_id, + 'timestamp': end_time # 使用结束时间作为时间戳 + } + + AI_SIGNAL_QUEUE.put(signal_data) + + log_message = f"AI模型分析完成,结果已放入队列,耗时: {elapsed:.2f}秒" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = f"分析结果: {trading_signal}" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = "===== AI分析完成 =====" + print(log_message + "\n") + AI_LOGGER.info(log_message) + except Exception as e: + end_time = datetime.now() + elapsed = (end_time - start_time).total_seconds() + + log_message = f"AI模型分析线程出现异常: {e}" + print(log_message) + AI_LOGGER.error(log_message) + + print(f"异常详情:") + import traceback + error_traceback = traceback.format_exc() + AI_LOGGER.error(f"异常详情:\n{error_traceback}") + traceback.print_exc() + + log_message = f"分析失败,耗时: {elapsed:.2f}秒" + print(log_message) + AI_LOGGER.error(log_message) + + log_message = "===== AI分析异常结束 =====" + print(log_message + "\n") + AI_LOGGER.error(log_message) + finally: + # 标记线程已完成 + AI_THREAD_RUNNING = False + + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + def check_and_process_ai_signals(self, data): + """ + 检查并处理AI产生的交易信号 + 每个tick都会调用此函数,实现更快的交易信号响应 + """ + if AI_SIGNAL_QUEUE.empty(): + return + + # 从队列中获取信号 + signal_data = AI_SIGNAL_QUEUE.get() + trading_signal = signal_data['signal'] + instrument_id = signal_data['instrument_id'] + signal_time = signal_data['timestamp'] + + # 检查信号是否过期(超过15秒) + if (datetime.now() - signal_time).total_seconds() > 15: + log_message = f"AI信号已过期,忽略: {trading_signal}" + print(log_message) + SIGNAL_LOGGER.warning(log_message) + return + + # 验证合约ID是否匹配 + if instrument_id != data['InstrumentID'].decode(): + # 如果合约不匹配,将信号放回队列以便后续处理 + AI_SIGNAL_QUEUE.put(signal_data) + return + + log_message = f"\n===== 执行AI模型交易信号 [{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] =====" + print(log_message) + SIGNAL_LOGGER.info(log_message) + + log_message = f"信号生成时间: {signal_time.strftime('%Y-%m-%d %H:%M:%S')}" + print(log_message) + SIGNAL_LOGGER.info(log_message) + + log_message = f"信号类型: {trading_signal.get('action', '不操作')}" + print(log_message) + SIGNAL_LOGGER.info(log_message) + + log_message = f"置信度: {trading_signal.get('confidence', 0)}" + print(log_message) + SIGNAL_LOGGER.info(log_message) + + log_message = f"理由: {trading_signal.get('reason', '')}" + print(log_message) + SIGNAL_LOGGER.info(log_message) + + # 根据AI模型返回的交易信号执行交易 + action = trading_signal.get('action', '不操作') + confidence = trading_signal.get('confidence', 0) + reason = trading_signal.get('reason', '') + stop_loss = trading_signal.get('stop_loss', 0) + take_profit = trading_signal.get('take_profit', 0) + trailing_percent = trading_signal.get('trailing_percent', 0) + + # 如果AI建议了有效的跟踪止损百分比,则更新参数 + if 0.0001 <= trailing_percent <= 0.001: + old_percent = self.trailing_stop_percent + self.trailing_stop_percent = trailing_percent + log_message = f"更新跟踪止损百分比参数: {old_percent*100:.3f}% -> {trailing_percent*100:.3f}%" + STOPLOSS_LOGGER.info(log_message) + + # 获取现有持仓信息 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + current_stops = self.stop_order_dict[instrument_id] + + # 如果持有多头或空头头寸,更新跟踪止损价 + if current_stops['long']['position'] > 0: + entry_price = current_stops['long']['entry_price'] + new_trailing_stop = float(data['BidPrice1']) * (1 - self.trailing_stop_percent) + old_trailing_stop = current_stops['long']['trailing_stop'] + + # 只有当新计算的跟踪止损价更高时才更新 + if new_trailing_stop > old_trailing_stop: + self.update_stop_order_dict(instrument_id, 'long', None, None, None, None, new_trailing_stop) + + # 兼容旧代码 + self.long_trailing_stop_price = new_trailing_stop + self.save_to_csv(instrument_id) + + elif current_stops['short']['position'] > 0: + entry_price = current_stops['short']['entry_price'] + new_trailing_stop = float(data['AskPrice1']) * (1 + self.trailing_stop_percent) + old_trailing_stop = current_stops['short']['trailing_stop'] + + # 只有当新计算的跟踪止损价更低或原来为0时才更新 + if new_trailing_stop < old_trailing_stop or old_trailing_stop == 0: + self.update_stop_order_dict(instrument_id, 'short', None, None, None, None, new_trailing_stop) + + # 兼容旧代码 + self.short_trailing_stop_price = new_trailing_stop + self.save_to_csv(instrument_id) + + # 只有当置信度大于等于5时才执行交易 + if confidence >= 6: + print(f"开始执行交易,当前价格: 买一{data['BidPrice1']} / 卖一{data['AskPrice1']}") + + # 获取现有持仓信息 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + current_stops = self.stop_order_dict[instrument_id] + + if action == '开多' and current_stops['long']['position'] <= 0: + # 如果持有空头头寸,先平空 + if current_stops['short']['position'] > 0: + print('执行平空操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['AskPrice1']+self.py, + current_stops['short']['position'], + b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + + # 开多 + print('执行开多操作') + entry_price = float(data['AskPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price+self.py, self.Lots, b'0', b'0') + + # 使用AI建议的止损止盈价格 + sl_price = stop_loss if stop_loss > 0 else entry_price * (1 - self.fixed_stop_loss_percent) + tp_price = take_profit if take_profit > 0 else entry_price * (1 + self.trailing_stop_percent) + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = entry_price * (1 - self.trailing_stop_percent) + + log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + STOPLOSS_LOGGER.info(log_message) + + # 更新多头持仓信息,设置合理的跟踪止损初始值 + self.update_stop_order_dict(instrument_id, 'long', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = 1 # 更新全局持仓状态 + + # 兼容旧代码 + self.long_trailing_stop_price = initial_trailing_stop + self.sl_long_price = sl_price + self.save_to_csv(instrument_id) + + elif action == '开空' and current_stops['short']['position'] <= 0: + # 如果持有多头头寸,先平多 + if current_stops['long']['position'] > 0: + print('执行平多操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['BidPrice1']-self.py, + current_stops['long']['position'], + b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + + # 开空 + print('执行开空操作') + entry_price = float(data['BidPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price-self.py, self.Lots, b'1', b'0') + + # 使用AI建议的止损止盈价格 + sl_price = stop_loss if stop_loss > 0 else entry_price * (1 + self.fixed_stop_loss_percent) + tp_price = take_profit if take_profit > 0 else entry_price * (1 - self.trailing_stop_percent) + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = entry_price * (1 + self.trailing_stop_percent) + + log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + STOPLOSS_LOGGER.info(log_message) + + # 更新空头持仓信息,设置合理的跟踪止损初始值 + self.update_stop_order_dict(instrument_id, 'short', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = -1 # 更新全局持仓状态 + + # 兼容旧代码 + self.short_trailing_stop_price = initial_trailing_stop + self.sl_shor_price = sl_price + self.save_to_csv(instrument_id) + + elif action == '平多' and current_stops['long']['position'] > 0: + print('执行平多操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['BidPrice1']-self.py, + current_stops['long']['position'], + b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + + elif action == '平空' and current_stops['short']['position'] > 0: + print('执行平空操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['AskPrice1']+self.py, + current_stops['short']['position'], + b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + + # 添加处理复合交易指令的逻辑 - 平多开空 + elif action == '平多开空' and current_stops['long']['position'] > 0: + print('执行平多开空操作') + + # 第一步:平多 + print('1. 执行平多操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['BidPrice1']-self.py, + current_stops['long']['position'], + b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + + # 第二步:开空 + print('2. 执行开空操作') + entry_price = float(data['BidPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price-self.py, self.Lots, b'1', b'0') + + # 使用AI建议的止损止盈价格 + sl_price = stop_loss if stop_loss > 0 else entry_price * (1 + self.fixed_stop_loss_percent) + tp_price = take_profit if take_profit > 0 else entry_price * (1 - self.trailing_stop_percent) + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = entry_price * (1 + self.trailing_stop_percent) + + log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + STOPLOSS_LOGGER.info(log_message) + + # 更新空头持仓信息 + self.update_stop_order_dict(instrument_id, 'short', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = -1 # 更新全局持仓状态 + + # 兼容旧代码 + self.short_trailing_stop_price = initial_trailing_stop + self.sl_shor_price = sl_price + self.save_to_csv(instrument_id) + + # 添加处理复合交易指令的逻辑 - 平空开多 + elif action == '平空开多' and current_stops['short']['position'] > 0: + print('执行平空开多操作') + + # 第一步:平空 + print('1. 执行平空操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['AskPrice1']+self.py, + current_stops['short']['position'], + b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + + # 第二步:开多 + print('2. 执行开多操作') + entry_price = float(data['AskPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price+self.py, self.Lots, b'0', b'0') + + # 使用AI建议的止损止盈价格 + sl_price = stop_loss if stop_loss > 0 else entry_price * (1 - self.fixed_stop_loss_percent) + tp_price = take_profit if take_profit > 0 else entry_price * (1 + self.trailing_stop_percent) + + # 设置初始跟踪止损价,与开仓价保持一定距离 + initial_trailing_stop = entry_price * (1 - self.trailing_stop_percent) + + log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + STOPLOSS_LOGGER.info(log_message) + + # 更新多头持仓信息 + self.update_stop_order_dict(instrument_id, 'long', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = 1 # 更新全局持仓状态 + + # 兼容旧代码 + self.long_trailing_stop_price = initial_trailing_stop + self.sl_long_price = sl_price + self.save_to_csv(instrument_id) + + # 如果AI建议调整止损止盈价格 + elif action == '不操作': + if stop_loss > 0: + if current_stops['long']['position'] > 0: # 多头持仓 + self.update_stop_order_dict(instrument_id, 'long', None, None, stop_loss, None, None) + print(f'已调整多头止损价: {stop_loss}') + + # 兼容旧代码 + self.sl_long_price = stop_loss + self.save_to_csv(instrument_id) + elif current_stops['short']['position'] > 0: # 空头持仓 + self.update_stop_order_dict(instrument_id, 'short', None, None, stop_loss, None, None) + print(f'已调整空头止损价: {stop_loss}') + + # 兼容旧代码 + self.sl_shor_price = stop_loss + self.save_to_csv(instrument_id) + + if take_profit > 0: + if current_stops['long']['position'] > 0: # 多头持仓 + self.update_stop_order_dict(instrument_id, 'long', None, None, None, take_profit, None) + print(f'已调整多头止盈价: {take_profit}') + + # 兼容旧代码 + self.long_trailing_stop_price = take_profit + self.save_to_csv(instrument_id) + elif current_stops['short']['position'] > 0: # 空头持仓 + self.update_stop_order_dict(instrument_id, 'short', None, None, None, take_profit, None) + print(f'已调整空头止盈价: {take_profit}') + + # 兼容旧代码 + self.short_trailing_stop_price = take_profit + self.save_to_csv(instrument_id) + + print("===== 交易信号执行完成 =====\n") + else: + print(f"信号置信度{confidence}低于执行阈值(5),不执行交易") + print("===== 交易信号处理完成 =====\n") + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + def format_data_for_llm(self, df): + """ + 将DataFrame格式化为适合LLM分析的文本格式,包含历史交易信息 + """ + # 提取最近几条记录 + recent_data = df.tail(self.trader_rows) + + # 构建基本信息 + data_text = "订单流数据分析:\n\n" + + # 提取最新行情数据 + instrument_id = recent_data['symbol'].iloc[-1] + + # 添加最新价格和交易量信息 + data_text += f"当前时间: {recent_data['datetime'].iloc[-1]}\n" + data_text += f"当前价格: {recent_data['close'].iloc[-1]}\n" + data_text += f"开盘价: {recent_data['open'].iloc[-1]}\n" + data_text += f"最高价: {recent_data['high'].iloc[-1]}\n" + data_text += f"最低价: {recent_data['low'].iloc[-1]}\n" + data_text += f"成交量: {recent_data['volume'].iloc[-1]}\n" + + # 计算价格趋势 + if len(recent_data) >= 5: + price_trend = recent_data['close'].pct_change().tail(5).mean() * 100 + data_text += f"价格短期趋势: {'上涨' if price_trend > 0 else '下跌'} ({price_trend:.2f}%)\n" + + # 计算价格波动性 + if len(recent_data) >= 5: + volatility = recent_data['close'].pct_change().tail(5).std() * 100 + data_text += f"价格波动性: {volatility:.2f}%\n" + + # 添加支撑和阻力位分析 + recent_high = recent_data['high'].max() + recent_low = recent_data['low'].min() + data_text += f"近期阻力位: {recent_high}\n" + data_text += f"近期支撑位: {recent_low}\n" + + # 添加均线分析 - 计算5、10、20均线 + if len(df) >= 20: + # 计算均线 + ma5 = df['close'].rolling(5).mean().iloc[-1] + ma10 = df['close'].rolling(10).mean().iloc[-1] + ma20 = df['close'].rolling(20).mean().iloc[-1] + + data_text += f"MA5: {ma5:.2f}\n" + data_text += f"MA10: {ma10:.2f}\n" + data_text += f"MA20: {ma20:.2f}\n" + + # 判断均线形态 + if abs(ma5 - ma10) / ma10 < 0.001 and abs(ma10 - ma20) / ma20 < 0.001: + ma_pattern = "均线粘合" + elif ma5 > ma10 and ma10 > ma20: + ma_pattern = "多头排列" + elif ma5 < ma10 and ma10 < ma20: + ma_pattern = "空头排列" + elif ma5 > ma10 and ma10 < ma20: + ma_pattern = "金叉形态" + elif ma5 < ma10 and ma10 > ma20: + ma_pattern = "死叉形态" + else: + ma_pattern = "无明显形态" + + data_text += f"均线形态: {ma_pattern}\n" + + # 价格与均线关系 + current_price = df['close'].iloc[-1] + data_text += f"价格相对MA5: {'上方' if current_price > ma5 else '下方'} ({(current_price/ma5-1)*100:.2f}%)\n" + data_text += f"价格相对MA10: {'上方' if current_price > ma10 else '下方'} ({(current_price/ma10-1)*100:.2f}%)\n" + data_text += f"价格相对MA20: {'上方' if current_price > ma20 else '下方'} ({(current_price/ma20-1)*100:.2f}%)\n" + + # 日内超涨超跌分析 + if len(df) >= 20: + # 计算日内振幅 + daily_high = df['high'].iloc[-20:].max() + daily_low = df['low'].iloc[-20:].min() + daily_range = (daily_high - daily_low) / daily_low * 100 + + # 当前价格在日内范围的位置 + current_in_range = (df['close'].iloc[-1] - daily_low) / (daily_high - daily_low) * 100 if (daily_high - daily_low) > 0 else 50 + + data_text += f"日内振幅: {daily_range:.2f}%\n" + data_text += f"价格在日内范围的位置: {current_in_range:.2f}% (0%为日低, 100%为日高)\n" + + # 判断超涨超跌 + if current_in_range > 85: + data_text += "日内状态: 可能超涨\n" + elif current_in_range < 15: + data_text += "日内状态: 可能超跌\n" + else: + data_text += "日内状态: 正常区间\n" + + # 形态识别 + if len(df) >= 20: + # 简单K线形态识别 + recent_k = df.tail(5).copy() + + # 计算实体和影线 + recent_k['body'] = abs(recent_k['close'] - recent_k['open']) + recent_k['upper_shadow'] = recent_k.apply(lambda x: x['high'] - max(x['open'], x['close']), axis=1) + recent_k['lower_shadow'] = recent_k.apply(lambda x: min(x['open'], x['close']) - x['low'], axis=1) + + # 最新K线特征 + latest_k = recent_k.iloc[-1] + prev_k = recent_k.iloc[-2] if len(recent_k) > 1 else None + + data_text += "\nK线形态分析:\n" + + # 判断最新K线类型 + if latest_k['body'] == 0: + k_type = "十字星" + elif latest_k['upper_shadow'] > 2 * latest_k['body'] and latest_k['lower_shadow'] < 0.5 * latest_k['body']: + k_type = "上影线长" + elif latest_k['lower_shadow'] > 2 * latest_k['body'] and latest_k['upper_shadow'] < 0.5 * latest_k['body']: + k_type = "下影线长" + elif latest_k['close'] > latest_k['open'] and latest_k['body'] > np.mean(recent_k['body']): + k_type = "大阳线" + elif latest_k['close'] < latest_k['open'] and latest_k['body'] > np.mean(recent_k['body']): + k_type = "大阴线" + elif latest_k['close'] > latest_k['open']: + k_type = "小阳线" + elif latest_k['close'] < latest_k['open']: + k_type = "小阴线" + else: + k_type = "普通K线" + + data_text += f"最新K线类型: {k_type}\n" + + # 判断简单组合形态 + if prev_k is not None: + if prev_k['close'] < prev_k['open'] and latest_k['close'] > latest_k['open'] and latest_k['open'] <= prev_k['close'] and latest_k['close'] > prev_k['open']: + data_text += "组合形态: 可能构成看涨吞没形态\n" + elif prev_k['close'] > prev_k['open'] and latest_k['close'] < latest_k['open'] and latest_k['open'] >= prev_k['close'] and latest_k['close'] < prev_k['open']: + data_text += "组合形态: 可能构成看跌吞没形态\n" + elif prev_k['close'] < prev_k['open'] and latest_k['close'] > latest_k['open'] and latest_k['body'] > 1.5 * prev_k['body']: + data_text += "组合形态: 可能构成看涨势能增强\n" + elif prev_k['close'] > prev_k['open'] and latest_k['close'] < latest_k['open'] and latest_k['body'] > 1.5 * prev_k['body']: + data_text += "组合形态: 可能构成看跌势能增强\n" + + # 添加订单流特定数据 + data_text += f"\n订单流净值: {recent_data['delta'].iloc[-1]}\n" + data_text += f"订单流累计值: {recent_data['delta累计'].iloc[-1] if 'delta累计' in recent_data.columns else '无数据'}\n" + data_text += f"堆积指标: {recent_data['dj'].iloc[-1]}\n" + + # 添加日均线数据 + data_text += f"日均线: {recent_data['dayma'].iloc[-1] if 'dayma' in recent_data.columns else '无数据'}\n" + + # 添加价格与日均线的关系 + if 'dayma' in recent_data.columns: + price_above_ma = recent_data['close'].iloc[-1] > recent_data['dayma'].iloc[-1] + data_text += f"价格位于日均线: {'上方' if price_above_ma else '下方'}\n" + + # 订单流全面分析 + data_text += "\n订单流详细分析:\n" + + # 计算订单流趋势 + if len(recent_data) >= 5: + delta_values = recent_data['delta'].values + delta_trend = np.mean(np.diff(delta_values)) if len(delta_values) > 1 else 0 + data_text += f"订单流趋势: {'增强中' if delta_trend > 0 else '减弱中'} (变化率: {delta_trend:.2f})\n" + + # 计算订单流强度(使用绝对值的平均值) + delta_strength = np.mean(np.abs(recent_data['delta'].values)) + data_text += f"订单流强度: {delta_strength:.2f}\n" + + # 订单流指标超涨超跌分析 + if len(df) >= 20: + delta_values = df['delta'].iloc[-20:].values + delta_mean = np.mean(delta_values) + delta_std = np.std(delta_values) + current_delta = df['delta'].iloc[-1] + + # Z分数计算 + if delta_std > 0: + delta_z = (current_delta - delta_mean) / delta_std + data_text += f"订单流偏离度(Z分数): {delta_z:.2f}\n" + + if delta_z > 2: + data_text += "订单流状态: 可能超买\n" + elif delta_z < -2: + data_text += "订单流状态: 可能超卖\n" + else: + data_text += "订单流状态: 正常区间\n" + + # 买卖力量对比 + if 'bid_v' in recent_data.columns and 'ask_v' in recent_data.columns: + bid_power = recent_data['bid_v'].mean() + ask_power = recent_data['ask_v'].mean() + power_ratio = bid_power / ask_power if ask_power != 0 else float('inf') + data_text += f"买卖比例: {power_ratio:.2f} (>1买方强势,<1卖方强势)\n" + + # 订单流累计趋势 + if 'delta累计' in recent_data.columns and len(recent_data) >= 2: + cumulative_start = recent_data['delta累计'].iloc[0] + cumulative_end = recent_data['delta累计'].iloc[-1] + cumulative_change = cumulative_end - cumulative_start + data_text += f"累计订单流变化: {cumulative_change:.2f} (从 {cumulative_start:.2f} 到 {cumulative_end:.2f})\n" + + # 订单流波动性 + delta_volatility = np.std(recent_data['delta'].values) + data_text += f"订单流波动性: {delta_volatility:.2f}\n" + + # 订单流与价格相关性 + if len(recent_data) >= 10: # 确保有足够数据计算相关性 + price_changes = recent_data['close'].pct_change().dropna() + delta_changes = recent_data['delta'].iloc[1:].reset_index(drop=True) # 对齐索引 + if len(price_changes) > 0 and len(delta_changes) == len(price_changes): + try: + correlation = np.corrcoef(price_changes, delta_changes)[0, 1] if len(price_changes) > 1 else 0 + data_text += f"订单流与价格相关性: {correlation:.2f}\n" + data_text += f"相关性解读: {'强正相关' if correlation > 0.7 else '正相关' if correlation > 0.3 else '弱相关' if correlation > -0.3 else '负相关' if correlation > -0.7 else '强负相关'}\n" + except: + data_text += "订单流与价格相关性: 计算错误\n" + + # 订单流势能分析(最近几分钟的方向) + recent_deltas = recent_data['delta'].tail(5).values + positive_count = sum(1 for x in recent_deltas if x > 0) + negative_count = sum(1 for x in recent_deltas if x < 0) + data_text += f"最近订单流方向: {'多头主导' if positive_count > negative_count else '空头主导' if positive_count < negative_count else '方向不明'} ({positive_count}正/{negative_count}负)\n" + + # 订单流强弱可视化 + delta_last_5 = recent_data['delta'].tail(5).values + strength_visual = "" + for val in delta_last_5: + if val > 3: + strength_visual += "↑↑ " + elif val > 0: + strength_visual += "↑ " + elif val < -3: + strength_visual += "↓↓ " + elif val < 0: + strength_visual += "↓ " + else: + strength_visual += "→ " + data_text += f"订单流强弱可视化 (最近5分钟): {strength_visual}\n" + + # 添加最近几条记录的趋势 + data_text += "\n最近几条记录的趋势:\n" + + # 添加最近5条记录的关键指标变化 + for i in range(min(5, len(recent_data))): + idx = -(i+1) + data_text += f"记录 {i+1}: 时间={recent_data['datetime'].iloc[idx]}, 价格={recent_data['close'].iloc[idx]}, " + data_text += f"订单流净值={recent_data['delta'].iloc[idx]}, 堆积={recent_data['dj'].iloc[idx]}\n" + + # 添加当前持仓信息,使用新的止盈止损字典 + data_text += "\n当前持仓状态:\n" + + # 获取该合约的止盈止损信息 + stops = self.stop_order_dict.get(instrument_id, { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + }) + + # 获取多头和空头持仓信息 + long_pos = stops.get('long', {}).get('position', 0) + short_pos = stops.get('short', {}).get('position', 0) + + # 判断当前持仓方向 + if long_pos > 0: + data_text += f"持仓方向: 多头\n" + data_text += f"持仓数量: {long_pos}\n" + data_text += f"开仓价格: {stops['long']['entry_price']}\n" + data_text += f"止损价格: {stops['long']['stop_loss']}\n" + data_text += f"止盈价格: {stops['long']['take_profit']}\n" + data_text += f"跟踪止损价: {stops['long']['trailing_stop']}\n" + + # 计算当前盈亏 + current_price = recent_data['close'].iloc[-1] + profit_percent = (current_price - stops['long']['entry_price']) / stops['long']['entry_price'] * 100 + data_text += f"当前盈亏: {profit_percent:.2f}%\n" + elif short_pos > 0: + data_text += f"持仓方向: 空头\n" + data_text += f"持仓数量: {short_pos}\n" + data_text += f"开仓价格: {stops['short']['entry_price']}\n" + data_text += f"止损价格: {stops['short']['stop_loss']}\n" + data_text += f"止盈价格: {stops['short']['take_profit']}\n" + data_text += f"跟踪止损价: {stops['short']['trailing_stop']}\n" + + # 计算当前盈亏 + current_price = recent_data['close'].iloc[-1] + profit_percent = (stops['short']['entry_price'] - current_price) / stops['short']['entry_price'] * 100 + data_text += f"当前盈亏: {profit_percent:.2f}%\n" + else: + data_text += "持仓方向: 空仓\n" + data_text += "持仓数量: 0\n" + + # 添加风险管理参数信息 + data_text += "\n风险管理参数设置:\n" + data_text += f"固定止损百分比: {self.fixed_stop_loss_percent * 100:.2f}%\n" + data_text += f"跟踪止损百分比: {self.trailing_stop_percent * 100:.2f}%\n" + + # 添加交易建议提示 + data_text += "\n请根据以上信息,分析当前市场状态并给出交易建议。需要考虑:\n" + data_text += "1. 当前持仓状态是否合理\n" + data_text += "2. 是否需要调整止损止盈位置\n" + data_text += "3. 是否需要平仓或反手\n" + data_text += "4. 是否适合开新仓\n" + data_text += "5. 是否需要调整跟踪止损百分比参数(范围建议:0.0001-0.001)\n" + data_text += "6. 是否出现抄底摸顶机会\n" + data_text += "7. 是否存在日内波段交易机会\n" + + return data_text + + def update_stop_order_dict(self, instrument_id, direction, position, entry_price=None, stop_loss=None, take_profit=None, trailing_stop=None): + """更新止损止盈信息""" + # 初始化合约的止损止盈字典 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + # 获取当前值 + current_values = self.stop_order_dict[instrument_id][direction].copy() + + # 更新值 + if position is not None: + self.stop_order_dict[instrument_id][direction]['position'] = position + if entry_price is not None: + self.stop_order_dict[instrument_id][direction]['entry_price'] = entry_price + if stop_loss is not None: + self.stop_order_dict[instrument_id][direction]['stop_loss'] = stop_loss + if take_profit is not None: + self.stop_order_dict[instrument_id][direction]['take_profit'] = take_profit + if trailing_stop is not None: + self.stop_order_dict[instrument_id][direction]['trailing_stop'] = trailing_stop + + # 记录变化值 + updated_values = self.stop_order_dict[instrument_id][direction] + change_log = f"更新{instrument_id} {direction}头寸止损止盈: " + changes = [] + + if position is not None and position != current_values['position']: + changes.append(f"仓位: {current_values['position']} -> {position}") + if entry_price is not None and entry_price != current_values['entry_price']: + changes.append(f"入场价: {current_values['entry_price']} -> {entry_price}") + if stop_loss is not None and stop_loss != current_values['stop_loss']: + changes.append(f"止损价: {current_values['stop_loss']} -> {stop_loss}") + if take_profit is not None and take_profit != current_values['take_profit']: + changes.append(f"止盈价: {current_values['take_profit']} -> {take_profit}") + if trailing_stop is not None and trailing_stop != current_values['trailing_stop']: + changes.append(f"跟踪止损价: {current_values['trailing_stop']} -> {trailing_stop}") + + if changes: + change_log += ", ".join(changes) + STOPLOSS_LOGGER.info(change_log) + + # 保存到文件 + self.save_stop_orders_to_file(instrument_id) + + def save_stop_orders_to_file(self, instrument_id): + """将止盈止损信息保存到文件""" + # 使用完整的合约代码 + symbol = str(instrument_id) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}_stops.json") + + # 如果文件夹不存在则创建 + if not os.path.exists(folder_path): + os.makedirs(folder_path) + + # 保存字典到JSON文件 + with open(file_path, 'w') as f: + json.dump(self.stop_order_dict.get(instrument_id, {}), f, indent=4) + + # 获取该合约的止盈止损信息 + stops = self.stop_order_dict.get(instrument_id, { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + }) + + # 打印详细信息 + print(f"\n===== 已更新止盈止损信息: {instrument_id} =====") + print(f"多头持仓: {stops['long']['position']} 手") + print(f"多头入场价: {stops['long']['entry_price']}") + print(f"多头止损价: {stops['long']['stop_loss']}") + print(f"多头止盈价: {stops['long']['take_profit']}") + print(f"多头跟踪止损: {stops['long']['trailing_stop']}") + print(f"空头持仓: {stops['short']['position']} 手") + print(f"空头入场价: {stops['short']['entry_price']}") + print(f"空头止损价: {stops['short']['stop_loss']}") + print(f"空头止盈价: {stops['short']['take_profit']}") + print(f"空头跟踪止损: {stops['short']['trailing_stop']}") + print("======================================\n") + + def load_stop_orders_from_file(self, instrument_id): + """从文件加载止盈止损信息""" + # 如果合约ID已经在字典中,直接返回,避免重复加载 + if instrument_id in self.stop_order_dict: + return True + + # 使用完整的合约代码 + symbol = str(instrument_id) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}_stops.json") + + if os.path.exists(file_path): + try: + with open(file_path, 'r') as f: + stops_data = json.load(f) + + # 更新字典 + self.stop_order_dict[instrument_id] = stops_data + print(f"首次加载止盈止损信息: {instrument_id}") + return True + except Exception as e: + print(f"加载止盈止损信息失败: {e}") + + # 如果文件不存在,初始化空字典结构 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + print(f"初始化止盈止损结构: {instrument_id}") + + return False + + def check_stop_conditions(self, data): + """检查是否满足止盈止损条件""" + instrument_id = data['InstrumentID'].decode() + + # 如果该合约不在止盈止损字典中,直接返回 + if instrument_id not in self.stop_order_dict: + return + + current_bid = float(data['BidPrice1']) # 当前买价 + current_ask = float(data['AskPrice1']) # 当前卖价 + + stops = self.stop_order_dict[instrument_id] + + # 检查多头止盈止损 + if stops['long']['position'] > 0: + entry_price = stops['long']['entry_price'] # 获取开仓价 + + # 检查止损 + if stops['long']['stop_loss'] > 0 and current_bid <= stops['long']['stop_loss']: + print(f"触发多头止损: {instrument_id}, 价格: {current_bid}, 止损价: {stops['long']['stop_loss']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 检查跟踪止损 - 新增开仓价判断条件 + elif stops['long']['trailing_stop'] > 0 and current_bid < stops['long']['trailing_stop'] and current_bid > entry_price: + print(f"触发多头跟踪止损: {instrument_id}, 价格: {current_bid}, 跟踪止损价: {stops['long']['trailing_stop']}, 开仓价: {entry_price}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 检查止盈 + elif stops['long']['take_profit'] > 0 and current_bid >= stops['long']['take_profit']: + print(f"触发多头止盈: {instrument_id}, 价格: {current_bid}, 止盈价: {stops['long']['take_profit']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.update_stop_order_dict(instrument_id, 'long', 0, 0, 0, 0) + self.pos = 0 # 更新全局持仓状态 + + # 更新跟踪止损价 - 只在价格上涨且大于开仓价时更新 + elif stops['long']['trailing_stop'] > 0 and current_bid > entry_price: + # 只有当前价格比之前设置的跟踪止损价高一定幅度时才更新 + new_trailing_stop = current_bid * (1 - self.trailing_stop_percent) + if new_trailing_stop > stops['long']['trailing_stop']: + self.update_stop_order_dict(instrument_id, 'long', None, None, None, None, new_trailing_stop) + print(f"更新多头跟踪止损: {instrument_id}, 新止损价: {new_trailing_stop}, 开仓价: {entry_price}") + + # 检查空头止盈止损 + if stops['short']['position'] > 0: + entry_price = stops['short']['entry_price'] # 获取开仓价 + + # 检查止损 + if stops['short']['stop_loss'] > 0 and current_ask >= stops['short']['stop_loss']: + print(f"触发空头止损: {instrument_id}, 价格: {current_ask}, 止损价: {stops['short']['stop_loss']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.update_stop_order_dict(instrument_id, 'short', 0, 0, 0, 0, 0) + self.pos = 0 # 更新全局持仓状态 + + # 检查跟踪止损 - 新增开仓价判断条件 + elif stops['short']['trailing_stop'] > 0 and current_ask > stops['short']['trailing_stop'] and current_ask < entry_price: + print(f"触发空头跟踪止损: {instrument_id}, 价格: {current_ask}, 跟踪止损价: {stops['short']['trailing_stop']}, 开仓价: {entry_price}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + self.pos = 0 # 更新全局持仓状态 + + # 检查止盈 + elif stops['short']['take_profit'] > 0 and current_ask <= stops['short']['take_profit']: + print(f"触发空头止盈: {instrument_id}, 价格: {current_ask}, 止盈价: {stops['short']['take_profit']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.update_stop_order_dict(instrument_id, 'short', 0, 0, 0, 0, 0) + self.pos = 0 # 更新全局持仓状态 + + # 更新跟踪止损价 - 只在价格下跌且小于开仓价时更新 + elif stops['short']['trailing_stop'] > 0 and current_ask < entry_price: + # 只有当前价格比之前设置的跟踪止损价低一定幅度时才更新 + new_trailing_stop = current_ask * (1 + self.trailing_stop_percent) + if new_trailing_stop < stops['short']['trailing_stop'] or stops['short']['trailing_stop'] == 0: + self.update_stop_order_dict(instrument_id, 'short', None, None, None, None, new_trailing_stop) + print(f"更新空头跟踪止损: {instrument_id}, 新止损价: {new_trailing_stop}, 开仓价: {entry_price}") + + #保存数据 + + def clear_position_info(self, instrument_id, direction): + """ + 清空指定合约和方向的持仓信息 + + Args: + instrument_id: 合约ID + direction: 方向 'long' 或 'short' 或 'all' + """ + # 确保合约ID在字典中存在 + if instrument_id not in self.stop_order_dict: + return + + if direction == 'long' or direction == 'all': + # 清空多头持仓信息 + self.stop_order_dict[instrument_id]['long'] = { + 'position': 0, + 'entry_price': 0, + 'stop_loss': 0, + 'take_profit': 0, + 'trailing_stop': 0 + } + # 兼容旧代码 + if direction == 'long': + self.long_trailing_stop_price = 0 + self.sl_long_price = 0 + + if direction == 'short' or direction == 'all': + # 清空空头持仓信息 + self.stop_order_dict[instrument_id]['short'] = { + 'position': 0, + 'entry_price': 0, + 'stop_loss': 0, + 'take_profit': 0, + 'trailing_stop': 0 + } + # 兼容旧代码 + if direction == 'short': + self.short_trailing_stop_price = 0 + self.sl_shor_price = 0 + + # 同步全局持仓状态 + if direction == 'all': + self.pos = 0 + self.long_trailing_stop_price = 0 + self.short_trailing_stop_price = 0 + self.sl_long_price = 0 + self.sl_shor_price = 0 + + # 保存到文件 + self.save_stop_orders_to_file(instrument_id) + self.save_to_csv(instrument_id) + + print(f"已清空{instrument_id}的{direction}持仓信息") + +# 修改call_deepseek_model函数,移除JSON格式输出的要求,改为从普通文本响应中提取交易信号。 +def call_deepseek_model(data_df, trader_instance, max_retries=2): + """ + 调用qwq-32b大模型分析订单流数据 + + Args: + data_df: 包含订单流数据的DataFrame + trader_instance: MyTrader实例,用于访问持仓信息 + max_retries: 最大重试次数 + + Returns: + dict: 包含交易信号的字典 + """ + # 直接从环境变量获取API密钥 + api_key = GLOBAL_LLM_CONFIG.get('api_key') + base_url = GLOBAL_LLM_CONFIG.get('base_url') + model_name = GLOBAL_LLM_CONFIG.get('model_name') + + # 检查API密钥是否为空 + if not api_key: + print("错误: API密钥未设置,请在main函数中配置GLOBAL_LLM_CONFIG['api_key']") + return {"action": "不操作", "reason": "API密钥未设置", "confidence": 0, "stop_loss": 0, "take_profit": 0} + + # 将DataFrame转换为可读性好的文本,传递trader_instance + data_text = trader_instance.format_data_for_llm(data_df) + + # 构建提示词 + prompt = f""" + 作为专注于趋势交易的期货交易员,基于以下市场数据做出交易决策: + + {data_text} + + 请重点考虑以下关键因素: + 1. 均线系统(5、10、20均线)的排列状态和金叉死叉信号 + 2. 价格是否处于明确的上升或下降通道中 + 3. 关键阻力位和支撑位的突破情况及其确认 + 4. 成交量是否配合价格趋势(上涨时放量,下跌时同样放量) + 5. 动量指标(MACD、KDJ等)的走势和信号 + 6. 订单流趋势与主力资金方向的一致性 + 7. 市场多空力量对比的持续性变化 + 8. 当前趋势的强度与持续时间评估 + + 【风险控制原则】: + - 严格控制每笔交易亏损不超过本金的1% + - 趋势交易的止损位应设置在次级回调位或关键技术位之下,通常为开仓价的0.3%-0.8% + - 使用移动止损机制跟踪趋势发展,锁定利润 + - 避免在盘整区间内频繁交易,等待明确的突破信号 + + 请根据市场状态和持仓情况,给出明确的交易指令: + 1. 交易方向: 不操作/开多/开空/平多/平空/平多开空/平空开多 + 2. 执行理由: 详细说明趋势特征、突破信号、动量变化和持续性评估 + 3. 置信度: 1-10的数字,反映趋势信号的清晰度,必须是整数 + 4. 止损价: 明确的止损价格(必须是数字),设置在关键支撑/阻力位附近 + 5. 止盈价: 明确的首个止盈目标(必须是数字),应至少是止损距离的1.5倍 + 6. 跟踪止损百分比: 0.001-0.01之间的数字,用于设置移动止损追踪趋势 + + 请按以下格式返回交易决策,格式必须严格匹配: + action: 不操作/开多/开空/平多/平空/平多开空/平空开多 + reason: 交易理由 + confidence: 置信度(1-10) + stop_loss: 止损价 + take_profit: 止盈价 + trailing_percent: 跟踪止损百分比(0.001-0.01) + """ + + system_prompt = {"role": "system", + "content": "你是一位专注于趋势交易的期货交易员,擅长识别和追踪强势趋势。你的交易风格注重动量和突破信号,善于在确认趋势后顺势而为,合理管理风险的同时最大化捕捉趋势利润。你特别关注均线系统、趋势线、成交量确认和动量指标,能精准判断趋势的强度和持续性。你擅长使用移动止损保护利润,在趋势延续时持有头寸,在趋势减弱时及时退出。请根据指定格式返回交易决策。"} + + # 添加重试机制 + retries = 0 + while retries <= max_retries: + try: + # 如果不是第一次尝试,输出重试信息 + if retries > 0: + print(f"正在进行第 {retries} 次重试...") + + # 调试信息 + print(f"使用API参数: base_url={base_url}, model={model_name}") + + # 添加明显的提示信息,表示正在调用大模型API + print("\n============================================") + print("【正在调用大模型API进行交易分析,请稍候...】") + print("============================================\n") + + # 记录开始时间 + api_start_time = time.time() + + # 使用OpenAI客户端格式调用API + client = OpenAI(api_key=api_key, base_url=base_url) + + # 发起流式请求 + response = client.chat.completions.create( + model=model_name, + messages=[ + system_prompt, + {"role": "user", "content": prompt} + ], + temperature=0.1, + stream=False, # 不启用流式模式 + max_tokens=8192, + timeout=60 + ) + + # 提取模型响应内容 + model_response = response.choices[0].message.content + + # 计算耗时 + api_elapsed = time.time() - api_start_time + print(f"\n\n模型响应总耗时: {api_elapsed:.2f}秒") + print("完整响应前100字符: " + model_response[:100] + "...") + + # 添加明显的提示信息,表示API调用已完成 + print("\n============================================") + print("【大模型API调用完成】") + print("============================================\n") + + # 从文本中解析出交易信号 + try: + trading_signal = parse_trading_signal(model_response) + return trading_signal + except Exception as parse_err: + print(f"解析模型响应出错: {parse_err}") + # 尝试从自由文本中提取关键信息 + return extract_trading_signal_from_text(model_response) + + except Exception as e: + retries += 1 + if retries <= max_retries: + print(f"调用大模型API出错: {e}") + print(f"将在3秒后重试...") + time.sleep(3) # 等待3秒后重试 + else: + print(f"已达到最大重试次数 ({max_retries}),调用大模型API失败") + print(f"错误详情: {e}") + print("\n请检查以下几点:") + print("1. API密钥格式是否正确,应以'sk-'开头") + print("2. 确认已安装最新版本的openai库: pip install --upgrade openai") + print("3. 确认您的API密钥对应的模型是否为deepseek-reasoner") + # 返回默认的不操作信号 + return {"action": "不操作", "reason": f"API调用失败: {str(e)[:100]}", "confidence": 0, "stop_loss": 0, "take_profit": 0} + + # 如果所有重试都失败了,返回默认值 + return {"action": "不操作", "reason": "API调用重试耗尽", "confidence": 0, "stop_loss": 0, "take_profit": 0} + +def parse_trading_signal(text): + """ + 从文本格式的模型响应中解析出交易信号 + + Args: + text: 模型响应文本 + + Returns: + dict: 包含交易信号的字典 + """ + lines = text.strip().split('\n') + trading_signal = {} + + for line in lines: + if ':' in line: + key, value = line.split(':', 1) + key = key.strip().lower() + value = value.strip() + + if key == 'action': + trading_signal['action'] = value + elif key == 'reason': + trading_signal['reason'] = value + elif key == 'confidence': + try: + trading_signal['confidence'] = int(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+', value) + if match: + trading_signal['confidence'] = int(match.group()) + else: + trading_signal['confidence'] = 0 + elif key == 'stop_loss': + try: + trading_signal['stop_loss'] = float(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + trading_signal['stop_loss'] = float(match.group()) + else: + trading_signal['stop_loss'] = 0 + elif key == 'take_profit': + try: + trading_signal['take_profit'] = float(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + trading_signal['take_profit'] = float(match.group()) + else: + trading_signal['take_profit'] = 0 + elif key == 'trailing_percent' or key == 'trailing_stop_percent': + try: + value_float = float(value) + # 确保值在合理范围内 + if 0.0005 <= value_float <= 0.015: + trading_signal['trailing_percent'] = value_float + else: + # 如果值不在预期范围内,尝试判断是否使用了百分比格式 + if value_float >= 0.05 and value_float <= 1.5: + # 可能是百分比格式,转换为小数 + trading_signal['trailing_percent'] = value_float / 100 + else: + # 设置为默认值 + trading_signal['trailing_percent'] = 0.005 + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + try: + trailing_value = float(match.group()) + if trailing_value >= 0.5 and trailing_value <= 10: + trading_signal['trailing_percent'] = trailing_value / 100 + else: + trading_signal['trailing_percent'] = trailing_value + except: + trading_signal['trailing_percent'] = 0.02 + else: + trading_signal['trailing_percent'] = 0.02 + + # 检查是否有缺失的字段,如果有,设置默认值 + if 'action' not in trading_signal: + trading_signal['action'] = '不操作' + if 'reason' not in trading_signal: + trading_signal['reason'] = '未提供理由' + if 'confidence' not in trading_signal: + trading_signal['confidence'] = 0 + if 'stop_loss' not in trading_signal: + trading_signal['stop_loss'] = 0 + if 'take_profit' not in trading_signal: + trading_signal['take_profit'] = 0 + if 'trailing_percent' not in trading_signal: + trading_signal['trailing_percent'] = 0.005 # 修改默认值 + + return trading_signal + +def extract_trading_signal_from_text(text): + """ + 从自由格式文本中尝试提取交易信号 + + Args: + text: 模型响应文本 + + Returns: + dict: 包含交易信号的字典 + """ + # 默认交易信号 + trading_signal = { + "action": "不操作", + "reason": "无法解析模型响应", + "confidence": 0, + "stop_loss": 0, + "take_profit": 0, + "trailing_percent": 0.005 # 更新默认的跟踪止损百分比 + } + + # 尝试判断交易方向 + text_lower = text.lower() + if "平多开空" in text_lower: + trading_signal["action"] = "平多开空" + elif "平空开多" in text_lower: + trading_signal["action"] = "平空开多" + elif "开多" in text_lower: + trading_signal["action"] = "开多" + elif "开空" in text_lower: + trading_signal["action"] = "开空" + elif "平多" in text_lower: + trading_signal["action"] = "平多" + elif "平空" in text_lower: + trading_signal["action"] = "平空" + elif "不操作" in text_lower or "观望" in text_lower: + trading_signal["action"] = "不操作" + + # 尝试从文本中提取置信度 + import re + confidence_matches = re.findall(r'置信度[::]\s*(\d+)', text_lower) + if confidence_matches: + try: + trading_signal["confidence"] = int(confidence_matches[0]) + except ValueError: + pass + + # 尝试提取止损价 + stop_loss_matches = re.findall(r'止损价[::]\s*(\d+(\.\d+)?)', text_lower) + if stop_loss_matches: + try: + trading_signal["stop_loss"] = float(stop_loss_matches[0][0]) + except ValueError: + pass + + # 尝试提取止盈价 + take_profit_matches = re.findall(r'止盈价[::]\s*(\d+(\.\d+)?)', text_lower) + if take_profit_matches: + try: + trading_signal["take_profit"] = float(take_profit_matches[0][0]) + except ValueError: + pass + + # 尝试提取跟踪止损百分比 + trailing_matches = re.findall(r'跟踪止损百分比[::]\s*(\d+(\.\d+)?)', text_lower) + if not trailing_matches: + trailing_matches = re.findall(r'跟踪百分比[::]\s*(\d+(\.\d+)?)', text_lower) + + if trailing_matches: + try: + trailing_value = float(trailing_matches[0][0]) + # 判断是否为百分比格式 + if trailing_value >= 0.5 and trailing_value <= 10: + trading_signal["trailing_percent"] = trailing_value / 100 + else: + trading_signal["trailing_percent"] = trailing_value + except ValueError: + pass + + # 提取理由 + reason_matches = re.findall(r'理由[::]\s*(.*?)(?=\n|$)', text_lower) + if reason_matches: + trading_signal["reason"] = reason_matches[0] + + return trading_signal + +# 修改run_trader函数,改为接收统一的配置字典 +def run_trader(broker_id, td_server, investor_id, password, app_id, auth_code, md_queue=None, page_dir='', private_resume_type=2, public_resume_type=2, config=None): + # 设置全局变量 + global GLOBAL_LLM_CONFIG + + # 如果传入了配置字典,直接使用 + if config: + # 使用deepcopy避免潜在的引用问题 + GLOBAL_LLM_CONFIG = copy.deepcopy(config) + # else: + # # 确保有默认值 + # if 'bar_resample_rule' not in GLOBAL_LLM_CONFIG: + # GLOBAL_LLM_CONFIG['bar_resample_rule'] = '1T' + # if 'load_history' not in GLOBAL_LLM_CONFIG: + # GLOBAL_LLM_CONFIG['load_history'] = False + # if 'history_rows' not in GLOBAL_LLM_CONFIG: + # GLOBAL_LLM_CONFIG['history_rows'] = 1000 + # if 'trader_rows' not in GLOBAL_LLM_CONFIG: + # GLOBAL_LLM_CONFIG['trader_rows'] = 10 + + my_trader = MyTrader( + broker_id, + td_server, + investor_id, + password, + app_id, + auth_code, + md_queue, + page_dir, + private_resume_type, + public_resume_type + ) + + # 设置历史数据加载参数 + my_trader.load_history = GLOBAL_LLM_CONFIG['load_history'] + my_trader.history_rows = GLOBAL_LLM_CONFIG['history_rows'] + my_trader.trader_rows = GLOBAL_LLM_CONFIG['trader_rows'] + my_trader.Join() + +def ceshiapi(api_key): + # 测试API连接 + print(f"测试API连接,使用密钥: {api_key[:5]}...{api_key[-5:]}") + try: + client = OpenAI(api_key=api_key, base_url=GLOBAL_LLM_CONFIG['base_url'] ) + response = client.chat.completions.create( + model=GLOBAL_LLM_CONFIG['model_name'], + messages=[ + {"role": "system", "content": "你是一个助手"}, + {"role": "user", "content": "测试"} + ], + stream=False, # 新增此行 + max_tokens=10 + ) + print(f"API连接测试成功") + except Exception as e: + print(f"API连接测试失败: {e}") + import traceback + traceback.print_exc() + + + +# 修改主函数中的配置和调用方式 +if __name__ == '__main__': + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + + + # 配置大模型参数 - 直接通过环境变量设置 + # 设置您的实际API密钥 + api_key = "" # 请确保使用有效的密钥 + # 同时设置到全局变量中 + GLOBAL_LLM_CONFIG['api_key'] = api_key + GLOBAL_LLM_CONFIG['base_url'] = "https://api.gptsapi.net/v1" + GLOBAL_LLM_CONFIG['model_name'] = "o3-mini-2025-01-31" + ceshiapi(api_key)# 测试API连接 + # 将所有配置参数整合到GLOBAL_LLM_CONFIG中 + # 历史数据加载配置 + GLOBAL_LLM_CONFIG['load_history'] = True # 是否加载历史数据 + GLOBAL_LLM_CONFIG['history_rows'] = 50 # 加载历史文件中数据量 + GLOBAL_LLM_CONFIG['trader_rows'] = 10 # 当tader_df里的数据大于10行时开始计算指标及触发AI模型 + # 设置K线时间粒度 + GLOBAL_LLM_CONFIG['bar_resample_rule'] = '3T' # 默认3分钟K线,可以修改为'5T'(5分钟),'15T'(15分钟)等,也可用'5S'(5秒),'30S'(30秒)或'1H'(1小时),'2H'(2小时),'4H'(4小时),'1D'(1天) + + + + #用simnow模拟,不要忘记屏蔽下方实盘的future_account字典 + future_account = get_simulate_account( + investor_id='', # simnow账户,注意是登录账户的ID,SIMNOW个人首页查看 + password='', # simnow密码 + server_name='电信1', # 电信1、电信2、移动、TEST、N视界 + subscribe_list=[b'au2506'], # 合约列表 + ) + + # #实盘用这个,不要忘记屏蔽上方simnow的future_account字典 + # future_account = FutureAccount( + # broker_id='', # 期货公司BrokerID + # server_dict={'TDServer': "ip:port", 'MDServer': 'ip:port'}, # TDServer为交易服务器,MDServer为行情服务器。服务器地址格式为"ip:port。" + # reserve_server_dict={}, # 备用服务器地址 + # investor_id='', # 账户 + # password='', # 密码 + # app_id='simnow_client_test', # 认证使用AppID + # auth_code='0000000000000000', # 认证使用授权码 + # subscribe_list=[b'rb2405'], # 订阅合约列表 + # md_flow_path='./log', # MdApi流文件存储地址,默认MD_LOCATION + # td_flow_path='./log', # TraderApi流文件存储地址,默认TD_LOCATION + # ) + + print('开始',len(future_account.subscribe_list)) + # 共享队列 + share_queue = Queue(maxsize=200) + + # 行情进程 + md_process = Process(target=run_tick_engine, args=(future_account, [share_queue])) + + # 使用深拷贝创建一个完全独立的配置副本 + import copy + config_copy = copy.deepcopy(GLOBAL_LLM_CONFIG) + + # 交易进程 - 增加历史数据加载参数和K线时间粒度参数 + trader_process = Process(target=run_trader, args=( + future_account.broker_id, + future_account.server_dict['TDServer'], + future_account.investor_id, + future_account.password, + future_account.app_id, + future_account.auth_code, + share_queue, # 队列 + future_account.td_flow_path, + 2, # private_resume_type + 2, # public_resume_type + config_copy, # 传递独立的配置副本,避免潜在的引用问题 + )) + + md_process.start() + trader_process.start() + + md_process.join() + trader_process.join() + + \ No newline at end of file diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.31版本/填写这里即可.png b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.31版本/填写这里即可.png new file mode 100644 index 0000000000000000000000000000000000000000..041cc0ef0bf3dcdc06b932f6cf37221c335fc34f GIT binary patch literal 581349 zcmeFYRd8HO(=FIyw3sbsW@ct)W=2c0m{~1mwV0WinVFd^$zsW3vSfKYbLanjBJP=| z8!=B`bw6ZB_1;~(YUNs4nbp77e}4m@$V$pc0>Hok0I)wV!0#=9*q=}TXYK#K$^Y3M z{#^aLAAkxA1r9R;0Y(Y{M+JjG1^Yb=ApA2(aESls=79gV!N5X6!$CrTgTepl|B3I&zJw0 zsA%ZW7$h*Hu$W{lSmdlCWpLP3G;CZdR@S9B+@e}0?jC9BEv+j@$GGgAVyc?j&Ou=j zCFRX+%c~ToiA`!Z)Z%6Z4Fk8oHvxzce+GaGfeH`;{00!keFPKzFwQ$@&$yeb>dTLK z15v%yQu;Q;m)}qsj<_Nys;q zE+!5~3^k>c#e!n6A|frR|M0%$y(b8?io7F|rU3<_CDITcv7s4DlSHUS==h~8m+sgMmyB-9CN!Vv?zS*L z>|#3{aYdy<4@-8ik4#q0T^*8#r6~%JLO%p4%Y~TwEQKPaET1-%H3rv6MbPpgmn;t@ z^E4N%{Ai$@gmT`sU)NA~JMe8KY~!JY`&A6;{K4{iAYsA(vArKod-qCJ7Ti_CivUVp z6GJOwFN!nPoPq`a@T5d^e!E39BhMX}s>W9;Gw6`0GH*Ic)8e77~kow=~vqu1dsWLA|A=6)sVTeB^B;6#dd^-Dq`aSeE z37O{D-EnNemVY!CB*a}Sv55(GmxLcq?#;QCWR=dsP)Z?y!EMrTl*T{-YRohKO2gQM zB~~s*_tUM{!1|zva&O8}H>it%xp8DJf#$gcmUJ`2()bXpWFi(`ynZxXHe6f0ZGYHZ zdZWR}g$>@-p$vWaD-Z;lk5h4g`!$Jn;PP71xj)OBUmMcOWp=@c#X2ufVIjlWJzp>M@VUKgk{n%q#c$ zM}uG9hF{x?FX5`zw(m9BLD13btjI&?jOFWe)q{`1GPhv-d~Y<(lCqLToe}%gu0X1a_$-Kr zh!aczzkui~^)Lw$hE-y@Vc#~aexE1;h=-Yexb@&V%W%IM`kK{-V-hG((2)_;n4ugXe8; zF0?P7-rEdLm?;ZMYD24g&Q)wPDz=FK{UT@EduADi?_~ei$Dwt~C9%k_e(gE~8c-4y z?^^rkY<7L8aC#l2cULMY2ScO&)T@yK_+jx0X>s`!X(?267FJ_K9Pl{tk5xo$8OE3p zl}FokaGD@k6O>5lj5~3bWzA9gl0>$R0GIKi35Xq4B%}$`b#G0!(+frBi|Wq2uvL9M zMXIC4UhL1B^Ud!vyGwnEy1TvV*WP;*cNacuCns|(=;){{f7-OX@9^-)68ifsPXinn z3Qht}3J^{l2#0thD#kC5A^)d|509bW$5>vOo^a8YXok59exBFl{R&ZhI{d3&z0Nm8 zmyfd9;Wt16{%aD1A8NY`iI>CyvbR$DxhdznMC;Gy?75#sM31s|$^*Xv>TM*Y>BWc7 z&?QqG92O{c)_Aj!;ieo1W^rb5rtm@=XptnK-vGov{;YKMXLPsRqpZH)9vJnOVYRKb zxZu@s$+Gu&5q`IIBI%xZU>){h+Q#Ma?d}Ft8IkoQWcN0b0@sgsS5>@Y{5N3V<~Jan@UKa3*fH*yt+-q1w#mIS zo1wLDXFw{E*)l_jp5|H}Nqa{1+TngOY`SvpXX9=yIRJ{rdoGQS9P z@(coj5=lrh(7@3miJ7SrnW=-pfoPG`pqTOT+iCv;XtrBs;eikxpcJ!kKM4nD8W;o@ zGoB*8cfwTv3*MFd!ARtC_v}9Fpedx*N2u~y zWq0PzXRi7gSzhaXYw0J^?XHh50eY5!w|N%^t+0_#s#@v#^%Hc@u=JjYN`?6H8=O;2 z_sgfrrkW1A*uNn9F~d{O!|+0)~I5 z`JY`KX53QDCjzO_*aBI$S@Kt5_@U2)Y4(Bb+l${tn)!j*r|%gknHf6G>-zc*YW6O2 zl|9r+0)fTStW+Yo$Hvn6-yuQ5XkY4qoQ=?C^%c$&9KmQ(@UWDv;3C9hXv?0*q>`|q zkWtXu=EN=cbE-Be{WX5=Xg1Rf%7#*Si-^`*d$b*o0XNOR0aNk+v2x!qzg~&odiUgu z0I-N5Dd5>Ls;x{CaU{_zP1Si4b7l1{jtxYUimQzB?ri>WOplZM)(}Bgi@QX@a7sK3WM2pDXCdDcQ+Jqzd0+y7{YCKeGWY)I3)M6 zJxeK^YCtDP34(T_uLbX2Ri4&w0D{tc`+uwsWHE!39IX*-Ok!5r>Dii9ET-Y% z3-xuxO8LNVX@(wQ=V7)cuc%9e;1hB?#`wW>+hxDfz*o*neqes9bTW?BY#->8YF17& zr}x=*bRFk6(!CVMQ_L(>pTl@#HMdWo@*Vyf zdFut2XHSc-$}E4_`~V(TO%fcI2#GP=qU^)<;C039Dd>KQoH>W zDTJRMn`8YOkgET)??pG@XzYKC+2BVd0MzT->K5-$GdF)_^6omDmPaAvTrQfqk-ABm z(~FB%Ijzu>D$!|K`A8ND4*a2ced-TT=v$^+$`8n++|T5XJ8O`dT}0TxdB-f)9lA6S zgRkwrWg5evy$D{C7|*_;k2Zr<3Z=O1eAdx%sigaNgk)NFSZML-EVL+HW>FZZ6$`q= zqeA(}L?w|c^4HgWx@7bI4A=xX49Ahl*CgUVEVQGYQFH?1Vvs^cAS5F4j`6rEnjN}v zvKEwq?_bCMhmUK2`0cx_xI#eBSoPd1GGkneY0*~5U6?x*VLSCmEE&E~i_?a&o(aO9 zcO{LCHEl7V+AV)uLPQRs9H@v&8rBxPmTS7t@=J?wMJL9r&9@HoeaYYx%?Xt^4;xKd zG_Y`#N*YYt%fK?%G6Zt6Zlt3=7x6DuZF=JB%a5H$B&wmK(IaDe$OlQ08mPGx$wHe4 zxmV$eBdk!wl??F!<56EW&0I|6$U9izCoF z=eO{1WK`Z4%$tRp&f9!t8OxVr{pFRRNYh(1^$ZSpR#^Hb;m$7S=XGqkZp*4tm_&gJ z!_rZ$@iI-T9!^GL-`au9K8T<6rc%^erkS?b_Pw`tJ#NyyhGuQo`4f9A%@|e+mF?<0 zxh7?^)P)Emq@^iI;2B6P%~jwN(zkqE^ksRx@Rv)HbIqn+Hwb)rt_<*N}p|97IDbSjSsMV=a?i8^_R<% ztKQr(dlqu(O4W|b=^ii<@0~Ye3jt}1;W8tTuwELWg155BC;tZYhc(D!d0ZSOF#a;7 zbYb}q1N?&vOmS{9wo0C=(jlS^(T?td&dIk7lkI9?E1+Nq27n5=ZvFc#fuw<;jr!U6 zL`pN(UyA-)E(TX zm7YKRyoTt|!NU~p#QYABLMG{G%|lU})j8a>kVuCLYLtN8@AjY9%;WC1L8lVZB%P@@ z*8ElzU+juT5EF4I7d#AEX=TkW~UEQHDuvbYg685c6p_v15-h18%?B+ zTS5n89YFu1>>N70#iT?#lq8kDa>V>(a6FudnI`pC|HEy6NiHeqeQrL2pFz)8RN@wF zmO`}7U{ut03t!34GBirfUhcCg=+WCM0;^L;)!9K+bTG!f7tMheUpg&Z4#o0|jdz%M z-E!v+&wzEE+pNz@k_b8`!zS!*El+(^O!=loW9B*kSQhWyxXrT$x``g+COVQ*ojxWl zsfBDn>7q=)S5y({VfpD#nN!V$puiXRM!)$OUCrkmx!WYxK`oz2iNh1Y7K@ z6Ma?sLpPUHzs;C=za-U#$=N&+I!GrXnOhk~@P3|F2qP7j+VJw?J{9>h-+pkWlY-*k z$R!Hd-n>xE!5@_n^*KI~gz8qV8CxPxta_#5gpfTEry;wg#M}yU4&yU4pta%|7SLFD z1m6h$YplYW>OF8#63HN2%W;oIhe}-tff!esaJh(XAjh(?6yHAWuGUhe=PsU}5lc|R z@QTbnW#=pqd;A-a(W2rCN^-3O^sO>AR3%68+Ct4{af_QSB+|?bM)7M#lYQBA0L2xk z{!%^S?AUU#hw-Ch_{qRj;{LYT=C~*wt4n9oI1*2ruu5U*t|?X^S=30Iz^a2IjDWr! zG2OeXw7lCg?=4?Z=U{0%azbNMVW_?-Qk))ZgRx>Mtf&oV=rSWt^;c; zhtwRSzz?WmSs(mlaDjj0b0y=vB{4{`XiaTrlG?e1W;RdD70sFhYCdOo7_ObPVB!vw z^QQM>c=)0lK{8wYNZ^CHz9N8(E2sKh1|eyst)OO#nV14!j3klnV()5BK3bzjOQEw) zqp}suq0Y1ldXTX6md;i;gV{6=9v%l$WYy>C0-Y!L->AWlsTYm=H-PWRcQ`D1go*a^ zGOsTA-Y5?zk&gz&EDuASW93{RKq@>LJ2bDJAktDda#KSka6agE69x9C6}RmtU(^x0 zG=!JRPXT>*W_8&ixT476m7Xb-%sENUmZ9;5aWKe37dy~?^})H0=9K%Y=3t2gGEpI0 zjIEveRZsY9OSXb&MLV0prglbC=+sI~YMWd8 zVAe+32=_wPpG=-{A{KheWQ;+gB;POe);sFm3o(xfv8pr}8)<>7d?nD$IDF{#1_rhe z>(*Md8uH>SM_PDLQXO}Sy0&w!ZG*YfvJ95RjEkziZAtP8r*1EIu*VI<_37kft9)|s zp8BC$2n^=f*9!n~q>RY(6=qU|pyaIz+4o>pBa?Iy(Df5X6v_n~KFcWTH@Mu{@Umk0 zW>QA#hT$0)UeVft;i02;BrY?-c4wbNT7M71Bl)vAIMJ{VHQ#HIL}~ zzdDo$e8p?J??HsK?T}Yr@+JQd2G@Kf1-0YxT?gA1xA3YV^ZQB;b}@s34i8t#O>)OE zNb=9AlImv|=@4BMDpNLkCv}!L6UxVFNPMcOt4Cb6XM^^xy?elMLhQH?9CWg_E5xUvm1(PnV)g;xXg3s6;-OR(qFL5V8SaKr8QJK?T zM!tH^HJsh)(l>dICvJQ_wOqnS2A}vVr|}BbL|li`Of6r7mTHCIAvgtc%T@=|2#XTU zR}Fb2*&HEffT>6-OsNXo$FRes(#KNa@Wrx}$Q=rbLW*V+B&hyD$;7^#!3VzKo53)# zba(ha#!(E@es&iA&)fO4UuN-cIN3dzZ9g^q!*#Ek9!{~mK4xGWciQGFIkJpFtx&_@ z;t~7}+h&s4!oHyl`)I048fC01q~cIFV#Ct`>_90}Q= zk|-&XB_+8wDYUKe9Ap`QL(;|^LKv@zILKJW``_u>!ZsubyIBiLm)?k-PJ9*^WZdc_ zJ_R$A(0IavU+^1Xir-q6@f4{jD7IO^z1>Kdw>YM2=mx)byZ|7s;)pb`9k_37XFv1A zd{b(XgSt;4XGJ56s`tTv?BM6>?so_lT;Uj_h*)^l|cM1<2W9lLMJAP4yERtegnA5_}^Xk`Ut!Z+Xz{&*Yb!+_UaP-8gl-5(nO8m)^{;&7_`^NddVfSd%4EJ9< z%wEz7i=SzC!c*Xfg^41M%ihX(>hLoe1+XijY|-2}Ln+M`%w!>!JSdQrYTD(izFpC% z+Kn5l2sH32I1>wcX533)hSA%wG=A?V<@L2Hm<{6nJQdG~v7Uso9ocx$yA>lH_h#*t zp3u52s+mfq!+rV%on?X^2a0II7$qhp^xZubSJr^2bCV67K*rJ&Hw29&*Biekf8hBaoSvlP#?1bIpvB8M#_E4Z_DMR<=zlNxOWyyT zrGJ3wztH$+7WTi;_%Ag6OO^kn%Ku+gl)rtH?fm+bw>k?Zipvs0BB_|m^qk1>Ln@_;7F)xM zUNm1xz6D;6v`$e%TA+f;U)$!1goona|0fc4A#+@s4$ zs%<=$cFv7ocGUSrxhO7jA1w)+QmQlz^HT$EXhi^oLYbace-6zWfrp)&AJY}SQ}IjS zxj$a#9BCy+mn-;tNMHohyr`tRA6FiBJ^%&pfvsG}q)^!3k2U`irVL*q%^X7ttF)~7 z@Ukudne5kpmW1$_>v0r$^YAx-Cu*1jIrMBU#TZlTJ%P*n^aO(u1hhdLPj zNbcO3Aiue>u~~DXnkK8+alT&PWzgUP z6+y2MbZvAPO&jW3%n6`(;Sz&jwZLK{)U+#MJ&(gyI)xY-HK_fw8(t<9sh)vPuIr0+mPw1;frQFbsH#aS5Sdri$jQEm)gNv z29Ua9o-M&p!-aXhE}qdGI_r!61Vit&{SyLASTu>9Z5LJejrutgUTNR(m2RlgkdkBM zWt0qYnj)f>4+5;fue1HB2Rl$A#Px|$^bbXuz6NNGP%(bHzn=cr;Y`7y%=04w7ZstQ z9tm~4H41*R?_VS(NNo+0Ff;Jher%94)VFK|zvvXdT&>;beN`LFJUM>5_}utoJQ9WC zRYfBfb1IudIH)CQbcN@0ma2cE6Xv;T^`opAa6opMt2$?JyBfE!{;p=+E(z%8cvc5*e)&c(fJ{_bFN4VgE-MIi{wq!WL zX)&3!T4hCO24<*el^P69=m1h$>3S;vd)TRil>W=7D_$3S$){qH;WHN<$>lBJ;+F2$ zk_#WP$lbIsyLU_~Z&i;TC%w6`zy4_+A+Sn&K;l;rOSCsTQjZf)Klh_@TDyZL4&1@5 z`P8*anbte9zftd=3XHfTZ-d#i-)G|ADX)wrI6UV}X(pLpqvD{p1TQ2gTJU6fL`4h@IG6d+WEU zmX(BTv5K8{bdS^0tmb8~x3cir6py+kv4wAw7y64p_6W$l`N5%9qmWvGT>Q!Ql9^OH zMqYc~EYykd$UIF(Y?Qxz`48v((+$c_)}oCv(@vO>vy(7sCm(4gF54cyYGW!ri=*A@ z(5NwJu}d}p1%cE=NvxO@2NbbGTe}3lt%VJjwPS}O=#}%qh2L9ktYbEo@0l|-KXG{W z>;>=PMBW--%RNK?Wcs9`6W7$%^U7*)n&f8VUY@l1Y(9^1Pl`fhyqx>BqCBTEEtLZL zDdVv0S+Ig=*y%V#ea#`2w_=K)ceL+bcR<=qX6@7uyfs&jvM-<_GV9YR@sIs+-5D&P zZQvB;s?K_-g+em5@fvABF0$+ApNBA4&c6ZK|5!f@FF0}@0p$t{flPF2DWHbK&Vt>; ziaWe~7I#yf8|->{LGXmDImYH4%3@x(m+CB%i6&ih{#*lxO&8~SFk?f%HqoNh7MT#G zueR)ZXqCefm@`k*T6TdI_@sW~hn@1Vk^ zes$|d;bxf7_wfhy z>mYDH?s!v%FyvgUNP3`ltxX6;_HtC!SNRF58r?_D{>VhoZ7^9r9I^^E7Gx zQSwu>7SE9gFV=Zq=B3YZ8?lFSeptf@#GHMjnfd{xseTX?0ubGKgk*g2P{OZ0Qh4I3 zHSzif2OpPm*-OKXkzJ?z916+$xqBQC%?RffPvqv8Yet(@w81CVR_nS-EXkcIru6y{ zjX6!(63JTrM~4cCilQm&rnlb!q1?Zc5&w4`Cm###-mFO}C0uIWF5(N zJ`1ZPrSi~|g-~*D7WZa8`Z|`w!y+oa_P^={fc6f*dVUs5jZcJ;ZQ(P>M%^sI*-3X1 z)42`oCLf5Uy{O$XTCQ1MuzxJd4L{?9drvu0I3cfwM+Ic>!ip|YO^?TZL8;h>M#NiA zD`D$s!HoxsX2Z*j8Z@)-`q%@*5% zz?}d&efx6&d#r#y@cYHUIM1bd|GGhD8h|&}$NdL~7z?^ZT92Y({^?Lq{E~qhgHp^u zzFp|%Ih6rC(mJqhib8QA_QSKu~*N%|A->!uY~aX?t$JPa$<9K(lC6J=DbHZ z%AjsHelDRiuuUBUB~(coILhYWy=1_oex1AdGb1+$~uUA`=j#CAt z3=A_B?Pby|)=~V7^~jWKOkWeKx-&xl9=1f5kU`kcwCLGmsT{ zVGM;D<7w?KpLLNMhT#AelKI2IXBUrOku+E<0*)T4)O}3FLd18;S*CCQoW;Js)xL*a zpV;epY7#j9=t?Aks4^XeKu{=IfvP!Eu}#sfHi)m*O3}3%R)23t37Ct=@jCl{-1*0A z$fa`=eEGuc4*VkOUpQ_A=V*?4APV1XoX`@cgyhR}8bsh<9n+1ZcL<0X5kY{>j57;{ z3aH|t_*PT70LL>>UHcx(zv3|=5b*J9Dwz{iW`ZTwCb6T&j6Zy}eI~|ETYR*AqMD6| zajOwF--!lzRp{fZFt{t4h42}SYiU~&!7hz%&AybgM&o9dQ1ex`XO8=w2>pme6l4OVdJV^ zj<1f3wK;?7e1q5l0xRXq{wMUly+bR|o4#5b6{Ro~k(}_ar2Lu{juCvxxgg^`DteE+ z9m7OHncGy#y!nbwqT#;3Z1N9PFi#qyVmTod-}7Ikg_i8rTi4s#wM#=$J*t~(ERNoa zeb^@(O5Jqu2|~4qrDAzflSd?chW9MstQ&Ljo+WQ;R!Kcw2*%{r^Y83DZFey5@g1=v zxWUXhpsh1cy;v<(^I>c>m5Wc%H?WGf$MGKV>HfOi-^k5Y)#8?(8?L|~C@%lR-Mcf@ zeLQh#-=N(J4CQDX0!cL4u)N{A>A`VJrwGGM*tht|ko|h!T(Qv{cEdr5%7R#7X}t)H z^soR^iuK+=$ni&-i&npJG@=?pH?TAC^D`=DJ2;SlYWjI~abdrC!Xswa!8_XPM_agJ zaZnY!)1p^Qe9@Y!!%){0Y8i z0B3J(H5AgT|H9Q`&*5&*)Z)AUDcx3gp3r{Yu@}SlkE2acuCBH05)}amo$KrI2u;&4 zZE&)9d)cszYL#eY--L?eS5lUZV*T`#DDwb|gxBg`oSR&Wr?E*ul|V4on7siFbIX-!^fz$UwGc3lUtv{OYy6b(3oSX&01J5OY;Vv`bw~q;b3E9~Qs8VvIi`!

!^GMg()uJMAUmQ47Y&q+Glhf1 zS2&ENd2j`FWC)Znee~h7?`w8!BFJChNz7v~CLL&AK(F>Q}`^LD9!&ywKaXMOk?BTh)@ZLMQ@cxsLxPQ!$ z2VZtO)`4fyo_@N+N83ciO60VN6>2U>K2|fNx6OQ2+eKVyl()@cLm9!5mL8LaLWGr7 zr%QkeEElH>g)D7gK!luYQy#PEG}3NSZil~4>pgtU$1kciOeN5lOW%CAz~}<;7+RVo z&V2O`F^C=SXyA1~J}|jmf$G$-VuI35yBTP(E86D$C>WefD|fzGM%UOia>q~|<0_N} zn%_phf*Qr%j~WJo1t`f>eb%rqwPb-cYsQgShLBy9$KK;ftEc-(8_z zPu>o1S`{tfl*8B-P30_hLkX4>>OHX>^AwUUx0cvokDd9ZmucWb7d7K4{jfvY=@e~W zniWf!veSKcyk`A)zeX}5>v=>GvHz*+noOXUIGpx(YS?a~;X-zy*0AdmAHy>b7LQn( zIhV>=yrS4f@EW4QdTBvZkV{hO7KEfVVkKlZtg2=?l6;|OKu)DaQBYso2%DUTkK^~3 zWNV%?_2H{(#&JW_ynkDA|}1E%|q znj`VxeJQf3-FV3&J$-(pt+0L;n zx%P{iE0Xm578fAdyxpP25=raqJwWyI>!u@Fq2IPtjL-(sd?%T z=#`BoQS10V5i-OQPeWZ`3AVyeQF$Cj%UA=v^A9@b9MS2IOenjA{45$?kGey4eYdlT zTc-qzy^(BgX2-2v&tlQm=;mi+#jFeP_2ABAIQAvOm)7~vN;O#c+TAV?#p3aL-41)U zzqm%M96FY$m^B+^cTU4_A`h8FxpzF3H@8FT$))sSCJ9}Pfl&E!V$qLZj#(&VH+MAe zO8&C`-whw9xd^6zFrBWzSwHO9R4Z8xowkHKsU`XM?j#p^ zGelW!3s$w|%M_V_{ra$Ph$gO7)aa4uX2sV|g!PNQ^vhr#!$eT-x2Tq(TD~qR7~Q4? zUidIe>=?W8%RQ}fG2<=0ncMLwtydxPFF+B8onmsFq_#3|0otXClT7k~fQ^h}onl`KF> z_bmO3#&b}Fyg$z;1Fv8JvKo5ANwBEOoS_V6yvJ#ST#R`6;xeL=_ymYCWux}ZE1@`O z@oz<{?&K4>$CBG$3R)pF-#p`E1exN&%ZdCc7MHJ;PF$ik<dG_S`g$(H`S546mLgfi`PoJz6A4DNZm4#nnY3LsQW0N zk@Iqc9k>~Go^ph7ge*~YZh^yJl1NCTeh4WWi80#gYy6EvcIhfx`?e>119t{yaWnZCPlU>w6{_~|&rmwxVC(9&Fgz=j%R zc0D@(JrXO7VlqS5L;;iR7ll~X5{(LDE)L8S;i>A`9&edT@y$oF+i5zw0UGIPc6#bY z6(=i~?Kv@StRALsh+wgB;5aIjNTB9m$1Ms=h^!HtukZ-OYPUp(>JLBPNW6$JLp9Bl zUuY*^b7igc&&MiNTf2N2-LVc%X5}Pmul*WvP3y=HGCvuXwh?ani!+<`U}RSK-cB5l zmB4YL?X4#=`^AV>jV@Aipw%(@dEKeWqtvx4Rsv`^`?F~T&Q_JH<*hAp#URp6qLenF zY%wIfuhNmS!1KU=xyIV=pwP8UE||^)`_J}6O>Vaj$Zjp6VpUN$Ako;b5pT$+$7%;3 z7TMKA<6k6dpsgyq=^orQAmo?%e&mE-JjSmUnG=s2lTJtDY`MuZXm(#Djb;052X>^^ z55u`a04%J!!BA34S0`(>FuRatPDj+Mi<|kaFJlWEB)*$1(xIBP=X^CV73NW^F^NxpooO67*uET9(5{1kX&~kO zj&NiZ>2Ei8h9w>0C9&IMccR6Snu$X0qu{%H8zXbqWJq2C}*L4dYJW!C(}gqVe#Tz>}7UfH(I9i{LgwQA8pC8vj# z`vz}HdGx3|;$L3bxd=fDW(^6GsA|$>5I)$wO0*-m!zGzQ?=havHU0V2jy&-UL$;M5@&Rbo#1gi?$>;m%$E8`YZh!K+L{&1Ag+l!~R z_cveyjjEUk3HGm}{iS~UiEz(Cv#_#jz^?;)X%InC-uB+1NdX)GC)?qXe882F!;G*o zTm=3UE&=(;GlqC|Pv=WypbCfS)9rK5pMSgHXqLmKbTCPfP4FtP6-R~Pq-=VPhkqtu zu(RcV%6!R8g&Rvqtre<_ytpKl{p_Zac3`xmc-6;XaCBmj_2+;O`)`0&8up&5X>T`X*rW@MdsuM8l%x#GWC?j(7+osbE8G(XhdM{*=4KS;L2GX&c#Ap$ zo@y%7TQ)*$=&SJ@3{u)ucV5L_-%j2s^wP4g*pp)a@X5I$7mxMlW_EnjEz$RRz(6;{ zN(D#1S&H|rQ1J>spDxeaitKnZm*A$pTkWWd6k#&BY3UXfvDriKz#>7PXE~Zymiz3& zx>p1;AJ)oToM*zV#w0b?*ev{4?-ldXjcyTm_b_nwE_pEV!l1;t=?o@aoYDBO(8Kss ziO(kl2d@+OOtk^?Scqs{PQeU2OvdhG9u`DMLMI*;2^2JmoKYhYMKy>c7Gqi$uTS8!X6(4gAaX1CZ2>aR7p>SICQFxCNre}F;9E*X zAm9kU*xhW-vbky~5Ek6RXUP*yLH+^kE(|UV$GEZtfDp$-} z)T?+_NnFYJef3xgSN){BGD&iXwFoxw=jBvbZjKt1ZRZrufT|)F<);18wPF@=b{P@* zLCG;t@3f4j7TdkRn@+>MA2H1MKDCR#-|=$|_L2>qA!9>wVR-_pjYV++I-8SlR%zBU z=*Jn{D=TEPo|s_ISv~HGNOTG`wq-IsadX_`WH7+5J zb@-LUv|jif;iFaSP?qm4>ev1IO9`)M(-4&=*Nt2T`ZTEQYK8Ja{Oz}dwo=#RHy5A6 z+4N6kt838UZfY%)eg~m=3(y2gML(LlKy~!w@m@RpS)+7$M~g**(jIMS2@iQaYQ#VL z;wN&>L9%#CVIOhc8mga=6mGhsxCif$V@rjsGar?`&g5y?i@w;^Dk?{YeIM05948;< zJmw!S;cm;>K8Y6y*gUENeDGnP=ZJArdBs9NxPiJp3C_>Vy_Pq)(>RNz7+O9yP~* zk~3AO#b<$?>pF)5LpN{zWP}U`D{{EB2J$9CSrQ8VTIkTCnA4PXiD-m6tZI^0F3Nr=Z1)^Lb z%Q@F9;(M+aJY~H z$cr_}x;89fMpoqdyEcOLwI*0vpG>!xd@J^e%>gT#f9k67v8CZ7P5Rmhbf}pjV1wB3 zXOHG#AwzpAH%r>Cp-;1N`%>wiA$9s!0#>cAT^91`!lzd3Ga9?`_8@b4yb*dFV{18# zpTcWKX(;5T=7^c~xg?b0(kT%Fou00TyIf{ZBFA=B7i^XIZ>in>d=1HK@WAt%+L7Ak zk#WBro$~`b(Vj_-VO1cQ;uW|lr-Pc@NIYBmKlYRv#+<8m;gSSIv~8qcGGb<<2KL>m zq^%51yme6&JFJ2YyKV8>>Js-yq2`Dvi0E9%cw?{l7RBR>TZ$Eq=R3!Ms$;e19BxJo z+M=n51`hU=`O8sm7d6q+MMJ9Pw8n{Y{L$*d(Jk(2AQRZI9EO_OA-$C{WFC2=jn`U) z(J4j-dp*6K4-IW2*v;dtTZ(bFwHEyy2=`*^-dZ7;nNPD%uX~(s_V<0`ANIcIPfFQ@ zC(l`%0#-eKXOA83o#5{ZMZunx5r?iPmc`OMDo&A2YfDsXzZkd{Oy2jkB7R}7m0HH_ ze0Hat6PR`1!35;gu?{{6yht1IITDi6djzW5g%^G~6+7y}Juz2%L5^_rc0-8#NzPHe znhC>Ey-~p4_F2}v39$=t#>_67rR|XSkS^lyu9ci7oLY5&RJ%PgFax?!r!ks*IZ0o_ zr+`CSrisE>%bersh~g56#oUW^)X7Z)tz{n*kItrDjX@lrajiO+qTwYVX|JBXa@ohu z&D#Z$W%zm$UWd*h*fw;Fz#7^_R$w?zMI`$xUSTF@$h%uFIuON z&SXRkQMUN2Ug;w7LiZc4Ehwwa#3%ikC~bJRnn$X8&iU8r@y=R`@f?BP1ch`Xrm zRM2MCfn(47Nyy1{#rsbIy0>Y&=Rm0B!7y)L=26fGCD7AWM>a}QM@da9-=)Lq==xz2 zq5!eKLQG4`?I=`r=K)D7VysmQ2++I|t{ub0$++@!*ut(NN z!d!dvk#@O*c7v;AV+kkim?nIAOsLyP+jOjJg*$1tO?0m);o-Yqk|6h7KwVkvUOP33c_Zh3h-C&f#?l4Ji45Ih^0L&m3Iz*h@-+rGj`8*>sI~Yt$09uo7xYhb z7R_cKW2A~pH?k+>b#Qb$d@SQoL#l{lK?(=?)rdpAZgf*Bo0I~2!gG^DD8EJou?W_KEk}OqFD5N5UMj?c zrtH+`ej99tHle+u<{PupX%7bfRuWB3{?3t(53ebl@N3^?UwqTbkyQG!wKMYAAIerV zoLfEd90CmHZK63J=Hqm{eYB*%nWacCKzB4?lHvVWVZU+oENe663T?S zB=lllUNvzD=|@%65fB{UZibed+z;v$PwfR-G9A8!&u49CQ7Gi}Us`r|u9BWGVOq zy=2XG1XWX>dq~?^LWemqW~~1&_P#PI&aP_@cL)rwfq@yEpo0@!2ZzC30)x9J=->{6 z2X}W11b25$f_oAmNJ5gQ`P#ni+xG2RU0ti~w^pA&_d0*(zRx;y_CEXCXYcDG?NKIK zc{d@QG>Er`UHGR_^@kVfn%K>U_AZfQwWxdibk6VWlxxqq)D<&7`U(vHtJN8MCAl&G z>|bFezJv!GiGQ6m8xz<~`1-FVN;UsK`HaoqU-^5*{>LiJzxUYR_VO>&@_&1nzkTw* zI0*kfU;dAs$W-$Qd(cUrXk?;`8WrvBeZiM+K*myw!p2{?-(UWqKDbx@3#Gd9q4#HZ zOYaYyH{IcH;`U!nQ_a5FWd2=I_~FaV@quyWLiuP8|3@bl?5UIy2RWxz!mR|gTdj*^ z4WAYYycoj>X2-Uc_NQ;*4JsjJEld+VuWhI5)$i%cWb zywsz!9fx<%eNI}6p<7}QA7_|(j|^p_=ILgXkFM@i-sUBQX?d`SP!2;Y?bcQRO;lo} zkO+X2d9-+XOx=XINR54I#O7>&0rn zL5qs*xFgv&jToZf-2Qu*)G_q5NiD4o%%FJ7NlP(+wTluH0~XlA=i*MambJuPT3c&ivKY{?em2ID z^uY{g{w~TMW1xB_HKZnwfu+!UWQ2~x()jZ%5-n|lG+Y$d6sVS{Z?9jEY(+lS>atx@0Jx z{h<&r^}yU{{39H7Xu%a4Xg3*C^2yNKHz1+|wBvTS$W_01MnzL?C`qI=43QzVvQ~;V zOL^$YbLuicH=^7U^WSz8$&rB&QNB!Hy(myri6D)-5@IX9K)vj!gbRdaSmVO#T8j{_ z{b5saJ0sAv8C;Rf%8}DY1g51&3rj4A=lPb^iji*&(kQilFZ@<`my}~FZBT45mHCD< zCkM@=3e8d>L8T)(Y59-6)L1rfH(_KBF=?i=#RRbxwkZ8lf7$o(X#5|8*$8Si*8gfW z2mi%-2LEuzBHc-HvxSWv#U5*YvR=x)|GtZj8T9e@i|_aKf4ZU{azFm#EtBBw-@z|_ zA*=sFVU4!0Pq2S~nfe!suI3lN?;ihUi zj{c8$f-z^R|F&uV$3LUZF}}QVv(J7MT+>9O`{Ar zQSb+*DxY+0nf;!h%k9C=nnf}=qCTMQUDCE1sOLD~D=;~8+jrM2k}MY@zAfCCH@AFq zoD0BQY>xMQJ?ypbaAJwW*p6Pm6;BA5iRdhfUEs0P5#=W{AR|2aP`V}bO5wFFaxWJg zuVB>85`4{Pqxh|gRRAM`JnvO9acK7Q-C_C2I2`7r1-^wr#DwwE;@2+ZKIU7i2o|O% zYHAKe+W;(##wM~s<{>G#wO9k~!2uWeNuoz}TABcl3^#rbA~Q4^sb*Up+?y9M zmRm)W%F*!(i43;IE`V)g#2(ec(FpPF;crOQK|CP zLp6Mt^T3ET(afP;_O1v5hLo}`utsBe4p~oyTY$G(6FIE(|E^R4|n4#;yPqF&7#x+cPMJ8I`HH>hF|5RPMdjv zNVR`vFuhf2hq%MW{B#wzM23@Ut}U25ZV!JLJ*=!5TH0z$mIf7vnI#Bq5LnxPDS$yM zlG!lE{H`LY`1I9lnHYODZ zr*NaB$XM{-@U)G$Fl(YWg`RmIhe^#B$4fdvt|F@df(EqEdIdd=NJyp7rsM9Nf&z?7YJ}_&i4_x`W9>Rcgi2k6B-9$&yvNq0%bn(?l1+8os|Z#FV`m#q2knPC+O*dChI~V%$HO!a z)2o?prn-pRsrT0X;+O;aHZooc4bI;t2zzpeFzscO@a7j zU|A0xahQz!Aj&*5!Q=prLzzx10*6hJn9U_clph1va~~0US;5#YQWtY2GI8oUn@&UP zY0r%`;E*F(>g&01fC;>K9u1caJQ;lo+`qlJE1Kc+9#mvPI}?g~T01$~-I5T)WN|dN zbv!K}8%FzBOOdmV)*(vNjKMaci#Oz$20(#`eeM)=WGx zNk$|)5%1!DCg3#g#Ia!$4-#zFq#dph15fJhb=0j9B7kh_i5E!3N?I+g#w| zUh7E<1JM*kAeks2mqI{iUwRY3!@C_5g{@mT7}f3RyAq<72Y~F{mhneD@_$kwe(s8S zk_6L+RVkss(ia2Si7&fG-AcXr=Zx7G0tt_CVrt=%6#j8qfNOABV9|T?J{1Of#L;Zb zJ!Lee<*EWbIy6u^mFSv$7A!viW343$OkO0uB0&# z+MF0?U6y^FtE_IoTecfmrTwqK-&$Ybeg3vLV15q_5Aq#%l-D2nha#xAoI?*WTf*vn z7P=s7axN9`o@4wdA!X;;Rh3Dwq!RUf&n+v&eNM`Vltbx$soN&nQ7f@rWLU7UIOe;- z;S$rEOJw0G$kMSO;T+}Qs6LWeyxiHSChSob_{!|Y^wCF7dKMNpi)~G$h1%S37S1&L z49Ql9-4Q8TVV|5o4cPDP*pbV1xi>LiXnS$^s9*o36!XmcLIJ5>GCuP|GTb>$rDp!Q z<&odbGewcxPtzPDRyXES`JK`+Dz&3d%5BspxJtJP*uK(bhO0cHj?nTAH#>5;J zhC=ML@!ey1&k~O`-IQJ1GL8s7$3M$laFZ0Pcy`aAH7|#1dE}nmHihfo1iRugaY)KS z&{#R}qpq?~)o0^$FUF*jGs8q0hkc;KER~yE1#3HBAH3aa(+;Ls4R*85T=h%juhcm& z)t&?58^RB`rZ&uo^+vHiR>(O~ZPT*;2I-KJ{_GU9>M9kmq_fj*2V6k39jsjRZ9&gm zV#AmL$~99JP@IxKT&2SqM^OtKFm}tFDdQYxQSN=JMhrb9^jo?S0pSljtWrzj4GW!| zD|Czl(1(yo-33!Z)TGqeS{N;#ByPR_W$TssXM39#Av{`mx@px$?cJ{w=Dxx3-FLe_ z59>!WH(DHe`~WZMpHe212A_Q+qS?P`<$pe_0d1+jOI0jHanYXO7P~)xG(lxnXN!Dh zzXD$oQ0Q~6u)DMmQ)IIYuHRgg;ib2PIc1K-#$#z1U)Oa(mETaMwOCn127nnX)AkU| z;^gN=@)#Qk+_;~f1UDpwxfGlh8du0nKeTt&?rUso{p0kWIAf;$GJ7*pKcyGHKWMk= z*oQ-Esuxp$Gw*AJb!tp7rr03*((Qpw%Ll0)w053Sz8Yn!j!w&Lw-m8#@b;bafm)u? z1@l<-ezY&`i>JeJu@m{K*qo3GSGW4600 zSsZ`6WJbiP$4S|c6UfXHnralL@6bVe5axF3n}@dghuSv&nVt7{A_Mb+DrdG|y`=sw zxwvjInHkD@w)Z*2qP!UChCG;#e*)ghtp6C%{QdaPq22$>h4^P7x7L5A@3Nt`dW3X~ zM9=K>VCHtLBKwh<(&gI`yY{ODbQY5xb0!sfH64BhIHW;$+y*&To%0%YBzDs@FVzAS z{KuftnO-+22`yMwuOy4oyv7OjVhQ5IMXy_r^>mLcl+ZRv+T9mVbtS>pP@5zwK8dOM z?6 zOnon*jCI+1t=z7mh$aAjl0_SA(LhsV+~-Vw(@5z*-ls z)qZ;c4weypt#<;|j}h#LH6vGz>3KCOYIIw~(vx;mRZ19gpK7IP%aydDtolCi01NQ{^(w}VNJbVen3CLIU{(s(*b zos7s2$}^&|u!ubGeX2vpOt9g!&HjTk?3e$jLrGEop4R&dC4IOR_TK@Mf5Rbsg=L&7 z#$;unk#ZH-w)uLQXuX@s7G=lUcCKoBW0Z;PLZ4I6BP=sGZ(SDQAAhi4ix#a=e7p96 zWUuGMB!-XY!2sAC@Xl;n%&V}ao6=9eDYABqg(lbRyM`(pUJ%1`i%BR={rs)}oc+AM ziE~@cM*QR+FUU=XcLNu`R2Uml;c53lWXOfe14?UY=Nv-?2Pym+@mP_|$ z8*5pK@DT%ed6EnR@wPlql;tbcYOio+t|-91cE?P1%)ueY${OG}v+{Tw4}V9P+J&f> zn852K-^m?K!=rkiyP;Rb&1@%8KGUXT2Y&BRT4Vb>Wr9;QFCq~yZwc-Jp3j0usTJxJ zII5`FF&G*>IM#&87qI9tTRUdFr|PYyodXM<;9Kw4>PUW~mR_6q)6(u{l$Y@88u9I9 zpp09(lY^V$c_S?mgs&21Luacg-69i*-Fm^3D=a08R;8SY3nZ9=Rh-V8DdvL{qJQm6 zGdVDJ+6iM2&@}ZbDci(O-kx^(w3d5r=kPTx)UNnz+Q|&nfETHyN(Pbl=|{@UUeD=D zv(~Zt8ya~HJ^d=c#8d-T-_j%gXH`CHCd}B_P``Q%oyiTT@_q63_&D2l$FJi_5dh9b zjFuhvFEH7JabkBWNPcCaem1t7Z`Ver_+5E%wMWM}N#%Y|N4}aT&10@{p0Q5f72evr zO^Id13e6Xe2NkdKS4D4nty(gU%V&kl ztf?%%80+1iQY~>c8x_(xI$wB@^RTcFft#lLt992tzo^=ld?@sgcDQi0*s6uakABbo zqtK`BIc~4Qa8NAhrw$T+s`UbO**Cxb7P&cej_>`M62n-UBgZ#&ugmt^oQx(PFAOFCO>z8YLZ=>PsbCW z!)6`XtDH|YFwipNRU4rE&ZaH_ALyW&yT<{cy7{ExlM~+oy=W^BKKPSsQbJ0ZYM0a= z>D=!kRUohqPXsc+-=2DxvhDRV3+OAikR{mH5e($N+jDj{StkQ zuJak-qi(npd+Lx?3vRcTIQx0?2@fL+M(42}myn^M2g_O5v-6ed+=e=Me!HPD6-}t> zv$66^+YVXvd8UGvig%rU^y^YSj~?)ya_Z!h_JO)31_s;D_MzCPAfauWE+cJheC5yx z+83Ma@K9Bw#5R?QMe_m@O{-^l;wGf3F3ue7#^bK42uMfL!EnV(xepdM_ z@SFV}tY_T~rCoNQO*=(L-aBUB#1#>nUv=X?%*&nh6dG3GF8)l4Vz=P0oPrIID;{0g z_c;uB|3)M+qRJh-if?SEmak>f$`l8f)Zsm?lZsuyUOm!bG;iQ_^y;`j(PP@29jl$$ zi6*{GoI;s7#7*tob?Ic-UZm_ab-}k7DPs*>Zo&O_xS2N^coh*cVp298ll$pmp#x8) zI9|-oh+fco;m;U6q+&gpKU5&Blr)o58BdjbeY2 zu?*R|Z%^dhopIZ-ZnfA?8`~0Hb%TT%m_JCHaHW8gCr%v13(&f`NF;))(s*^g9`?Xeos%hdCg83=&g>_?d+pD<@ z$(U;?gINNlP7Pmni<`pug`Wfyy86$lT|*>wT+~~dowtv(#;xlm$gViAia@Ex45Qqu zx@L^){3Os|-0QDk0amTZjdi$(r0a%*dh z=gg9=)8{N(t4UU?^VarKCf_lT!R^OklnCM{X`ZK#_pDew5aLSk>wlpEa9p!_Nn_$R z>GEFjTh{|MyrEohhe+-+AubykIi<|SRcF-J<;Rvz-EiRx(usi12-KD@qL0S48EA!O zjJpd~Ycq{vCwO|0y5)|1xO*cQJ#1 zzN(OF_^;B?|J%0~KaBO!vRt3}wc6 z5euml5re$(^g7T91xGt5EN_u4`Od;1r_bdEZ zs?~Z#JFbMOTUCM0OCWKTvvXufInP9Td84*olrR&*kng*dYQl~L3uSog5NK~{chPJl?z}*X5rK}hW zy09}uJ-29NbAlZ-@84Y3mdpE-p}$Zz;e|K;zVOYq?KksLe~Q&sUmkwFTy6f3xGF0x zYmb3_;oWIY9x>HZ6D;tqVXe3?KCx%TD&y0wMO7DOIc;humH#_j0@H~G8K%s~SU*M3 z+S@20=;F%%4M;W@nA)qq)<~1moXRP?HgHBsG)(>Dhl(v{kAT`Y zk#_G32)Y&6@ENRX{fH(wj5$_D-2Cl6mXWxJuQ)-cW&4=3@SKXeL){`F*=z6a)OCrl zjUvUoS4Vw#y)&OS-}>la$6P;`IhKcvP%j%N;`y6kYZE%JC=>ChD!2|TFVV-G+qZ*t zb%pp9;!a@}BxSV4@cMlS9yxY_!MM>c$^=)qu&eP#hQ5MnUi;l+|A8p97hf}7@d&8u zy(Pr`k=0Q_J)TmysxY@R)73#rEx zO!GE8KE+PliG8o>T>HQlgN!k<{404;84;QhFE}-{?x(|Ih_6_mU!h5$umJj-cdO^= zboFLOGHpU;Le^2(+7*R3QtxrvHlR}`braqg4jjmg_gCtbL9e)Gq?RQToe5Ll_vkrv zXH|+G*8Y4+emCZZP!$;gdJN|l^z+0A)EouUJyc@Smw#>pSXswu>}QHSEyIuSa#q5= z6(62uX0J20g?DP@UM%%QNTgTbg{rf`j7&hVvG6_fuqx@}uFWU@{zU5BDOC8%6IT{Z#Vo>k2W7Z37zH zY8?Qlfv6R;5~G_q&C1nIEilR%XrQ48IB<$0rpU3LPK1%Ig{?*MwAS&3!l)X;ZS61{ z#(L@`M=~*y{^`7`Y2XUUiiz?oazV?94dZ0u9xlEZidntZ;yJ}%D|abb>RlM(UVS_J zy4)1-`qysK9h#ka32Z9eDS5J!P7dgCuhYS<=)$SILZ$(CJAakITxrY8z%56fr`-sAWf%I48d8 zF`{%mUwgv)!QZnsF%??&O-S!SaW|D@I4LgrPIsH{S0-=T7y>MnD!rcuXDtC#z1-_(C@{WzNwpU#u!hJMne_%m4^K0 zA)Zdhw&QnIktwUo8o3Lv4uQkedxDLhE(mq9|3y11LJv)bLdY=o2#$ElH z@rTa(3zN0qrWe3>8eh%4CwV$;1A1T|6F(e~yEfapDPN;An7sq32n?~IxQ7t=}2#X%pD|BWlCF2Hj_NQXt zLWc($bQxD=b)>;TO^OaOo%G~ma~onzKzVNij~y9<51z+l@0h~MBsnB{rt<>Y#lg&c z_ttO0qIL4V=%JTiCffAfm||0ZH*_${k+=}HS#8+Sr&Eym z*X*o$AHEj7>eJ}RWj0QnqS4#s@JhIIIZPPwyZZXhB_2DX>W3)ixCHgoA*LXc2B0Lig!_c zBcnryTYZf=IP9oMBySR4V#Xx2ayU&(-^mwG;Q>h6@qRHFEI<{orhO8|fiygQK*I&7IA(qO|XCE`)--?eW=f#~IA5Wd^ zp;H3o0*Mt_rmh*%@xpu>VQHd=Cg~mL z8+J+ie$TilM3Xiqbnu%mu7_zDImA}UT6t=#tPk~!MewCgB&OQurX78kjWZR;f}T9i z%M$QaNa}`UP(1ksjXE5)+Ic9^1jfSTvuj7txR3NW32j=)A)l9g9t3xkjH|ir7HqVr zsx+{UETPd=%sUAU?NYNw%{+{HZxiRAk~3?%j*`#OxKP&=s43XmJxxzS^A)Y<*VTSW zIhE9|WA?Q&c`xA^Yx1Nog2*_9bvo=t}I85ow2Rpx-kK zi~YWu>E$#4NH}}>98?X}bH#Ast@oLVtZ{0b&7uRJpI6o%sn@>EZ;AGyFd0 z@LEuHid!`{3u5-#=_6Ab|1bw{(309bN-A0XL5d{LjOQ)y>p+8RKpFKWZQydr^n)VA z!<@^AX1G-yqD~R8>Ei8;bRdl6X68T^^p5btwE)FhUNbWEVx?ZnenN8aSJ2~cj&_6) z3<=uEY4{N!w-eY>X{s(;=;DlXC<);-W_9v?kEXHC zGgz<5Ly~$sEPyW$ua!Sx$lBDxj>hAaO(z%shP*o)i&ks;=y{LGdhN$dROA!o#A^5KI)yE;tRrn`)kzb4__R;~X6Q^CN;; zv$|6-9tjc8=~!89wAF(e7blf0lRf^DsaS8GN|k0=wlQ(D^A$H~dri~qjEGxXQIBYE zV%;=Ge$w02SsAX=for)O=goStV`TSaLA1OeR!+n%AD2ZH9R-u09qiw`>g)FJvUzf3 z#pZt=!E=7qLmDCGqq=NuX){#o7F|*F$lpSrq(yq#rBKQiKsC>93v5EZ;*>vYi=(Hw z(Xa9o+npg0A52|lZ|kN<5y}uz27#Ct#4Y=86=ho4v#%WB$_l=_U!iMd4eV4sx}V*m z#a1=w8;9(QOe+&glb5=0A*b5KYRN#pxc4e8#;mc)E$YvbMSmq^;ku~Af(GYAL0mr$ zyOw|0OI*pZt9EW)>Gc;Fy(4Jdo=1lB`a3s@u*K?HY01=xtwFws_-2+FR-pRt_NbLYO-schDC zmZqs|rPnF7i?%<7us&R^9*-&R-zk;x3QBmw1mY4LbNI#vT{;%aXI<`X8O>=$Z#$#{ z=4Tbp(!dr0X=3QR`Fw#-68$|pHHQ&Pug*Kc#bPpB1z_D$G?PT}CCF+N@dD6+Yq`BWVWn1IQByNdi))T6ab02& z<^4sr`b|5Gplht1%f@Cmf-|d$d+5A<^`!tw%dd=LesO%Fdh>QLIL}_**);xHTg!$) z-BF^!u)gA9)di*Qpzt&sjZpHov_ zqW~6xeTZZGBzpzcxLI`G)L{t6=G;-L^VmiD7M$I;q!$yUFds!$70wZUo6JMniaCe) z8S}bC$6DE>d67ql1{w`!aCX*W{-fOQj-w&_E z@(Bigln{uDvC})OcF{f>VAV2>M!`_pyM?FDSlo5j8Ld^?w4f^({A@6}=!thP`OdeQ5 zIW;FxK5NUayYANoS9sZut=@78-&fOqQ~c~wA)dwWBU!5mKzdN z0dFY8o7zrp!C+!+5+d6c721!V7LP1tDB4T1Z~s_B!^yzRZM3e@jwNmo`C7ujkC2Nh z5hFpTVO+Jis~qxE@t4@{TI#oYXodUd9NAMwG08Wz!Up|#{9&tszdi}XH^k<3R!Ep_ zkNTE{jlCM%@f~^gtXG0tS(_3!GkoI_N8E9pXSO&BJOK2WY}Epn+H;#aZbs|A+teO? z?pjpMgry%p?J$%5wPA&zqt4XCWr)IFrJTF05gnJ}5^y=Mv=Md=0GG$GQKeCfKxm6E zblxF?r3|qNyCz6HPu7{=9n;`?bJ#(v&yZpyQ{*_QBU4SY_+M0Pm_LNr~-B&ZrLP3R=3S%msLfK}kBg^NdFmE-CX}13WG;O-@9$ zafm;f_R|xDmE0h;IU2BMB>ILYb*p~0KMTK9%6?)iQOih96FHz%E93G6WFIro|g2=WB7Qi$i4NB%S5U7k|HuN?m?u1 zAk3TTD;LnzX|sGhpi%h;ZNAc{TTI3Lt+aOc=goJlK7Tfo5a2A`d{zx<{jj^T-fIf5 z#K5mLKgx3m7{;!7ODHZidn^&(>8Bv4p`E z=(CW0y+kFWi&MVOr7CN(`gZM{EklR6o}IbUxqz0ZaG5kYMho{DpTg|?J8g*(=r}1K zDc^6RH+d%~2fy-dsHOw{JpNr|JpVtOhQL3Ug#2^H_s>7_cX9gvVsU!Fe=bg6oZIe> z%AAEUI8q4%_U6y0O(Awo+~mjf!Dvoh`9dcsS(RdmENEyY}13)wl*wex}b>nREJrN98^Dh`icoHh~we z^R%>d%4kO=+Vg~3>&*^{!6P1MH67w|61H5rsZYFl`CVguV7vMo$4g z(AKVJjA@~zJJmfPcFHfohH>)WZaMzDB9MQt)#;MUSOB`1Bw~6od|O~A1npQpm7LV- zT>*EF2icRuN_IoBimoU1)|Rn;IVfoD?p;PLvFL&BR;7`H!A0WkHrhbb9eUG}B|1px zZ1Oo8RiyA#4}nfzplaJPrsCEsLiS3URP4Q^HtuPKeUA3Y8nH43o);zFID%UWaAa)z z+hW580;26Q?%Q$xrP!NZrwZc&eoz`vbs&z+dpxw?N$UVUOy!J+d|)>I(BB4g3VAZ* z;IlJN)MCsbRGH1D3U@Rx42p#cOs|@4u7I(eZC`K{b~>k%SbfAax3|)e&G3+VU2F0# z;rjcL;t){{8k0j5s$G_?*fN3O!I%F1Kex_WmGlAYuUA$IPjv~_aK@_*qo-)T0P$bjuP%_*3Pyih(IM5J{ccqaDfRh|;~eD=IJ1l- z;e9-_v(*d**qLuGDDPY}jnlbaW5xw@ipp8Zlc~L?=`~S=CN^V;d@;V zYyOcxtmZ`c3YnuCHDQ~KkS?(F>AIW))_7&%KA%%AAnH@e-uEC!J@vpfr0|5nelZt7W zDBrYM6e>f*WvfCuk&*`*X{Vv1(x&x=cI(jV7+Z@Iid;0Xv$^2G?&^1`h0buV303Of z`ekHf()h&URLUQEbZovL^mKej168QoJGC$JWMDQofmmG-pTPwG+JDjjO%FVhie5+>CL8mOC|_` z$&q+@Y6A;QkEk@$XS_16*!Ee2fn-B~BXt;WBU5FD7-N@EO({H2Js7Pe|q` z#8S5n&a)f9Xp;ol?d;A5$M3B@P&8v=Q%KhszqbO#ub;o>s$fV23(P5{)5tm5J$`9v zhul7E+1EMH6x`R_PVCC4$5%}&`;(t*-AO^fs4oB*q-L*0!RQlW*?nA7F&KF#GO? znTy;1y)ZcyOBLA$TMTcgFQ{7-5{p$q>T*m$IMz|$(hy|v^;XT^$JhUf`|T0KZ;o-D z26_U>mBf_;s>*cW*yiHWp}qoyj#<})6m!ula*H-n)!&JwtifY9b*1d6TJfoatD1vC zaAaKt_S~uv7r~b3Q$|tAWmwUN@|D653Jp?@)b|g6Z2oKngh~PXY&WfVjrNl&bW(n? za;xKj@hJ$^q}ds4<)e85;aKPt@{^R*IiTi!%SmP-kMZH)gzq@9gq4N5yh@{)Vm8%o zE@RQu-(Rp3wCpe2PaDrjj{T5(h^vIe`0B4eoe1y;oA-9BvcDX*M;QsHBB z;&oywd*RyKk<;9>9Au@*uJ-8BV{&!N(CwwNn7KUaWDO?|$;x6te<|#|u0`HEo2J+O zLTMr8M=VGm7T?>M%@&KiW-gfpa@a@D%#O#^SMn0K>es9|rAS;Fgv8fY3*``yRZVr# zFFdfcr?NY=c#W`Cfb72Os3f8q1s!QqlM1uNY?bqs$TsoQjA%w<%e=ia?!SKN4Lh?U zl%`>u*~4VQk*wavf|=rajO8p$;>M_1S4u1aQy0FgLLIje7a!7O(`J&nXU{}G*+rN2 zAedV&zKHgnbr`w0_Vittz`h|C%m4TnpS~|DYroZe92@hJ?Ub+PTA>ne?lR2cT47;jwq%51pGMQm+f)e<=*;1QTM zD`_UZh>sPeV`pHe6j*3@5`x(@bZk~cLnh(vP7mAqXiyjXjAR7bqS9{U3>Xxf(d;{3 zq=9O(8+cJrTC4WTRB?K7#5Smhsh7w~Uqq$1br7pgmaWvIO3oQ`oGQ?C=uFKz1B0j1 z(F{`QWfm--Y+rZIIn;R;?AA< zoQ~IdVf$*CxSNS3)DsPrt~lw>-6pIyJdroV2Q=%r1S~YcgNoR*WLm+|)|xb`%wJy( zW=wTNmqMf2JIWMOmhRfbre}-CR_n_h|6DG-Qrqw(&;RB>D6(P0Qh8@YuS~Adc)&VT z-KgdZBFT0OBKOwEiCo1{DrL|LwG-fy>%pbazCVl!1J#x7`r3*6iloCEz9By|ICrmq zH`tcvDJrd$2D@)Z;sBIv!Bpu?mC2RQw%IE9PKpS8=QJ1Pkh3{sET- zPTo9Oxq3y~8@X-}92Ca$plBYevNE(7Sr%-vhUu+OG({yMS*>H|4M%BE)uhE$r(#*mal81q(D^;5;6Ko;hoEFD&yW&$n;ZSX%*WhwQ3~R9T#8N2_Xly%PzH!F8JoZ<;zXh zqj{*#GU4qq2E*@6ve)W)ZPx2DjKATUovX*Bd?zh|a~}`XKSomYgcxb`i~8JD#WO~Q z#xm(d;QIDgPO-uT!`6OyzkSb{`1QnPO`GC(x;3WN%XLKx5mMOZr+8ELnbB)98PaUq zlJXk&Clt65y{gqoHTqQ((_99a;!Btkzy9;9y(6`0t_q0{4i!Xt0t3$wm6)!v=u<+ELRyS{`(;#VO)_JoDL+Y9d>doo_vC8l1o^CSb_jt zn-j%QBY-Knn7j(XFnC84FP7WpuxraGJEkS2Ye}El6%>oB%X7uU>bNqhnEg|11%WUH zO5v^sAHQFMt{#vifqfMH3Si=dO48f4{6I>iw1R#FcL^v_hl_%yIBq4^yA!0S~DDSGrI((=V+6ApZutzEE*$~chj4OS@>7%`^!wG z7`%CE?@)6uAC?+%fSs>pbqqYux;6P-)pjNAB>>O-^COPW zH8M3VK?=~p=Hg!52+M8{JcS=wb9)2ZtzS?_aakT>%VnM-nc=$7#J4}V31C!o;QiI+uo~FAxzcYU~B2 zj!I1W3uWWGyc0d5BD%{GNH|Q99}k0C!AsT#af)(j{wzCNeq;qUM>MS^@0It9nx`{n6-B#?C+d`Wb!C<7;0;E-|Dbz>I|335!j`oyHShHH-5ubZyQsZOsu-4x>2=jSZ^{si#5O9&*X11_UspOk z4J38Qc$x^1w`A`;nsOoTSEzreUh}Rp6%V};e8i=|1xWM+xtH@lizlyX6TP`!S$;lw z$s(&Q8dwn9ZfdG_4egjJ69w)&8HYH&RfmgwVgIs%WRdKd@gn6P;~%}j$^W6HV!}Od z`*C`ht)$avIl=^gu-GeGn=Gr&N>;0vQdHE^#H&DeEf%z$L`8t52zcq9+l^(gz0YBrTmnDqE2h}p`o9mhwO7?tBjo`6WRk})JShD49 z552cBby5x87^DuJ!~-*^T4m8o=(UeTNRp_?rDCZTWkk`XOvYNPxrkLoDyhXw5hSuY zPe*|zsxCaD^E}K6-i6T2D$(m5u_WI%=sMwl_UoZyMXT-U!?6QodH5XB)Itk)!_v40 zOMJZ|<&#IXrv$DpQ1o!0R|%<3QcRh8Am`CIS=^p2Q`^>90x(?kZO@mo2A%pJ-y+-OIQ`Sk~}pjyao;>!Mh)DS)VT4pj*( z0VLLhTY6gx;Z0Z(=+e{~em?^!<` z$%EMVuw-vF- zqdOxWEthNk2||2k4e%OrqF6~*sa}QEDwME2C}2c2Ph@OpQ*AwL!FfOTq2(HvH# ztUi^#YER1;$z3FQ27Zx|lzxkW7?MRudF88+2Wf$MW&Eh=p zK%XxZIq~{M6#7Z5K@$rB!Zy6SF5QvC0z$gAau}kbHaq?YnzF9Uf1$h}rUx|J99Y%v zJrNdG5PyU&`t2L{BwmzjhT(yXO$Ga>vtEmigYcufNq=^1Cvc4fJnLmrpLbjVZ0mO$ zku%r|NyWydsp&*xT+c33cEkiK5nf6muL97Z<1si4nPKFvx}Hn zVAgp+fb=l@g1hYIf-ZMV%}1q;F^kl`)Z#~>gtKTYkru&{Q@9JvHreEmO0Eq0`7e|y zBv*u7CSl(cDg6qGY4w(#wu|64zw71Jo0x00gxG?JTWQ?W&^<)4q}CBV)+l)xqDYBF ziaN*b0cEjx^FSeO>sb`l*#y%o7aKia)5qn~;buSY8rxJp^64xBs&+~(({JdE)EfO; z2}mv+XZ!#Y{4s4zB#*Of=^i#dAQhO*wS~)$i{l*GkiItBIF$-Uw`WR-%E0y5&iXp##wzRUJ)S1oZ#3b9KS`2Qx<_ewn z4eb6LKVF8~kA$wcX3-3`WY#ZSzK8S~kIgl@ZGM&4*Z&ZTx?F61NN#pUrfYG1UpC%+ zygt3-NdDZytG&|47CL^g{QC_dxs*uMN5u~43IWyp`hRku5n<){@A4Bq&cZw@-YF5OSyeEV` zDfe|mWt$U40^d!hi#`ZcFr9cS{W10G>f;xJGQ9RdrG~p`k~bN}46z@<3aN|mmRkcG z>I|$*L1@TePItud1$M=97)MrP?M>T~vl(9pSN-B0efDFPN!k)^^(N;_&I{*|E#B`~ zwer>=_;*Z|F&=6bpIsSzH-gXltz>Mg)s#*pz0s0{f!?F>Lp zDS}l*CW=Cy`X#UQtqs2XCw#KSz3%qgJ&o|^A#Esw>T$~&>PY;&EMb9nh9NmMx{Vh! zYU+Mz#09t!KUC|(y!e{C@CwMOe|vKu6^s0!I3kxc;$OaWnO};%-4%eWL+hA)7V&?m z;}YVf2_5h%RR<1PNX7B*r+2-=EnrU^+u-VvOr)p;;V!%d_ViBvv7}`F7Et2k`1f39 z(cAtQwyLIY($7%JIc(Jo3Ayh(+4{SE0C4>jzR=%ack z7|9b7C~rKshA$X}w$r@n)JiG|CIm++#8-BoS2$GY#{w{h&8M2cRq#8a{DMXIG9*)u5TxtMc{wo~{%k+EdayW8_ z_tx&Z#=*Q%g+{F%2QM9hIo7h46h_IuQ3^#+KN{VEoVk-st1br?ST0qo~)q87I6Z863zI?HTO_;_}R|`JDeg*DQ<`i%34gQ%y1{T!i`X&+Tfp;WH73?`{JJ zgfd>mdRHr1=?LTK(SLNIOdlU&Ax>4=5@r~$x&l0xr`9=xO>KXG67bH}rHoig!yJubtVr8N-$f1)w$AMMB^3D5ZjwAs!Erx}nQ~^IhkY6PnFvr!D zPOFraFV}A_Pw%7tv{wxkI3AX7ziY&h;lEk3RUrXc4kwfHvw%%jTV8zpbt|co7tSf= zcgxXyVMOizXREQ!kl{bH9lswZC#yt(x4aT_KXgvInAiqhw2%la&hqoU@sFfFX;bz6{k!3tZj_#*Lv2d}T4rB&P>lfnC zJq7Vv4M~ECQBBO+x~5~ZBt|BzY!uW`Pn^Pcl@2HU2;!81WllZH6q>_`9Ow`FJRBEE zwU`QhSYT-WSPvrIw3V(mb(9$#{kv(GPj|eF@IO0<7SJjV}8-l;7fnx}g zSxKjQX=kJ>PXx9K>X!TVXrpkg_RR>vGtFj-B^42_zUoneZPrv$p_ja7GH5w5r$(v9 zPK=4&5vYl}F`X-?jWPca;kT^riC-#zYNq=xLjlkL(RfSglHo|vCjB!`Rs71WhnX?4 zCLm!p;)1forEqd3tWYqK8F`JnoQts>A+pe5(Ed$b4|ECOGN26PL7q--^|O}3A9Ho- zbWQB#QiP+! zdU~#0$Mm$?`)kRYRN4s002DnwJ=nA|q)-kx3TOXVNgqcVq{XZ#qD`1W!S0-%FAK25 zZ(71f2r$ZOR(dkb+R#Mhdti_7r+c{k|Bz+>zm?efKVtCzbMPtsRj4x}DsXzT(6|O} z?0n{^M_|@2xdPYfAO4f$a@1+3Qsdw^7cBfmXW1{EKJflno7%LoQMApV3DSziCFv z<;JESQlcA+OSE|MJ{j+7XQYK2{^Rm|wdTV%<|465X+gC!S#DF$e^$iv7E{{9Il zb=xP$t7F@vn!5Wf{&B<1eZVaL*l|%-|Fe!APWq`ry$rF{_8Zcy|L>A=oQ+mZh#SbGhUQmG98|0IxBh_WCf$ z{*&bMY~fw?5V{R9`%>C;QVbkxxo$_t%V=z?c-gxThv#Q!kYy^uwzx0#>xC&2`{a#b z5b6g-^JnMay?H7^sd#z7=_{V}B@VXMl+{Y4`Qje!a*`; zS{qK;_9M8ZDnQG0QFEOa2)c|5>m!M|w(^Zv@ecJy^zT&;?{P(&+eFnjro<-uxd!YE zE*Y(RkKXlYSm{>TI{qm6i3M1QA>u#>Myz3E)oKLUNZom zUETKEl{Q={Jgc?IscU+Lq#9N%g;KJ7?#X!>Mh#j`hQ=$(BXB^HTeJ0Ge_r-^olJ1q zB%AzuC%!17xPEUhO3_cU4c*I`+zN+oNYe#|ZTs54pX~a1* zK6v9&7+|_oDm#_nE;4&@J|^}zj0FSy&g4rdGU(bl5km~Jes}|xeOZFF>v0JYU^c_U zq;y%ivv?+=cWOl*7MXw2ipBY1@b{g+QWi)ns7k-xKq&j0fC;SRTDO=-O5sviYuCeB z1h$3-LzOA}y%AsIIR&neS!6r1jCM;rZKP=x{wutWt8Rs$i!=%6ar2jAuQ*pX2m!8M zYoIj|0XJmRvZaB1qJDXKN61LGOS=YK$iCf>G=grO5Nk_?D25iuL(zOkovN}v6kK|Y zce}ivn23DJWON!7E3zzm^(k<^(GR|B76WrWt!ia=iv&ZhE zT3dI|8pUtKOl6mQFzum*akZze2(3a;RDwqhxa&~az|>T)2%@M&wU#`C;RTGFn6Z%Z zjB%P{IbsrFa-8nrF&9KuA_WS`r2C5BFk@)sAGzW}5C<@~i)1+YPJ zP6s0*mzlFKNbxBCg6y(4Ez^r0HV(lMCH4NmxSA3{*5Z zl{J6wgrfW6()qn&sooO8+d-tyuCp;(yzHw7;C@7yIY@IKjq+2iGKm`f*w-%ER~JN% zD_0-Ykjt1VP8odsjYr+#($~n*0x01KB)E8CM+%MFVoGDzj2e^GpFzs(rWQ%_d`naP zsnRBy=b!($S>SXPs+#c{qmga9hcrd!n^C@F6V-9pu&-?m`&XkMnLd&HPaO_^uBL6~ z_xI;)>`I?x^A@>Ts|{?O*wlHP7HCy6fcL1`v7Oe6yoJvLur?BIZO8~8+{U3$uxcTE zgty&;94sTkzpt7t8vXmdws{^22OhZ{6uzvK$mF7!2PYo4Q~d#r8*JuMy>j6L`(<3siN_kezU?y-*ofc$r71nZ$GD<+3`W&W|V#p)s zY)-#|mWhHLGS~nx@iCEy@3)p!7HaFFKn<%eu?*x=mr{eCv<%y*VXdts*xijD9WGH2 z5d_NT)uE&DyGO0%I`nCXbM|6=cES9w{k;y?ta;|&{x*?E@jX|Y#a}s;{K(ULKpJDG z>2vK!5NGipl-C~>$OSCKa$VFkGA}Dk-+dXUTdBbKousoG(9yf0KJpwxvo|_N$B@-W zAaW%Q5)U=igAdhTi^uwa4=lj15nia^{Z9F4prSU9fWl}XG;*KX?&o~CI8}v$N<4_4 zddr(D93Xx+yp~0WMu# zqB}JXgVUEYG2t5n7HR5`o89}W_Q0TvD z(2!K$QDM*Qh`RWLA|SDg17tZOC^@2xcnqReF+yyN2JIsF z_Ew-OrVjiAGlRas%3!T=ume{pIsQ3|<*W09IYaLmeTDdNd<* z+)UwHT$;p$(}q- z8|#(0PK)8`8_s6sUMYb?P`ti}1OZlg%Ox7JsB+~zsfF}jy?2ovL*U1zp%r}PhOSxJ zW46~lDHRLx+Ly$p;xT25=iwz&PGdL|Ef-}L(hOEZYVoGUlW9ydzlSros#+$mV%TGd z2=OAyIvln8zhh6Y@iNSeZgQhsBnp?QCpBq}64uZ>>L2LjBf_EO(XQewmo1+n9Z6sk z)oVu6Nv+11;+EwaTqf~V^tW91F`;AcU)1^$- zzH#(!sjyHEiB7O}Nx`h>Pq3yQ$4dq?L`|hJWTlL9`mS2Q@$&H5m^DH>wDm6NvItDg zI!;FX@ap~o19$?=+=s62HtrAw<}*GZ*c+OrORBnCMiL+WBDD?QFLNMfxIPV7S= zTq&z6+qEs3JKine+-&Pj^%qQmF(#x8nKv*C>4pU47{K&WlRa4_jy9c+n3)=DZwR3! zJ*>vYUZtp3X>=Aw&c+5rZ7s4rk!7@?=_#@)LW{|}E0b4#b9f)ZmmH01O%}@U89%@x zq7934z{9`{5~qOP#B@bHWUKsf1?3V8+h8zXF~7CD4Xg`F3df}UZOkr2XaeC>rE8^C zmTeD|vfhZMI94SxP(ol5a=kC}j>VNesejy*knL(22ycboiUFm5^xU0qY&`|gm(@UY zV^i4F@XAeHyM|0x%j~JdbtTB3>S4lRyzF%qGvgtmd za~xRHi1Q}hm=Ipb#f>tr7t2#wrj$Vxp?N8#T}n4OT`FDrN05(MO1d37wSYKKkA?rv zl+y+M*I)TUy7-xvw?jg~T=e8+uKq{ux-Y_LnK?p+oTbZH4W>kc&DchK4XvDIiNtg9 ziaaS;nIu}b&Ea`F*m7pW3>(}Be`$W6-+%JPOd^cu#uSn!J)8t$CMiUtN8cz*p4tgm zC5*2nzIH2cL@I9b3=22krHg(A#+nh5ewJIJXV{5Q!LBw-3ne|7VtSA~Yy8I(iOfo* zkf+NsqpDz&iM_fIxmEoFBEoBbS8Q+RPkP{xmUC92c5h=fmdCX~6waK?VV=+B+H)3} z5X~8Q^6v#F8~XxKs(j6El;T$iL!-#y5ivD1Osk<;X)2S?b~1s@qf8+r>u|@af<72u z*B%;KrIWfypT;TpQS?M=fr?Y;0?9HRtX6mTCZ)Pxr%v`>EQWlEaE4gYoMIl$Qi4bb+dERpDUFkyrI!DSRs)ktdd}yK)S0S&(S&#Pw53?dTip@w~&E8 z4#j$1t`=3E{~o2lu;@#HYt%mUM>#D+-5QezDdQ~oo4f39O{yRz^`4?Wf@J7WZKcO7a93q zM|c`o2Ges&=g`EA`RQs>N*w07Kzm{%g8XTGBtE-{r03ZR2%H=+d6!^i@TeR$2hHx|9Znm(E1D zuQw5;n;gCf<}!m~V>U|_olXV_huhqc5flu6MfigX~NV%@J$ zrCGJqR;xkBGm>IKk#7@8r4Xb5ZDfI`qhm{zXhr4Yd+|ZnB6QBR)ZbFE1mA3>sEJ|` z=&)L(W!kKznf{MYuWRI-?(I7|=X$$igNLUK&ntDQQL_8iqZArd+}UA|=dAW$iV0T$U0D}I3ew9WYkRQQh`{5rl$fd%wdA0K~?Vg30ZTD-p6!##F{L02;$L_F*|bO zjdhb+i4DV+=APH1>8mmq4U^TK#f_G!)J185X=RT56a>|TTyXm&tlH^x?$H#qjq)GC zHeybV>Rf~k*w@O6_QaAweaweArJ;sbBg#mTboI&eO5eRb zic-g~rkH=HdO{3wdAU;|2da0A8*plYi4Av6-2ySH`vC_#E#ZnV5Wj}T{eeycr z$c0DfEOwvHzS}ER(~Mw;;+GMSr7ZCuD9V5G`nhoUM!k`mL1elMpq7!VW8xS=Z&Jqt zQz0*V51aXzsKGG{&sbCb$wd6D@}!)Wwx#FFQ5p4k!$3!6m!gx(7nVLQ52(@*+~uX` z@t7*)xgTnL~Nm$gJ zI_&(`V=2O7&NfB3!31gp2t0}FOnWTtn+*@s=(;aG;4K4VlZy}jaGtAxm8O9MSMWhx z_r`{I8L|!LP9PWG9uDV%4{^bCsKcEdVN}oRhn0sOXaAih)!tn73rH4(6StF4N?x8+ zlx;%~1VmihOme;vUl_onX>+|O6m77f6ILN^wCjc4@MeMyTcX2<$`?pY{SLliI+~b( z0Fr;*P#A0-M3ZaMGsu_el!!gs>F7iF$unubYLNY_=2Iqo_ClY47E^c+eh9qpXJuU& zQ*Agr%TkjX^sJz&yZea~<~8{rnr8J7l^hUf(y53+K210P>Q-9fVhM{?$6zCvSU>q# z>k_fz>rO_-z%LTD7Buv3s*=)3PLWC!9ZJd97z)Z}3${5*()vEAU7?hon;F;B9?A?U z?SKTv3sZ9nm-Sva?zClgU$3chuX4`2)vVnFwLGB9_ESTnCsw|>vqyM~Dl5}+_o;SC z*a8<(QLTtNjigJy8gM2aD-M?2GUHxY0Xsv=q3T#w+ADkMDX;>WYbWK|W=AMLk>ue+ zQjzZoD4m3a{muaQSQPMSX8mY{oJvhp^u#)gS(Y>WZMj2}6nFdOxa+L>`IDVba30By zo~^XdvnAt&%;`(kGXWEEOY|vDX)!bH;sbj`&f-iLShSDYO)tYGe0%dQU3F3V!Pcn6 zccOlokRig5b9q?o>B7>!R49La)I88~+)Wy3nH65SGTh%ZCaX=}lrRkrSlhE+JTCql z5T(uJCm&fh%H_oeCH9DV{F}O5nYobG)Qz{vdyPTd{Lc9c7l&T*;F&(>gFOmh)>{Yq zZJ^g7Z$JCOqdb)dr%&P9e&Q&75aMlW)gZsy*|CrR7RzgihSI0Urc(oUr~44Xpcu0-HvP z{8w$cDfrdmwhFiLm9;*zx+R1w_|3N#oQo;O!^hLDT_nK->BsetdhN_OF2y{0u*DEt zJX@FS_#b>{qeT((I5ufKnk`;9q3r`cIstQsibAjF_xu-#G!=^DaMgFN1@filojb%~ z#@P_w&}?`5qM|WO=X(wUsy0A+)5g3n0)1u9i*2IXC~2`po*j1I!a|?}(@5V>$*WN> zahCIkJt5yKX>7T--j@YtZ>)s<`9h9B9^&HgT0kk;v;ooN5Sfr_MjX9uA~G_UHufsw z5y$7fKkYb?Fu<#Tmy7FTYWum~zF=*W9;)I~4V)IV3OusngJBDfluozuoD({qvP`H^ zwxSIgMS|@XBekd(n$+vBNW`Te8J6tgdB=A9<&`cB8x1RXiNT)h%mg^>re>Vmtz$=A zb0C<&L=D8!zgEMZjp-q)Or9aGww_G;MrI>25Rm5Netj{J6aoRuVWk zBJlC~mDQs9fS+k8i9+;_q6Q=uDZsxCrlQIgXK`3aS^GTMpiCHYQUT=u(1@_! z#;z(VMTj0-up?5^-Nzq-qnK3SD+`GvgeqH(T!_t_EuYp4f4{?lV(}_hmc-Z@UF}C% zak`?RJa~Ys0Lf$)$CE)RKRMbD?L$pA z1(RACIw`?oibKUn+NaHd1K#QmkSh(C?MfmaECVKZ>k_j^&gafe_8mV}rcN`3Cg}%z zma<^!3J%zI5{?O+3QEg))4-=1L6li%f~HM`@1UHS_83Kv@#*SC?(%u=U4FK;``k+< zGw?wGX{jjjzaYl&!PD&2hOLlkjykdH*AP737@mRqEy^t;$CC;CXL2B-#Oke|)kvC& z(At}97f^qAzawfo#0bS3dL*^?#*mfKmNdEAQg*^E9AhjQLT1fehA-I2!_R*Wu^rOf z!8GQz62l!OJ$2_#TWhCU&Ja~rGjuG5Q%U8^wki1I!U(FdnWqQR=5}~&KNh9`mR6|@ zfcju)i~d==GUkcj(1vef^2D__wVo(A1Y!~tp+YMW>p*>4(?2)(djC@)zLf63mm zc@`7~S7I2q*B`g7g(tkl0gd#O;>181q<6LFf>(Qq%;X!<3Wj8(|E0Uvs1~h9)E?}3 zP>rq}D0el2!7-LvHEK_z{-?|0h|juMAqCWJD9}7fM$EK$^7;vq_rU|5!Za98h>q5p zGiHV20yu5sN>VY)Hjs{gOEBmp-`&zgE6f%$k<@6OD>DUFbsmv-aZeffCxiO~MWU8T z#~B&n-Q|Rtj1@Zwf;W{`o;0wsiN3n`Hec{+JvZ|lA(afLC%iQMh4@7a-;P~Om#%D! ziZXth&)gDk7>xgGz_r2GNvv)n$IN$-pC+r?f^jMVtL(>@+ z<%a|!ZN<>IjnKo0Azr9!6YiMHIyk1)y5(9pefS(7XO`Y%2vS|weBj{7zta-HRpBD|^8oE=qr z?OTd$#5|HS>V}e^bWAg8GQ-EZ=j?R^C?xlt!-)E!(&Ny6PjcZS8{Q0P0UvoI20IHG zA~frt+Q+-TeoA+2jJGcC3}CgcjAHT{Pj-D{;gdwPI?b2wtv5UOYv$~wtd-M^iYo=w zDb^w@(nQ6~Yt3zs4^H`HOG>&<06~ zPHKOVbAl?0gs#oJwO4EH^z`{=f zG`sL6x}zY+a;6bE$fC`Rrrj+Z9`u({hGL@U5)H{HX|m!{P>l7vnFeZF(MCrZ zjtdvE0w<*4GUZNtIJT#0|WLK(x~>!^Sk9^HZR^Bo5F=FTSY_54koB}W9$~htFV7c-ObA=d7?<_ z>(K1sPn-@!Y|vhMObMXdFjxdQuuTAwm5G9fvVU%??NG)s#^S$Q$^+yF%tHN~KYzFs zc)i(@%xXh@w2FS?2XnX5`${vSJ^4S?8utGWY9HddQ@`NdXoR0Yr`Cc-w?mp%kv=WN zm!|NQ5~2#+?7#ATJnUQX?SsR+O4i5n9{5D{L#mzpyv_F<)%MRP?J9F+EWAKYmDY{N z9+v6n>2R*6wRLMj9~sEGK^=Z!@^zrO=5VKzQeep96_pXC7|)CR*6)eLt72O+(H}ZH zsA8x0uZ)pS>vlI zXXFZ5F{h;UxF7RwRT7#C#T>%~j?2zF#JAcH5M-ZXI&`)BA+@YIt+0&`kIsXDzYE;> zC=sg=Sq=D4_Bq$`Lo z<3P?wMA*$&u#Y;$=gempX&ZCyn}_=E}q7CS9Q26-|^zm`(e-evsU{WokM$FK?J!l(_2H_9jC)LNvb>T6awRYevBr6uM`IUTNx8vrQn z?6Fr;3+R|$s`O09iz+sW8BE(5*TKhFKJE*SYNz#8R1kk33y{0Mk3|hP2&RFz%FE~$QGdM{kTWtW*G&SiY(em%nhnv#;w&m1x8bd8oJczFA9>G;O7TR zW8~$6j$x=kY4=2Ppyi_N%T(Teh8LNefx;al) z?X$p72sSE{G{MHw# z!%iqUYXjPf?qf^bWbfQUU_q?GrRUbI+KuFxPKwi>`o_F9=0lIH*tCtm3|=e?IJsN4}z^ z4VCXvPG{<57m55k@wE%XVo}S)VICeub{~9W4PL4X^vk}-mlnNevJ`Fq#N4emNQ+t4 zHukl4pq@~Zj*(6RpK)Brxi-m4Ya^b10&y398n1GjdMP=jQ`q!pciI0A#-ZGzCl2OT zETO5ItfLFlyXl}q6i*Ad6|#r$E?cX}3YN?h_azc%Jn?5nzHXi<|Mu?7x?fLwLa6E0 z$gmQr%CsG?N!EhAc~HTZd(7Jz)4wf)f5C|MAm{m#mFm6np)^bDzQQ3Q#k{Kp#kXKb zy_equ$@?2(Qm?{yA6Mun?Ff~6evO^~hxXfv4yT077G3cqCBD$k%+TVCVejsYsqgsUFHU zpVgyKtDo;C5$uLxZ&JU%f13;>(0!=B8|s;$;~W@P&{IOxg6-*O%cRSxCJWtSr90L4 z`vP-&Yi5;{sobgzE06vXaaO1#bo7tnovxl??<#)sB%;bbjs%0Djd9@nPSLCqE61DTXWWSDFdZjl3f$^#pK3(ZVF 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%0AVu9Ha4N)XIe>@#3X9}l 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 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≷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 z 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 z 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

CW!GY+_mEC}lzJWP9Akrk5@C~V>OsAO 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Π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�CpD@ZK$$~Kl_CM}WTft-qBkkZ)X#p(oIEDT)k}O&voOX)1rRi{ z%IRDpl`;<vRkL9w}M(OXUzx%$RkD5u2n-cn1uw(%UoR3^)HwQn7h7DGP_%R??lP zsmYt;8AuWKQ=2DP;!#xbe{#m+r87y%7Ox3%l$^jpJSX&$%xo}qA(o%+20bo(=KVzc zK>}Wu`!6Sc)SQe|MD+MsG>FqqKzzB>ZBYKbNQHlQGo`NxlMhw~J2K|3OpYX3jHbZZ ztX3}3%t*Rz z?oM%s;_eXKt;GrMF2xBDJXo>f?oN^7-lBz;(#yVMoN>PW7UWxaDgk9J_ZJZns#YW<#;Rv8O2MNor=Ge3!O>cxjD^a7BvK2J1do?b(8J)Cbv z7H+X=9jBR}o&BubwAaii%UE%-IjogZ#u)T6q(lCqR7^D zQ)_z9zFEQ5w4p$Bt(s!%$ffSapB9?@aY;x8jeMf8GnBu-LQG+fn=uVGE#y?M>)?KI zO^MT&+TAFv*2jiEClhv0VmFLDISVhzoC9lU9CanQOk$WN6s=k|Gg2*B zq{akUqoX?n9Xb$s8=`l0)`uv%kR4l}!Oi-~3zyEBxjwFjmt3`kz}nAZmL17FuCd>i z?4=or%+`7yvT|l~E)ZuUy8A$ZeO$CZINUN_6pnIFft|(t7 z8Uq`1SBPzEd+S;uT0Wvvm11i9`d0{>lZ7~X#wCvhQKD=vnhuZEC6*i?W5;UlA}W+o zgoR!nzhc=y21#N(B27BT-e`Wc(XOn~DHG1~_LQ07(V7B1B4u$4gs>#%a&yTJsvbXtra+ z-XCQ}JD{p{w9N;we{|k4vXH<}&oqw%z4m8T`*|e+g;-6fwe><~(hRqcj*4p>7@^ws z5KHVq^_KY7ZU)ufCPjLBMYp+Z@P*={iIlOnR(>#C#^^M-{nSMnTs&N`@$hH5ej0{t znuwBRC7~Zy67&OGUr|9U|zXE{1$tLB_qI%KBZk#XcBfVWCam;M@ zMuE4a3(xU8VL8sj>=m&$;u+*&Wui7?+vm{}Quqn2Hmnx0ASapu=ma}R4q}x8+-cKnaOs4V z?)M>S6+Qbo9%X{{Gwvq<3iqS;y)#B}T5XTNrBzU{DdCY|eo2x)-GMRL zsS~5B&8FUF33yU#3&rmq{{c$N}IgCv|=jgP~Jn9FZ!tWRS$-jl{%T;!Cm*v8*^G_6zS5$tTT6IsYuvIAg{@BXGv82=%NxR2Q>%Y$l3_I z@FHGW$=Vs|ZP>6F-q-ws1$PIlfi5X;j0(YK+aT5M#Ix2gZ7mmiOsur8Ds^D zxFLICytWY&85>f(YOs4CgH3jO!|%*pPP}vw>!pm>VOYG{{ucyh!LihxZXM5n%G*Fy zQlLFThH0|k-T(tWk$u^Gy>yuhW*B>1eyDHkT}+U{4?_;kn41!LOG9EB_9PMKo?QZ0 zJ2g(79}n{jWW3G@`m_;Q@Ls(MW}s5 zO=7d(HW*;b19JB1ppxy{66MHI$s~%klyy#KXP$nlnlF5FIUV|GhHsftw^2TeMZK9} ze9DO*h#jOxLeGN@3EJG%I7KnYM+*U43)iXCHn!Rh!gukCJo)ow8rhBAGfU z$+@q-=84OsmJ3cI&h7R^%x`-S2@vAzU(rqX7&fEsR^|&Y6soReebt1jkJ-lTCyv}@f*lAOvArUp%ek5u#h>1B2BpAzZ?&f zEHyoe;J1aye%IRV_p}GQy+?^W`&`coR=VDkJI+WQq}uvfHi(1yLi=VX2xAD4(U6nO z;XcAIC~nO*Txlt0(Syfwsvidp8$WhEA6ZoO=+QOA+S34W>C)o&4I1XdaOS%Qa@!Md zGIx&3xz2VEK9{^QjuWe}ZVN-PqBGI-jRHpf+J^g0M>JzI zdf?#$9H}8In1;5Z>YtUKmK*!O@A#b@ErZ$e)e^L!_M~95ND-_>wp?Juoepctc4lb! zgh(jaVDzy)GxOC5J+vV&ch?ZrmSz6=vvw z|4UyQU}2=hp*!v?uA@=U>Y5n@7vrvA)Z3$R?%HRBD>ergEd_)s4d|2v)Bcjr9n{A$ zfU39a+v<^o0aci-`9F@*?o{k1>gbP$QsDAV^1ZWipWRw_{niaHn^<~M%+`LeuhmK8E5$Pu_quEH3}6JfLt|5i0wDqNsxH5n!MT$aFl+>Jdw0@a$uRR- zUCB_K>|@ZU=|saDM5?DPc+LbHOFQ!hOh85KD^bIgw>C=%uNW(RT3f;v&cRjM$zAWAU~Alt~>?lW6Qr+R0Pd--EKK59kXaUpk|{GD;Qo-RU&Uj zv3&xS=0@xWmS6%ONf~H7If5=AdKTW=BDlV|kpN|to`sd$8~T+jnVR5 zw^P7YTWwyziaOSO1?Jug<3DUIrIJGR^;_)R^>dmif@{rTasm#w~k6_=s&wh+wssU(w zM=0GeZc>4Hc>16*0wBU59~u+*svslk4-{Q<4eNuxNz3!x8=r6l7_oUlavjXNQmiG!>ox6zq+RvJ4t(GusSTm3v)k6 zrDzcwlfkQ}s%ZNAR8k0Rov%xJL2&Gm7oz@#H+@Q9eN3803vX={wY3hUK2DZ(34Eni zKWI~WtXPz4(BQvwt%1S7gM171-a;9)OW~Rj1)4=;WM6#-Vn%$;+Lw)L0VnUP&sdgaJka--GUZVL z_`Qt~Pajb>2u7_hUmYh%ErlZ`u=iWUuH`sLTKTf#GQ(Q4UHz|dZ@=GVNrKbT@k z`!y>1osJYzG!}tb9a0SZaYnXY_iQ$D`RwXt+%NRs=q#^z6ndG{Tg1e5a$3DJ25Px3&6*S>qgNa0 z(AFI3zW&6svjp4-i8f2Fg(M+L5k)PX-E{{ME$`3WvIXmel99gcxj;JGSm=TaBGtr!9|2* z{&u>$-`uf*#|~r(@O>3;3*8?b`CT&5H`aChsIOV1U(1zqbJ(O>D7r620*ZCsg`8>1 z*wUkw$nDL6zWrEQ#?T1#Q~D^vZn@P%VUgj~TgZpLq34DpgoB*}!+wSRSyK+UG1*ue z@s{6y^HN7(cJ@nh8gJ&fTxHSChpD`~(i(5FzGWE`Vbxz-w7jjABLw#CtF^E6^9MLb zY^}JIakB`Z&Le3IQDrn`T^k@O2aI_Ncb4hpJlEy>aT@FcWHrVX3lK8$8@`V=@58f! z!mTQ-O|*y&eYBy8o1V>lgSH5|mfc}O7Eh{9%uO^qF;@~3-;&SglaMEQQ6d3CK}oy> zpY0-R2xQsL4t5tNA5l59=r;E2G88v0qDIzcQj9)uPCL1YSYoTsva=rEIUMIT8B>T4 zZd=&$_1p^^@rTSP!EZ)5gJ_Swx~?b%hc(&0RK(`_l*{AD&nP!B0t40_UpV#~8hpb_Fj^nK z@+F5_A6PvUa7>fdu!ju~C2@>y(qPS^`LUe>V9(dlAIN-E|V4INoiz zINkbx{@(xsq*Gn-)qHijLD>)vWSRBV-XfbGAs>asC7fDjPX@^yc&s==ig%Obve00Lgws|<8v_-Q7?ZVl! zudN#vBY3m&UZjX<0%YnKj2WE30`HWyWKhAp6={@U>o<;E(M6o0};YA#YYEYV+LX;w4Du|p_bS*D%Pl~^_EFemwUV62 z>kqD|C3KbS%sk8>P2#Bf74SKpQsymEIC?!stds zw{$Lo;lsk!OVB;NOM~E?cCO~5q3efL$2O;FjeYbEVhWDj;f2#$YYoyWppuG=eZ_cX zTZ__in1@Huaf{tO-^s3^h(MtHXSo5jY1^&J@UH4ulm2TO2~Jt<$GPS`ncNPX4Hvr8 z)QM^z5Y9lJ_DfCQw<^QY`9%7M3JVEtq;p!{wb$D|0u@awv3f`K_DQs?J%Jj^iaxYm z-`P9tEk<&K)7u9!$WAJW%}C&EQHxtEvc7^@uMc;>OOuOAC%2H|hcm>ft#&RLOR=HU zX_!VQEfE(#9}Lp_qGlW>p|sIp{0E?Qn0AdJIDxTl}PpKKtbaW zg&xp?Q@H{)L9Ifi`7@UFHWEl@Eu?-thRg8N0J9DR^h0)1Wv#db$6BVWybYzCY0vhg z(wX+BVJHF?M_y%iO0_q$M?_5ell5PO)KPJ1omBq3vUar&;5X0jKCGfYJ{O5|IneEl z8LOH@)fQIa$RU3b$oI#C{Bx57uw3Wq=TPJM_r@r&PMR!7AeR7~Ng&VtX#o}P&%==< z4jC-jz?%2Qe47HR708TTv5qoIdllvvqP5-esf^BVH`jE~^)1B%UtO|e^y`Lnn>if8 zSwRvc*~F_a;C8LwA!% zY`O(ZlH6~B)Q+8G5Q;XNWLgDGH&wZLz*EOIc`%c*;cS8`Kg-SFLXhWi;m?_RflE8p zqte223gv81pGj4$I#<%5hWySS{G}e5LQ{+T+z8oZd;^Qg3phGrP-}{K(hM)PWX}>a z#qEQWhJ~{6uunf^+HdVMLPM>FLyfTs6tzqe@KIN}EWWs-%WSiO74@F(V1WZGm&>s= zLkugiwFW%6D}5#(WVozc>yFz z=2A6Ur;7QgjdDy@aX!%9-8p)GYeA$`Nn_aDWVqg(iVB-~lysL9n_RH@01n3rZ8D~M zdxmoIdY#?)dKDjg`W)~zeOEGw0qp`=Kz)!-k1A)XSvQW~sK6soz;up<{!3~OipL>7 zYJJ*4)Mz|AuqCxxd}*K<2i2tb=6>W*Ykxx&R#r8YNr4KE(fy zfyIB5uaaU54u={oH)C4<_HX#THM7YcEnt%l@=mg4lSljgG~2j>FFFv?YV~}^tn!{b z9whr+Y!!F8)e`p7qJ3H3Ef=R(N5!lfs9lns0q;M4%JVYPBSI+m60tmtAQr}AN3gT? zN7vPXPgyySDJ@r;!8}A&?3-xY%RP9g(Np;Q%gZc1Y3*o!jKY0A8y;D(a z__)N>e#(4C5Qg%pnN_um*1B4%7@iv;1oV;5_m1Fy&A8Xp!nL~(gDd*v9U2FzR8rgPO;F@y;Wo`rrYv&f8(5pLaX#Pjwlc1MgrU&SrdxF z0FpH)M8=G@RT)gQ4fM?P91`z}dk3PxFkG^CMcG%?X-%53nB!q(C!k@-IJ+s-iIc*> zNG;q-g{yvz;55_{$hq{>$w|UAWj!RK6RmAg{IQ1!fT*MhE4@6PDIf)rnx*d5RZxGM zqwNc)Qd;1qkxwENCbP)gP%*VC``CK*1OKxE^sM^^S{Pll@#&NYrcz3f#|v=`Zq%}F z<8ek}V(8a-berSm#ubgp7>XuPNbWMo8td>oQq>lc)Vsy3ocK#BPP za&D>q9~OQe{{#7c9plBzn?OAAGHy5PhBn8RN0$n*vUE6ar7q4?d8TP?d_*s!mpOJ3 zkf!P!A2v}ySJ?4cn*H0>&~Xk2Um=K+J+_;NKJGa&H58gL< znV;tne_YO>*i0b7uH=t&(uz_d7~yNKQJ zhhJUSGMpG4Y5W+jC=zDTGrytBr$W3jg9V|U=i|^BjUOj3p9%mi?VZ2-$W-^$>D^fa zgHcBCL1Yb~xdRqJuqd(HIKh>SQBt-7_Y-|?Jk9tM@$)AQMO+(|x^{6P%c-nN&9PJn zw%>6XlRTv^cd8bqzXwT_B3IF3wnGs?8(?s7Fb$@V07dmwk$?%W^c_7IG;46mJ}zYv zWNTFCbl{RFwY@fBk>sGUX_#D1%k1Bw4Ciq(4tCqHvI*;Ae$t;Fb9V4!Nj_cD4dAJF zz8t8SgCU`1j&b~+Qd)?~D2P!B;=PkQ(pb6bWbYw1<>%H`8!j&wFvcVl8ns-SIp&=_ zotMps!$>TjfeRipql};Pc`jo6P5RW|jx2xJvblNGde7hz+jih*^y7fOe&o#3C{W=O zhC3DQRyAC_oKJBfPi=AEJ`-5Jo^aisUOZycvQAL3)Oz-H{?Y&pm{~tma$h(qBWl8- zLMN?Y?=K_b9UPTuIX*^DFPC6=m~FX54fM6Qnu?u%=5_53Fa6S+hYM%{{`x6i8g5xU zQ!`(vd}Hzc+h`ilIzf26jo>$5d_2_lT+50{r8Z(n-o|AZLNTPkYl?BZsfY?(9^bU> zdxD0n==}nq(}oJ!L~X>NW(=xoz?oPjh>N7g`At?vlTH>y2=%w`-msNBhRt$|;-?UF zG;h?#$Z6t*@>i9jAF=kfO|70)*D3xIPBAwz_{_q9?Os3*F7K*J>~pbrB~hw9lX+z+Nf-pAKgt71}@hORGQQDooV#2%`chS(|-9%@wA zG=b*BEMJnw(3aW{F+dN{6Gv4S_L@GKg0`1eS#G?}e?u{z9ae1nT<7Pn*yE5G#SQ$C z0#(gqv#r)swATAbIOh3ePSy23np`i_Z8#}Y8cjWKES}3{QwqQg4%E)9emo8`rrlcDD`^Hc#_P zg)RozVAEIOhr|U`NafLKGfGz*)e@|x9-NdlL$yj#X|S^P9nxuF;-`d{xza}SJ@{va zPX#C4jI$-mO}DH=5L@|vY!f?hbR2V4Xc@o0TZvMUxcm_o<@-P;bWGT1LLkHh5XRaHK~(|rNBdeJ(*sco<14VljDjGv1O-_qyj z6rNQiBeuju!9;8g*(tR%-r z5HN?9gu^bsId~#4VIqh&-4` zQXcPGpv(yrLV1G25=*hGTt1eJk$*GrV_cV3pp4%Y>V*Kxqopm?b@-m;7)~6aSJYf| zZ59Tidn>d3D81h$EJ8FdHN96Mq`GSSSdYwjQJ-cY@5s~a!~_u+7t3um=tw2L0s2@> zGKY6k9#&vB^+gMDjq&hn(e1pnzmDnQ;b2+8yw-QPPrSL1LVFCuArV=H9?D}eg8uqH z_88XQivI4jNp~12a9?tAGR)|4)?N+7Sie;$j$hjbHQCU;Ep2N5eJ%_`@QqzWDXH9d zRMNFjX+-0D5bgSl;NXz^Sd7C;9C)@tC-kaAWpq_lyN`r=V|O;sHRDmL+)J1GJ67Ym zQ!s`U%oqC`aCK_)D7SH{3_apEh8K8v9O|*ZVf{{T(}#K8iGhHPw!C4xbIk-0BbCNuPB`ez>( z-|2Fz<7CHy_&#V{q*j!?D5}?Kuule(PScGyTT0Gu&8s1Zfj_K)|J60EWYqXKRI2OY zyMP=H7$?`+aVkO(L1K$lZp53>go1L_lFW;HnXg)0G#bvvjJNLIdCCYm zQ0>d+$43TzCqVu&xJ@hLJ*5S9=fIKA0hrE4fZ#{~8u>LwkHc z^>Cfjs;{29qEMg)@5(ERQOe=FD`>t8UoKsRY|@k(>HP=*ai?Ux8|j0;Ri3%5RSZcT zKe`gCBnd3^!1uQp?dDwH3Vmw%93|yY?E)a0N!plk*9ZcC>tkiZD9{aKNqu+#t$iGC zc{-xwe&(S&&tv@)edtTy?rE4U6h3wf$4r_7)3cE=kY}6I+st4xwi%lX4zrHEFqB+R z%+M;$h=+9D_WAJ|s11&)3&Rsn#Geebvh>*yoc2F-wsz^M!0SRi-(A8vBWBPfFp>EX z+&8nFGE#q1?jz8$^E%!>YwF+_vu)xG$F$@fWuFECL|;3}K&o`Bf9w(xw+nDo;vc+v zzusaUbpWrilRR4N(7a?cF!Y`?R{b@Ij#+#wDDM14g#mh6;FLR%Jh@tNzr zG^WoQwdR+NADFV5!>oTO)76GmAIOvADhgsAPVPJ6ho}=IihX@UiEC$)PZ|1y<|PKj z#@N=L1C4KgF*t78EoPn>RS3{+k3Sw)UIL;ntD?KjvU8V5*xmRslxDm84NHER(HOY~ zvA0#8JDXX2bEo61w``GdYDi!PztKU4#`(pwnONLc*l4X;C8AE5XVhoeX|1fYQtmLm zjS<)T;>FB!`&RTa(SitN##e@E}56%RDXNaWssF@8n`R6 zv)V9SZRo@o#p3bcjm-RX>T?;RG}@)wS37VuW439T7UqP!s1I?N_d`^i9FoHWNCi1w z-U{2?yYv%xU5UbaOEe`%GMgt0(fuRwFmgW%{~En}NQVp&+A(!(nAFIqL4&e!jo z7H9Z6j|@tFA#2pNadxSO9_W7Ru-rTy64R&W*1Yd~%_tXkiXk3poW;>j5u|bY4)P55 zYX5A)A}FBP`c?KlieU{unx1rO9phKn%J?9HasDR-l~v^e_m2*t2S|}o`y^Ku*&-&f z$}(AY4V1epBB7QylRQK=2m7UMjon2U&aR~Q zbKsBGm{lp#(fp3ioAB4#n@_(kKyZCFM=RQOY`zJ$Uk`Ji#UEmfsIz5JTdwRjL7KY} zsO|eUvP%KJ6`4&P0B7;4Q&#SqHDx&yaBQp5j)6?9(%2HN>lR=k_Ier-5z+Z1N4%Ml za4np;$#c{#L%XFM=8!E&&9vq~Wc8iW6g3-x>oZWXan7Y+W59d3dV$W>c2v@-CgQ7v z3fX)22+EhrudHzKavyS&Si;WEym>&tpS{+C;@x-(LrQ6@B3=wul0jvL11pjxOrsR zdT99t>vh>!q~Lk*6WV+Mq(cHQ8x_JkAcj#=cw!@$DF)~gv#1GUef3V)sl@RM?OQ;! zUik<*A+OY&H68;Sq(m4(5!17;W@s+=Q3z*ba9zzyBju6rL&p5O)QG`dHe+G``P{_G zGqFxqPwFUK#B8my;?7_luPi-o(AT?&cwA~d6$LU`{o~D+3&PfJkdFU$yY8^k#AtOj z#p0#HR0Pc!R4I}<(q?L2{T0jkmvtwRbw@{q;1eI{40oYk@p31;H6p$5KC8g5ii?{^ z+`&1t+&O;vxU23j!U73gp=5=A)u?P`f8Dt=f!WLVT{z^*|9ZpHYqUNk&0Mv1I_`F;8GUe?9mlzZ?5DcZ+E+QB|IBw9rhRtKd;KS!PwP6YL!9+@+;H!CySQfn z+^J;&o%%q0JfzB@)ii!BU@nz9mR2<41Vk)_=wUgb%vouuJjHN9vv_7`s0(uv0EqRr zWP2GM{Q9ZE{2f$r_QqkgLmL6mzjNxp}-i4T|R?R#M2TCWww;LVA$lpfxPE& zt!Zp<1-|r-FP~SD5!+!MS(aCm%xY;^nG&r^8;UDhyk$9Cef-SsS(i~nUTpbCe8XTh z=J(Gv`5wzJF*T4MQwYXM{%NnJq>^F@J&U6CuOqZXwT!WOf0O^&;;}CK%%Nng&?N91 z?PFkhY-~p7q<_@z7T<=pexEj|c zjbNqXY=J|@RnmX8cE-nww7|7^OXw-}*O9>4kT_5vPo=WP2XLpzP%7o2-pckFA(nrm z{+)~VDL9LM(uFLwtVCo&InI52z_9PLUp;DrYisxTl!LcyR%4~)d_Rsucy$441Kzh& z$BOTaMHthJWkwUa8Rf5TI0kmSH%iw2@<-ZdJqTJDzSIbVv5Bvncq$k5-=@0T z!?>ETfTvw!v2Yed^t9{~&1$O3N zbX{Y;SK==#7A7f`bC$Eq7ZR5O4eoR3oXlq(O3?fiSIkAu{lCJo_nEsb3>qkNu*FM3DvvJ z!GRvESt*-e4VG^c+jMZ)&O>*qm%mAlzMaX9`np&qMdU;w^uK%)U7zeL!geS#2W;e`eAHOr$g>% zO|SapXIXk_uZuqj?}xr^vt@Q`Q)Uqsb4pN9iMc`nNpSyn|H}C2G}xD`uj$rmHrG4U zmJjM_*&CR2G%jZ57`XzZyWW$y*Rti{<)b<5YR!w82YSDc5L-6c$);y{-5qhO>9+uy zz-kedt)kVuRH-1Q#f)l>T$NZSRD=}C(P|KoeGf{R6({Z}50hG2Zuo{Qe$0QO&^Dn+fV{|%~_f?*F z`=#9iyX-MfN@`hA^fEcKY@JUNm+hkVJWE_o8oDU+#Zm=gJHZJqUaM{OOKwhotUOi>RdTGK7}o9OALGg{3={7s51BxueRduLuk<-z&W+p&OKx$EK*m z)*z$t)?UM?N&a)(8!9&7j^B~oB5_4|0vw#ic^VFHSfU2DX)A2>R(U%|^b|m;*ywp3 z+U#y;+KA4YgoQEMdbqpZxT?Sdux4xY5}j#@H|votwQ&(<(O@)h4SsAn97^sv@;~jyk zj~zW?lTl(9YAT#6Pfv(Z2D6?V%!lCQ5s~X=^5qW}s}Yo~T8Kgt?Eh#Rv5lgIYv6>~ z!u;{54nRXoj3$yBCqLJZOSvVBva~#AH^rhYOsk2p{HAjz2e6C}KXi?B@v>(<03Y~ucNAf129RuAJ%QM8XpaS;5 z;FeVZUm5r{^=e&&&!Qw+moTMFo#*H`CTZgDN9<+*DLMe-W%W@MUpjiR>ZSVKFbS zLhAOS>_c(CqU;w`PFwNkxjz2ry*I3UDx}D51@mv;eEV7eeQ2-&hk4Ohw#p z#b>h3_2UH`GA^B&-;k?TF7z1QIaKI%pqSy3vtom*>HsP$tMQjR$YZCtlYbGKxwy$E zF+JqCxaqa1xp~G&P~Xza;Ds?0ANoHQ($dmbd??y|&1e?`p)C}|g#dRfZF#$_bM3NK zs<+TJ>oNo2(h9?*>EVOA*4!pQfEBK7Y$l7Gc$+N~EqBTSF|F8<>zB$1rC)=lo$Sk~DdrNE2eZeX6L9pwY*<-@r(W zhYZlH1it-!;iZ}VNqqt;WDh=l1YijscLO59HA}W4nDr^Z zD*DI<1&@7M|7aV~X|~L^(_5m}r7ELdvQ#8CpW0H#g_?vkozDuX4E+;gZ?-ICVjsS# zv0yU6*;ICG^@kNUoYT=TT#Aj9a**bev+?_FBA?4FN8-M4nKjB-oHC3~{(KdlD3coP zo`ZNO!ZS8&w^O0JJwai22{DV`*(ss7_A6wxWTYSFPB~nC0kiD__%DJu(es4PUxc)Q zX1%G3jprcFKbbG>(@fE}u>X}j{J(SS{rlbj^AP|4-WUCMw>Q78;&U)jsFIhkQb?{K z3Zoby!i{lU=7KW&#qTJ21mAKsat$`|hjIl##&>N+MsK!cirOVVMd`^=IfI0#AvxG@ zp;##|B)adXCnY%HW>fa^sTRPDFMW2bGlQQ(?bE`g7&aVr|2Xz3LoDdp5lI0zY;xp&X zHANjhs*-wmxp};98qyqgX2(u$4JXAjcNVs3#Ilg$X_T?C4zV)A@)%K#{K9wf!=ISG zCDiv4fJh5b3PTE#qCk)ga&yPY!1;o-02HrLDxXj00?(d_{#qOHcdj#KO!6rlIFMZz zd7~ZzwN6m;YhRSWAuz4e(>NZ;havlw_LSWwT-Z&EMpJjq-pVKR=2Pk}iXV7}izj^V zIiQ2TcgB4CSY&ZmkLVcXou%50x6$;9&AC>R&9`~I~DE1 z4F~s&ERy`^Gd^>gg;c}-f`Bs;W=#zY5Y9;CYF_hE;uc(MM8icS07wz9^9Xen!f ziRMAUqf*LBdaN%nho$cQ$0DxU_Vi%(n_c@^9ec{?KWFiO5%_-|f&Z6cN^<9Wi}M%3 z6ZtO!!Qf2hKXD&#C7{$TO%cYnw*MW!)0jAwZa`)kVrP~iY#g=e&EAiuS-)PZ^de*c z^FZ&R71Sf&&@`scsc$6Nlm;Qu8ee z1jLZX*4-Ly+qq!b_r-9WFpDA`ly$zO)6pbG9U-q8;b95qpf_J1(@0}Pwlzm_QxO1! zI{7EBIICH+(b_68D#*%G+r)#OrB~kE--C7;m190$fRtl0U&sDmP5e3u0g%P|g6vR_ zAkYMLbAx$uRHYc%UzpZu=_bX1SvvicKS%anq#=a3u$Duug$!UqE@EoP8jA}Jh;oj+ zVW|ep)i=DJ9FcKAfRbGO#)P6pYdK9tQ3^l?YpUC>a6|AXd&WeBX5GSSP*t9U`N{Vs zwv?0a#H7)?h&4;GFEtc_84XGJzKaDP0u64GXhu1C#c)f$b8semQF2elrbbWK`@HC) zu<%51uCcTN?s`0@6L}Nxy*juXD8gwELs(gCkT%j^bcFFcP=X+dZCK|S?o=Trw%R6= z)ZcP;T~vim;hvMA&prqzQR?drJ`g#@#8HQZ=nG}*9++r^=Q3kP-z)S4|X zmjL*}fGP|uD-ViW3*D|E5*=1u!Lmor$mLOi9wtATcP|W{1G_Pa#6Hd zvz)pueM(;XUVpf&P6}8J7eBC0F7)n&NU+z36$LN;**n|b9TNC0R`lj}2Kw9>Frloy zm}~f=HO=C9|IWu@W&Hy>lX>}KuWfunYL%UF(wNR6mNt?Ftp^-eDg2k&-G}4vJ9Niy z7uk>I)vE%{hAzJ^hor(zuC_0NNvP!CEf9e(|L|4bQ46Sb@3LNK8?w6KyfHl{bLt|E zX?AzQa1EZI*gIv~6BGC?lk|__xc}7tnNuV>hAlMW!|5{>7Vy6qL}!- zM~OiTzYTj2#{M8#UFv_Q(v%=M>0KxP=fygUx`G3r^j~6Q*Z7Z%Ni?@Tl)s#py8nTh zUGG1Ka{pxWO{yx2zumsT7C%V5y2HCF%==S3vZ=l$-u=v`{h@jFH}v<&O7Bpt>wO^A z+QyUCUxY%z=jHlGj}MaBzcWQf7S)FXT<@c)JVyL}K^|sQpJ(?jE5B2j{zV`J_O6}( zBgjeT7tg>CGvptf-amCnd{X(RzyJS(ANe0+mw?wi8yC$o{?p&Dja%X+Av_BoS_J>; zueXHXub&T%s?Rf4zePU8n%#_0tuOsW;7~ut`%nJFce9?ZM(*JsCenT(kNnf$f5h+~{{AzDAM9MOl%M_f z{+;uG=loxs|BLf~*Y=lO^pCaj-?jbUeEx4f|921fKlZ`@#XVfn)Puoy(&e8wcpnPt zvuL_uw-g-Xn@75YR2k$YSZgx(3OG6kWFupJfp8}Yb1_=; z9KG`&ep;q*IDFi zX;HnjH_BxD+yBGfTLs1OhHsmAaG1eeXK(_81P`tQ!5spFGe~d=B)Hq4gS)#sK?Zl% z2p%*@NFb2>mj8FOy9ZmfRl8^3VORH2S66qx_j^6p{bQBM>?6tJ+lJN8-;*u>*eua~ zHd^ES^TBzbQCGj?uvb?mPBzEHcqQ$Xc?ZmfNOk#Ocu?=jhUTvC>E-`Uo5%jo;m!Yb zGkZ+PyLN?TgLSq*>sq6HD3(=9SlThu=RvQ0!gXDDhdG1xZw>0X9Cm7*xpt2&(t5U? zVpuKb5s<%wmMtwWUiix%hb=oaNworpJx&n^9Kgnceh>qDr-VsA|5^y8sF*%~`y`8+ zxdyQ7jbjLcqzIv7SqW*-Tf7XjA$5_ZdBZ9->Ji-(|G2s+o^nHChnsDO0r{2fN-kIv8LW>Gb0Rtbk^C|LhM=s{{-Xf14N*=f{XU~BGFKl}Tt zLpnI)-zaj`;$BO{RHWZ@RBbDq&TyqIhZgoX#U$AvJOU)D!{@ohuZ2Qgu>MB=BOLd5 zC|E?joZkMc#%+a9js28~HG*LkrVb`R7O?s!3Z@qS)8naRU;;LU!O0o5v&z{H(Ch!+pO147i7wNSCcM*n%BG}%%i4)k_Y!yo{odubI5G(sZR&Chkdi+up5^*yW%B0M zRx=QRp=H&8ud1w30G5M#s9Zb_uM9sg_v=tzLI8my$i%gTfB4E=>Ico&`P;Kb3EC|9 z$;&;2Nq(mBxVL`NnY!wgWw*F3F+I&}uPE8Z-+pwoyBm+#69K6eTHlyH8d}?$Y0`IW4~wj5n6-(*Z!`@te_$A45D2f1 zk)eAJw)cFI6tf@iu?|*;8qcX^KISUSyE8z-0~s7)De_saq28%KRj+Hvc%oRh*k4Px zNn%H#y(YrW4}@!po-1$1lux=knsJ%x=l>|F&Dg?w&CFY9%om1)Q^^y;f+9%0ekIK7 z38tEpL;VVbs-VU+p@J~DdD|G&DpUsoS&Bs>{^t}j^aw0|EFxt)y~-)TlUY-)TdjUx zq?uN??ycLt%99Y^PTCDXfZ6*EFcYIt-9Fhj3n*G z(exiyT1Uk*%m(fZI}O)R>PsZM>*%?CYAEK{FWGr&W-FXYKQsq!;s2q%5VjmH1y)XH zrue0e6T>o92-tuu2S>R67-ER*N12oT*Vtq;%d8?o%z zmmOdSwm$nOj`ZiuCl5)G`!-S05vp)GMW)pZOxWPMBz4BCWQr0$N&(xH;J1^eW>k67 zQ_B(dwacefG`CAo96hj_ONc-=y|U2L)t+r*7J@JYzGPB>=0xV8zZXNobkcul@d}L~ zqWbwOV14avi@T4hRNsc8zu4`+mjBRH+Ga?yF8|6b2?4$~3XuUGwOmC37!EI?XsUAQ zO%f3;IP!$O?;!82S!Tu^S&&Eg;w#tLn-uSb#Ud-G8}j3^(7lc3W>c8M0T=~-t0zs7 zWs(fMN&H9Ow3cvY%!H`EA3pK^Snj{FtxZ3Prn5!h&FI%?ur@8d%tWU=F~G&?@4wL* z(a6`UH|2P&+nC|X$_e()zJ}(GCwyjW$QaD#GeNS&l+fR0Q zQ_x-Hl`SfWJV77>KT{z|Nk|k2`-5IR@cK=BSdL%9z|RJiu|VwCDbFsTlS5j`6*t~2 z;a71>qs9jW$qiNzJwqPh4+xhm!+Olmk^OO;XOyA6oW9D3MzFpWyVTfa&4aQkY2rPi z*c#+ZV>u)pIxVKfa#vaYTnCCX+LCX_tISW@8v z8g^4lEH^;L&Cp;rd;ElxNi7tF{WfeK3Lfk-$4qpGrFy<}iJB*^r60{$eYwOE0{_tx z#=JWq#CTI00F5@NQ^hS`;FcIlu#tRN8544=-o!Lw%-K!)s54Na=TaQ=YqE2~B}vcO zH1j7&$8Du^$5S~oUAly1-j2(a&borClk%`4O9zuGab1$<9}^c3n{5jfK1PA)=o&fD zK+zEf#4(YVt{kv8*vAP;l1RgSQq-+}Lx%n@kmb8pjRS$-{te z^z1_y?Bz>MoxX9bB>s#Ouj+t^ZWyL6REl#uknG@EM+vI%V5Q($K_^6dv1oL(!n9wQ zN=CX-!9rXBx{IK?tHw{ACIOneI;=LL>>(CD;ksa~SeNs0j0G8!Ot+a5MhX`yCoB0Q zcxZg+0J;WqAp=qJq0YPjkX$MjX(3@0%l=u#x9g9RstCZ5#y<^cfXWf`I9# zrKpIOAaFo*3GppyOfEYtXkB~c!+^^;`EAm}8U6Q~@08niS!s7PKG|q1T7^qzcdc=a zaS&0P1@EDfC8Uz2fmrI-H0pzj&enGt1b_=Yo2E1c^^M$r!qast&AQ^MF~)Yp=QeRL z{ZB;e=z! z9yD*8q=NM4#lgszx=jq&PEULJdv&)y51Ea_SSWo~{HPrQY=Mtv!gJ(*!8WJp7YXkg zV;$7w-gT9L*@ z7nVq(d*LdHDWz0-kC&H12X8x%RH`0EgL8 zbTR2&Vx*#6yI=4)0G7>J8|56SSV!#^E^+jY8EkjJXtAqxBPeT(FXVU60h z7BcoGeZpM%=tH%-ecGy0ZhO`XBj>?mvnm9oSoI`AiFx=ec8~3FE)-~9uc@uLS*(`E z&_A>|aoM&uIQr8puQB@39Cil0QsskS9aNUi;;-dzk(1D-#vl|z)jE)Vju z_7bLE1!WVrd^wahIQV6yu~My=7G9qRGhc7~bT1Ek&v&rf(de9L;%q9V|pKn)!DH z4x6V=Osx{YY`rq8YJ$>b3Udf&#SMfgR=13trK*@7i@j=b>x@A&+aLBOepafTF+0R+ zJlPw1U#n>{!rHD$E2h`g&}OD6vudMPy7lPZ2WNIL`fNyiqh?dgt}}&9GFv)b3!P_B z=Dun~`q0no=O4pP_K}20)h4g*m;4N~v&q~lMXqRirY8sq@(%`6dV)E2#hx{nLm{$n zVjft3j6gRQC?!3lf0+cD6mh(GUSGtT110FpY79WElis;WO>ukuNC!$20+O~gz#$&e zhKB|_2C9ai7?mNZd|nHRH_>398ML+LKbKL3zQEjnjGuNcN%WABmE@seVvn0jwE@$; zl&W}4lyZ1=qV0O?vVQ;t0Y4M>&%DxoulZ+!bgq!cS42*u496ANS;0RiCF;9|RZE&A zT1Ddo55mZLTQ#f{$7iVnHxl<>4Y_^^_`vurCXp{*EoywNTDNkriMvu}CTHU!;UvNN z9HN&@QQ}&pqh8pxYSZ0cs)_3{4R-0#PZt1}hn?|E|LSMqi z)K(V*otY&2lfqj@I#1t1MVQi}#sbVP1d!v;CoK&c@i7MN^RBz??w??ui8|+o?uKxw zKg+F3{_ZFIq@x2>nh;^@8T{hb^pL&s`gWIpkE>2HPIp8n0a%*LOk;CGY50(deDw_EWrOBjkop+H_u zW~Tss*HAL5!@w;bngAnO2bsI1UkH0(qA@tbcE2(E} zU^LOA)Yhoukf}uoFWjXA+)qi;>};zfA|t1q>!z=&aH!?u+Ls9FT)yh6r!vscIxx0A zZTskX%BTKeok}j|Qpq|-$c#?pjDRtB7Jo(lr4WW*L>dj?sAtE>H+n7ecZ6l79Zw){ zc^quF2sX4Q9~d+P9U@_r4GW85W&?1BArn%}(_&bhCmibJ2+&I2=hgWmvt!REQW!Zd z#SlsAVly}p`Ot|!-Kw6r2}ja|G4~}_g&7jq{FD6jR!XdrQr6W#n?#RHMMT)htrfz< zDVm>+e=_Mdp`*Q$M(?=u?B@8DQt1wV5}^Vy(5=!`#K!nQeY-lYdy)hnR>G=Y`l*6~ zP4ncUFKDYDPK^$#YGA0+pk5DMd2l2v~W0Bt!f5@axt`iaf z4+=$-cOhZ?pJD2%Rxo=>UqjbJFa8q9$C3&T5ateXId<(9-XB1<*r?kaP?>7 zvMY~#dpXGTOJ}{i*;??op&VTo!BXofR>g>_D=XP>h7&Ib&CFBkcw&0v?;a13vVnb< z@uX?E&#__DwtQwihu1B=?~%myywo_o$Gp_P9go}ji!pUQOl**VfFMLy4@IalGYP#0 z002TluRCv#vuHZDIjMTc7WOTx4Y$n0_$2P{e@$)1?Js9rJGmYgx53C?frO{lA|&?l zOzBLQGJcpDwts3H@L2d}u>XZa`|@42p73yq+2QJ(a_tnf(idf?(j<+I@pdJ;y~B80 zceOHqZQFg%va>FV&oIS|br|F(rfWiE9&Q3+BQTNk5lRJ8qi1umAor2TS*fW)CL;5P zfa~D>KY1Viy)OKee0(oW<|AWw*1HG*7-kbc@z!d5Ju093gZ=1rr&zM%)=N>f%~g|O^*Pzb=haG}^!$Rq zkThfY9}~-5PpMC@msM{DUW4YNLH1n=W#{a$Pj98t3XXkuGF)TJ9F#%zM!A#*N0FmZss$TS?_lguzt<$@WvxenSZ2*R(nRI)R?RxrVs<@w z0)N7t_O3=hsb6c@=CWryrQp#=D>o8=q4W@&VlWwtAI|&qy1;M~L)5xgj4dc+IHIpd zin^S?D}*z#E`VmZkJW>{oA`b6JA-6*RR%6Fm18zZyA~u%E=JxO)@_~pUXE3tml8!q z22{J%&a;hIs6y*9Rg25D7GUfVVCb3HMYdNd%}Ri)s6!7=DAwy)nadKsW3EMv8Wb+8 zWbT>n{LWrGINTDS7K_YxdyX&8DIR`lyo%)R+Cy|1kj+p?Tu;yT0#LJwtE{O|N!#*Q zHvQ5JYX=H~_)^OI+Y9v+NgM9Y@Em-{zBqWrHapKIr>37}y`ph2X%LlP_Wg1AUp#Y^ zU^S)v+ETxA>Ne4?Gl$sdOF?Z+=LUOQ@^^13BaZ8?Nr7ZC3dUJtf(6yH$}sOSmcA#X z%T&sW3DD*hF*IhjuT9`*Orm<;iqU7dn#acMEOMKeOOsVUqEf4II=`5c1(@W|8I}Z7 z_D3Fx17lbUIF9gHVIRP(UKI+gx*&SenFQ3oYe6aKn}1IKYclBn6+_F;sPQi&AnS3c z;v?tSVc2#1zl`Uc@$%m2CTTt6cj|v=<(78;uAB;|1iP*JTtAjSlX8y(6i=n?$CI5* zU(*)9UTCbmej4`r%~AAe3G?pu@6JHx$I(tmferP1-SKYU{~ks9f0*bo{y;Q>>%%d# zg-_g~cI+L|4qmK@iFI&wuz+VH|xw2a6Ezo-=4(ElCA#)7nP zK3XFtv7i(0f>m7-PdRi4d|}v=SJS*o7_wt;+HcHZ)(5}fuDm$GpR^x#~QgC7ulOk%aS;yKevpk^NjAQ)oZAx{!ndM zpV;}zFI%kmB{BWgt0~9jw9@btkxcF+A!|qP$TsSQTukd_z8E+@UVa=M58Ey620T;3 zg&(icJ$zyaR7UXWT?!t#x;`n{9`1Jx%>D3~h^i=D%51eeQv?3=&~UeCljF5H$!R;! zYvK28znHkeiyIQ}?=;w*y++51??YP04_f6=cwXy^N&dfD#NW@tN8#uFO1KQqHT znl~?F?wg+{e;xiq+kE!Cs7n((BeZvQPp=Bgoaju2_tG$Ci|&L%E}X|dz8+KVG@@J$OW$BiY)YLvf(nv`tds+)l259qI4 zfGJ_RTh&b6c6>MjB*V;xQ3Gz}bm>1^KhwO5U$!7=Sla|XNjml1&Roc}?@wTfBgY%}yQH}q+sUw_AXwy}st zk)0y`Crc%?L26dwsgh*|BO8&qqns0V=A3iEinPkRXI0ifo{bEtWKcsjpKxJhdiDd# z_S>#)r5b_IZep>gte{DL7QlY}=kZvI3csmw$J6wZl0^MRL;MrcBGcMIe`vn~+~5eL zk+%@wK`U>a8n$z?R0&GeIjq#nUzxwn-0~qcUKWV6EIB{vaF2Yy?G3-rsNu8FW^x4L zK}>5QL;QVrto~Rz-_UB!Rz>z5L-s7}JBEaW?57O2Cf6)XzE`n?XsUlBrpAjFW>qKX zLqd1DR*Q^G&adE4TYe@Cu5|A!cerG6wHV$N8VlOmtsfdN;ji4r=3*rPmN*)y=?Jl6 zS5|1KzFX`}bbVN#l+K)Z`fl5WrPmF9&qfkl_Kcb#ow}aJYYNaunu! zkWq;ATvI9L%E`;_t0K>StU1to9McCJQ=T={yGfkI>+X1r);gOd@tJL9J{Ml=uGL>W z%WM8ugG*sTzC;x3s2M>UI%iGJCAx+>pJrfvL#hiywd#H1*rM>dK{X>!Mk5xIN#2>> zJh)xVh?p$fC@})-!PKy_2Om|JXjP4u&fjWWjZIfZ#n2-ie4KUl*I9vi?vLr>wQ)IQbfGJTEYzP%Uz~hi+8tVBX6QqM7Bqq zfAn=x3*d{_Uh>NgCs8?T(px5Qjvgz{ToxLfRv8&dtbiyL-Ilx;LAf|k{w^c_>!HxW z9fto{vp2Xt51{)fD5uJ>TmTneSd0;iQqN+lP&k;A`}4t=BH|)q)>%#+pZj{lsD1}N znx`3tDDVw?pw5ovZW0tc3^!6VZ^~1Vdzu^MfA52mK9StL}(IKHjhSnUx7r@St z7PbBuuZGxP#4&!=D=r}AJQnq1Mw*7t1s`IPS;a1*6D778JT=N`^_r&Dli$8%#(M$W z`3=sBst}D{8F9U2J11GgaA9AFMJz!-N$#L4~(R*3jawY{%yh7pGP zj&;6z;`n9%T$>szldCeTxasJ&kVflM*-`J>#AfdZPK9X8@-Ci0RT;nt5%lQR!FBf5 z=)%2CQ=vje_G5-N+wxu(=g~Heg|lgJU9>i+R=?jkczC|)&to*84#VEXf9%C@>s%|& zSq^AhZT;NWtnD(|sT!*hjg`2Wl|baGlQ}4@G>_e;WbHkbRM(4|b*9G6=^kNy9IQ1{ zal2-edJEJKVw{M&u>y^ z3g+yfo?D=@4PxSjmgT!uE1}8US_UP5(@N+m1f-VVWhZIT11i9{^#<@`tymfy((f$1 zlvXS_8}p&bcg0I99vHLCYQc@f}@D8>1G69&RP8OTLEVC5(F%gqgKt?J2^6jT%`6SPO#ncy>2 zf4cu<*z$FSu4ix|hqY^9u78}TN?koIxk~h?|0RzTopbMO*BGU*0HTc}vH-I+Jy*V}kmIYW~CEOp0I(?&;RNjxGM27x6i_D*b+T@j zq+^9-Yj=bT0okpZ#{-Rb_Y|T@;W{=-Nz1V`HN+nbw9MWsSI zx3X{1OyG6DQYfR9`_3#YtphtF-tn21Ms`*q+K9eyeBEHC!y>T3oOBX61AY}k=fg#_ zi)qU5X`ENs2h3k!c@9>(ES*X3vqUwre1oC&6b#quy~=7xS9cbIMLtmm15K#V(@T z++ME5TjD;KnhQGYC-u|L?}tTDi`s}EDnueA3sr&d=5W@Ri5>aSFN=e^%68E z*8enzH+0pxH=L_4!2$rGl z0bF`IdnTqDLE2WFsemv7At;^uqQlHo)+;jNsvs9O+ts2B!#egZ zytuUB%Du0qjascgdun^jvwry2GQ^;C$My)WGfXNsx0sDTdd`0yD^ID5SI~+aOQlL zRj#%-3?Rb(ii5UvRl6*mPLrN-*^c;M7}0+j-nxr$>7OUIMxS-+0koqZ4cPAFg02zx@L zs)ce8tWtiae+}GzORyhLF7d4eI&tY3;OO92-?X1BS#zxw>c2XS$s$%*)PE$Ds=5@b z=s4pOZ*z4m4NMijAaXogGw2~ImmVGzve?jDc05AsHf%fZw_PLB7kBi~I2&xLjLnvv zDl(u}L=!fKiwi|fn5f@yh zS)#I?w?S|-k(z>pDGo-iia%hmPig8JR9zJjM?>IWF&NWtJu+uFmyY<5b7PqW%_~3H zasa+3MvpO>pbojv%-oE)LGkSKmM7necHCwfkKD{&D?wY(g-R}^wjw#+DRZYN}|m{I0*KT}Wl(!dHX z&TPQr>(+J_w@Q3Hi&I{)O-!*Y>0q@AVwD|86TrI5Ql&!J^P1gAbHFc+_F6Fu}J-&e*<2+29zBc%dCWm)O?;m0v&RbcuRsNj{h51@c2)wXIh9Wv}5aV)shG-7KBw z^-$`xVEN$^+fKr_@{_TYwxJ4T@Q>`V&CJ!hh*GSJ&jl^q)ZAY!PVTP4bM@Fpus)fh z;zE{o%%+{Gzhjr8;|F$zT ze-rvSP+%Dj)lDl(HSba;+F>pcuo=AIFIvG~Q5}_7wM0EZjyoc1TiI)&FMEQ&0(I;S zr^y7de*?T_@&g()jj-r=`hV}WT>5%J)03PFN#1x%)DRP3kc&JJT%vUE#DeZc5wbcg zz7r>Rl)kxylBPZ_K1az8i7wZm5e=17X^l#R(w9oS+kAaJx#>iwcuW$xFbTsRBW0g^ zTu*4VvI1`xiC^x;^#il_&%kK zWzBpob7_F+i9lVyFwJT0&VVr=rhF1GGVPon86kf<*f3h*g0$wh!0H{Y>PmURG3**K zZ_6jpvybak?$py{<>j1~BFL?X1{pFHqRB8cnKI(n#!5&|G5QUH@fiQS8QGqy&7qd! zD7Lhvc`?4Hj*CC~uE%u5#5{VB;!kTow?<1l8MROAn9*wciM9%+<)YRM2fB^Sp&h)c2L?7X++9LlrsA{!?%+_X*)Hto%9V+DMcG=#aFP1I4% zo{i)#u3NY_hhdvNtJC^CK)&SYVmIFc`3R7P>7QUcPI)qdf`KJjNHLJ7|u_th=v@BBU1GpRnFE{$WFi-O(-AdSfJ>y57xGtX6wH+%k0QZlj0NoIpS~ZMOhw-iz0Ii8VM<7xU)1wZMTG zPq>Q+Y-RD%5!-dmnAN-{rl>@nwzY0HwBtRA38~eV_Qa5Cn^MT)35s!DskUM*7};uD zXZH^N;riX{!+-=M=Y_Adox+GYST25|w{l-#dAgQ?$VIwQB; zxbmmu_nxK!gB9Lzr`j%K%la^@`=2YPY|(h0a5ki)V(&Ze7iqNgJ}qYed!;3Ydl}OY zcO8R&VW3xDKWFV}s0beQ#Zs(9#A;F>T~bAVQZF7FbI8KVqt7fKgE9@+b z1nMiE%6&&+OaEPkvtX`|fMO#Sgz?P)1A2vcJw4~ru8t_nZ4U3qNyGE_N_1=b)w1SP z=(}EQX4v_r_`1^b*6R1O6*Y`PCR%#rbOv>p11kN%)v{Qg(+FQA$DGkVFyqxHlkirx zL!sV&+RW=K^f%M5Syf)KIqVD6uKp<%4JWmVLQ@+(T^1xm)@kZ5Xvwn4p1w+3@jIMC z`|Py}RlwURZR>IEfKrT^?!dH-E#wzAS{W^;uw~y7A|)Ho3B(8Jq@=wN?>O9Ds=s4I6OtU+v5;?LSH%|@*@Dk= zU#=_)Tiv%-r|l(xF6qIIupd@hIUW*+yBv+;egv5*`reH@9Zaw&Dpu_lz+E#_*^NUa zzMU3jRG!Wr?QX8}S4N`&qZO79Q;hQtE>Ko~Y&*u9M z5gGA%Zmw@uH?HTPVggNAcLdf)UI?59|H3+Fh0HBgN>r+u3>tb{x?J)n=J)Gzm*mnf!Zq}=V#&vF zG@$%9$(j`b%{5xQ{^xRP<7f7x*o&=ET@80mb>%-a-EN5Cxn6P0tmpUnmbVeUFsylz z-G8qMK~2^rVK2Cn#G=%M%FvLp(;)c#VO=4d-pKTndkWZ^xeY42gnuQ%+O-vF41hfX-jqo1YvvnVna0b2;2b z<oL!^&T*D|CA(ZIgm4r0dJKj;@4gOP^_(@!UnTCC~Bg~4Qg52f0HXC z;&L9fm+Y%|(FDll;565{WZR=Id}&gEnU-^@PtYiGO+!2X zzGj1aRpqgxQobXbRGvsb56dEWdp)*kB4H!--O5Wd)~sEP0J`Yq*;@F_MF!n`aEzQ@Nvg&V=#)C!e)itT~)hzM9%@z&*ZA(pP5!Tqj9r_V!A;g;wUC zU7_~=KKG!YyZmGE2RVuu?MX%hy`~$2WC1s4sKZv79T&FEzDk7+v`g$ zwv$EgSsV%*7V3W3i?_i|Hk)=8Ky2sw<5FfbjJTEQ)qB)yguNGUWDWPf$ry5#byZ_hQhhu#o5g7?01ZHi4j&gqAusjz)gCx}Kq{zrCzq zPBsd}{x`IM@{kPa*-SC=Dl<+qXx}(pcyN8Ht=FncT=>%;$7>yiRi|SuSmtb=G3H(< zHu*99G_GB@BgD8mU|oKqY@PRZ;4GFe?iT=NC=^^roSF6H>fEBO4NhCW@fmduL_^Ui z>H>F7qPr>dyA9=5_LGwoR3cY*w> zIjFj-7bTK^A%5(%>O{uiOy+RW{PT)aGPkoND9z%w7@#sGV_0d*F$s&;Fv5SMBmsXT zRi0AsL%Rw!Ev*gwdBHBHCFhkHo%3e2vdm>``{Vm11g%VaTkVKT;cSHf@N*s7bGzN=PWWKTD3GhhZ>{h3ra104QF#8UxB(2yWc39|6)+o!o6qW}6u2UfzZIz>QQFXK%VjIs z1f8P%b~DhejdO87;PgM6?Hao>Ov)bGzC1EDpoW+}g7P-`08$3#jAA`Z6PHEh`c)z~ zR|f?%ba;LROEV)nr(+@2V&9aL7DR4Y+$xkn^{8O-k+#e`p_d_hGXUe9XmqxL&DI46 z-H@}bs3rIy)}O&fPI%>Iqmagh4kVkpNxD7f>lg+fNyaE8`|Pkr8f!BHD=(F0&JIZN z6i3P){aD@Y+No*f-YY@A>OuL?;*DP1YR>nl(<@X<~;y_A$o^@lOY!@oKogiN6=l zj66s&xa z3GvQ?4*VUu&~r6&T2)dyK1%A^x=t;G(y>I4-pw5LX3QtOx?L>&$!y8#i%>mnm_=1v zJb{Ta>N0MsEp-&S#$oQWhklAIT%^J*u~Nx4FZ-00l_9%yD8?wnJez<_wYOSs?&^(d zMmqk4P0C_yUJ5ZB=}jsUHoPj)XHE*oH^Mo@u|>r)3Wpse_<>{61ERFI%Q%FYTJeE9 z-SO&WsRz5WPO{KF9H@Np9ElcV$0KTNA~2RAz}mA zTQF7R>+;o?zUC} z)H|vD54b44&7|4rWH;Ni7&$Al^yZyGhbq@;+rYs=Y}n|xdCmt5*kDUQS4x`Pa(DUf zy0)<<=A1_S62pp_7YG+lQFU3A7I_iiE#DhMdJ~7dVbSf0t**5Bp<41zGV5gVmYkkt z6`h16$jT&ihPr8_!N}INtJ*c6UolMk&{_9j)Z2zOF8bhPv!Hcz-h7^{&16!_>LHsp zQ@bp^C7Y}~z_q;_C>6Ek>dr@0>ehSZiD_oX8OCUPv!u~`+O4SK?YX)6v99 z#6Xu5RnIWxI#G(w4aMrBAx3-URQ2BXFg`Duqvgc!3xf!L%oay`KXiWdQ%+1{FcTG> zr<)y5soV$uUYZ56FfGE+F(xbzO4_Rc(e<2-?&|_wUtqwGw`8imq8&HCY3M*%!Hk=0 z6DDzU2aRU-kj;Zm@Q+b^?GmDdZ8;SjyX8!IZ!Rt>Y~(_*5yy0n32CX2^mn%>{QSP( zx}Fr<-{ZQ}CzaQ=oP^+pOQCbP(X%`m$CV@&+}ttfenBgeu#)MQyldT$PA?cpK#IV- zY$cugA(&M+*1xjP=(>5j>_63vN$`+O&t!qRk=24o5lB~l@KR$&O%;JBgotZ_!uAnn zkxoL6SkZR%c{J-c(+7RSEoz>8mMJzlhJ{7B--YR7-!o5DU(32IxU}7`>y%!PpR7D-sw!S`hB_xW^L+P@?h7vi)FsZD9nxrh z`y0I?)xR3)y5+L+BG}A+sYk9-M$~8I{CYLQtvju4J*k@-_T3QvaG>(ZN9O+JprRlv zdyi(6gpt51l1m;8wTX(hkx6zc>p3+xOA@T4sxS{IYdTAGGFyiGq)W39cC`h?nW+Z< z?5MxM3z&s#7|n}cOQE1%DAb!7=$rX_7!1tuBq&J6)HW_|Zxf5Wzb}vhgJoV13C=)2 zwvq|Ho_%J#^8UZ##8%2RbhRU%shywc2u8ctU#HpJ3oGT zMX~VkA6j?`L&fGd%oe{d|DiemsP`I_>i9eV1jVLMIoRWbZh^eh_53#n>=pW9 zc5DvkyLFQ4AY_bI*U+n4f=k4*Hs&wQt*v%U{VTv9#=doxnjMg-}8v(?o#rP8QyRdng_;>~sE?2-l{5HR`>rLoIa8O%#isFB+`PENTRT znSbN@$Yq6Qc)@>*Y`KUSfsTK^e}$d3w9=W*O&!4P?B2x+U{^g_@DqO$BtC?l|Jrrr zsCL7)dp_v78(KFAfjfoI{`#!u#_M%hF{1FvqIM0bo3g71qtrtGvB-$p5}eGDGW19) zvfwBDM*hcDJYxGTft&Q;v%xFAU^DAdAFoHDVZ{dfqD9Wg*54#v$IdoEC$`bu#c2a_ zGGwdvkwH-yl0fiS#(jL%MAQFJMTo1pY4_OO2hST>9oOwNxCYT0*+_tUzVX!C^Ar+Q=&06)4+E_G## zm#0h;HOSEDxde!?wWfdNB4CzC)vVVw6|p-${|^j?aQfyFo2#n-)blFzBdzXX{-5O` z{Lr0Z2vM^%KE+73H6OCjC6?^IwG)(h3TxuXln9qfdRrrT1+BDf3*LWVP?s8U3KBk^`{a((! z*xiP!rZ2rw!&gNg)HFA#teUcW-baLzkq9eu`RlfvXZ2XOD!yIeC5V|0>c8UUTBLC* zV<+uWTeUH!I~Garn)4UfC{&|12dV+)v3^uNyDV_z!IQ_C9Rt`_^mMn?pI2r^haD^Gr!f?l`PdIUB`v z3z%{q=Tew4C_vN39j?M;zZ;HKDVf%2C(9pF1BoR=1*%R6xj{AM0b9!$s(XL^K zEz4=(DSRs2Ss_*hI8Y$7n3!qr_{^N`TL@u?F~&t1SEV^S!V-tgpFcj4^rp$^&dNW-7?0*x} zRYup^X%6DdpHk5}Uyqh??}^oPc**K5W%u3MQ(G`-vFI%WZm6v90MaR!-7lM>H& zSievamgDuizf2PJkx)~9nh}Vll%PHcMLtFG_!$rd*XY-$BeQ9vh`gEiEuWZAQ8)>NlwyM`AUam zp}3;rnGzDBOmu_JohwYybH)bu3)Y8dV08M1d+|9c#%k%PfXNWEwVt6%eeKS!MN^cv zIz~bF+6r#=f{`eboy`(eho!F`h*bE&Jcg+=O-(tkTr7+&e9d+(+~97ulT$NAtD_?; z<2%Oegych)jiWCXy9IK+eI)5{&(!iC$5n&ohjCW(<1o@#2F8D%AVg*m*<}u*lKc8X zhwV-cn#koWgsC32GR=2NghhKA9rZ}Z@g9apbyb6&G#Puhqm_}n6D?IR6c%xCmx#fA zI3x`cQA$+!@->I0A`Ad~ee8JF@nHj!nmiGRx4DB4azi(Zdn@N(NL#K+o;BbUZ0^Mi zUOm57oU$sLH)!1QGW`y+vrH=GShbaZ;vf0Va{UJu&Xgj4&i#27ahs)6(k|hmDfZq;AE4^c%;x8}x@lhOHP({uu*AlLp=BCsq3XJ@x8jtuE7Q=S z6;ibaA#Al7*YomLyY&diNtkpNpuw$VEHO_*UbQKvrR@SaCVIz=P)|7Xt2TF)K`rVL z&=r?<89=($!QC^Xi7m+Nk5kq`P7$d(5w?!vzuCr476;%xpcpUwg5dwaP`@5Z{|??s zqG~%(%0j;QGgQc)*m;P!6{~8+VXYblUtZU3ll2xTPj`gLJf0_x!5K^^dC-J1+4w*8 z{WPHQfi!5et$nnLm+FP$Gd|-i(TC4e|FBen)+KmXE%O#4ZPf>NH>iMDE|FF~d%xit z4@nsFK~YG`UOX!Ix!;&H+Vd@lBt}pD4-91+x#&SK!Gw9Os@#3E3d!w#p4l9S8?sh z^yfvj`VJAQ=eb-`5jcN#yB3C>BVuE&GA<|z>ZSwo=`-e)MqA|?`(qGUwjOtF5Is^1 zU6vse`-I^=%hoz;nA9?CLHJZ3(aaygJ7X*5;i}8C%>bE2K$QlU-BPpvrd!>D$c63l zmYZtjF}to;Ue%UCj_mSvYJ@$_!g6m!h3yh!3ghUUm8YWsxV&jU=iJ&Sd3P(8^Vb>j zrF)$YdJ9pNH1^E3W(_t6nvXU~W$N=`1seYq;%@~<@iuFG51O>6Yu>rKc_&SA+$a*tZ9t+9wzg=4qwxyu0M36B$gRqX!xw(G z1Dvi|*!B8@Exoz((C-lVm7Bf@7|-d@5isHAHD08fSqvOh@S+Wp@sUe8;?+;jkXQq2 zM0S;V9_6R4s13ytd#2y>KJXraJiw&Abo@m7wffg8_PPpTuu2_K2WXSN38?OF zRc>90y^lL!NCpxpx# zOEyFieTXhl7>Xvz)Y(2b0Sr1F}hHan~Yu?{=*JGDo@fs;%(}WZ%j1 z%<)B#wr(8vU${&dk~UbTg><7_VFH33%o3r?HmgXD`uTn?^pRG;!piUbm8e{~ve^XI zhwoT)E%S9ctcQg*38enk<}KIJQ6YnKiJqh{NHaFMWL{TsV>Z{gO|fqSb*5eCMo)Tl zuNl-gHHGPdYPKCfuX)ltb_ez*8TFmR7#l1V7EPntaC~uRr>uDbh5xLiraL)#iyl88 zm5jeuYl7;1WRXvEz6MJqUW}ckK78DXZX^j7nh0jBbR8Lq zs+%($1dl}0m(Dqn+BN3=2bL^I28k>auQWCO#nADJPPs`2os>kIaw@nOg@bzaIcJre zZ@TZ}EHoK=iY3o)8uXliLNyz7!s(&dqh5>IxiyW`1fW^oG#4k=am!1;3h2$PRjC>v z|59j3*04pXY@+HRg3u(&ql~<@%Fu7oJ833r@Tmc2oRv)~b*H6E&9!d( zS7OgjvF}z)3z)yK?0x`LCw-Og02jDdmZ!!rFs?&$r%6yCjr>l4;{87slpc)$`SLgC znh6(2!|L*w=ub z4%*tsy>L8A{O5kuA=_Xtla|q&$GEQ58Xq@JcMdlOMALQMKDYTXmNL5XbZ@*Npw2Bg zhepLX4mjDm98cZ6&xAijucMb=8IOFI{BzAZ9Z&QpZ9|4JmR&Q4oBx5av@13)%&k_Z zC*b|4LZ*0};z4ZEi@@|eW{s6QQ8(~%DM<7NZ)zxekrlZ8I+3c=$F!5IN;eBiw z(QPZ3;oB}WNttx();?eTV-#X9w}h*3vNfl>nug(Y{nMp#ohQiIHc}Bfg1WLF^CF>j z;QaBV7!E$LaG@Jcg=gbR)8NC)V5Z69Mb8-Q!VM?H^jQ1vySL*WzuynTT~K?;%NXm| zT8I(9Z?y_T&sll7D5VvZM)4K-Y+XYx}2HkQ_5D`z@IXBXLAG6)qjaI1dg0N1&fMm ze_%^qY&XX|9z?{KjX|ur`&?(p5-PeU+cGlAxgV5M;mHfMv92?YcvoaJJlr9-rFYAS z9B2FvP-HYJ+!pWiKhekUdK83W`$M7-$!<<7`~h0M(ykYxy9ak=rKhAhL&9JnDe;(e zg_4w#ztMJtB1C#xBka1r2;?X9Bto>lNZV2p+b5#(b!Q&}mGTs!4pU((ob-quEVg^A zK-Yqq;FOXS2z470)sKcMbiMLMVvYXvL{M0ZbEeG~vhVLE+v`}`C4PUEtI!@?|A=ru zB{=Lr;2`77%0R`$-?MLV_4uH%Da(5tut|Zg1SLuAUqMV+kWpD8hhUZw4`IwxWh^U6Xn?q+vuJ{>aQ}V9gct+!z(OB;$*2&`nMYl- z&oKkSnff`vWCUpHqeR()lw;UQSH9!0p{}6%;-G(EG3^@fP;*2im&wU+9VMmB; zx;JuP!J6b2{95h95G1AcBu2h|xNV#D(~&(DfU7!G3fC!C%o9rKgX)~_S?r`OULFdM zk&i;FW!pgOHoAxC?8j*?6-!R%%Bhc3B&Hvt2Gp}}b?6N)2C!E2ud$;2h)+>TRy35a z)&r(65nLOk&oHUSoOtlvn{CjsYUu}xDM@){zMVUR94BmhL|WhkGYjnMf1LM_nmRDW z#ns3)HX*Bx9@grCTt?Eg))Fdgi()shMh~yA{XT#CLSdSAz=_;&U3hv6e-vf+m?qH* zv+HvS5VUuj&}QF4NmX$%sL{sR6!Z3>Fjuw@g*JENy(QzXbyh&-%<|{gkI=j*CN0_Y z@tr&PZImtBqBv-v3%;!sO>Pu80+U0fwrWn{(lX9IezBO%*`EV9kg&xMdvyCf<7~Zm zu_drq{5V&C$>2%p|FpW1--?|+{~P4K^>g*|-JroRP2r)R`$kL`c9#A|(p)zE(M9Hq zJ!N@{F(exGzToI}6zNOR%f>RzGXZKxv13Szdy{6VlUk(3ke@3oj;Kp0PmJZJD>D<8 zs!5zxM8FI{vV3LN58&;ufpt;EClvQ1eY8CA!n@x9FfMg-Xxa;s(;5);M%rT4V+&&0 zc<}v9oo#t8p2HZYXEwpmi1;PVX=6L|fgszm*485tL-^iz{LXx)i~pTmo~Xk5i_UXi zgZsKlCqH98=~=s02~tYGIIaMZ{#Yr9BpOinY@(!W>h$V?|G#(?2%OMxNN@und)^C(n(dqP@ONNJe!`bFohU+H1a^>=Z{wWj?D^=x0FFKLbZK{9^l%(?i+pulHp<-tX&n8AQNw6 zU)sx4?Tn~95K}P`uUboAt}E9GxX`w?WuQ7EGRiP`Bpx5}!McO3L(uB8Z&d81#p74H zvko5Hj>kiWyQteU8s3x37$yojXe*n)0r&)S&eccUr9;=aRlj20Jj z7U2dRZu$q4=iiJ;8ef#gn{zq=3sB6JO9kPlYNdkUYlk$8c4Kv z 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%0A5Ehu_Jw){IXuso$?6+w_6it%nSf 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 Z-6uQ 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%0D^7?eH}tsZSmh=v9zDc++G|$9c$Mv z%C#|<=YIa}fc_+AV%J1SjnzVIpaIu;T74876Rv{nJ}=j++ozQ%GHwE~7^5UcBegVM zKo~4%dCn{0w@fbF`?9*PwCQUr>Ay_OuJoJT?F#@?_pgt=c3rm{9oZr!izpLOo9=;Y ztLz^Y7b}CQ<*0&1Z$#O#{4vKOSk;L)?q(_dreodCBeCB*U{%+gy_sN$=QG6m*QLV? z2iY7fCovWv5|MLBQ{;W3b^k4WkyK))K7Y=^=id@LGsm-31yeJEq^LFL{7R!(Mg6+Iw# zRWgJWT*6*t!Vd#&WwCTZ`EVDfz_B8<^nx<9Gx^^)m^@TY4|yLC@XG}#+`4Lmau6A$ zOJu&_+A!z6?A81SBXB9sg#Lx_$w6YkyY@pjEcA>1i;3y+-S!Qhm<_+g;;78hu;<*< zb=4_m-BBnzt(bNZc0&fa_Eb){2PtRHX?}rsQ~($dTC>6a^A*Z&Jax@IPBdNv!t~D7 zS8U(1ne1IhYvVbknIyMQM_K9ezO!_kI9-0i%oFbJXQ@NHIV-O;%%~=`AzSaDRoagS z0$nFTc_%D586UESBK5^bb;CD$Fl+D$E)qUKW9=_i|?lel{tcDz4ta zr9mPYXc7YyGrUwW$p?ZK z#^6%AHhw+d?pzf{ua|ocXe43UR*m-y$!C!;)FX7S$66v?tIGuOKsMTcT=F>K!(b%f z89#5U$SrCLLA<4QTt*y30wm>aUGtMNx7k^ygJSl+^M<>dzUo{DXYj45=g=H=6CP;D ztu3`rv0UD=U%tpY#D7|?ZeY^-hUsr7XW{_rPiYBfeRvI4BbY{!Hmp?5tVR9siiev? znoyT^Sh8xZvqkXlG}X|nhA?t=hASS?N}0fEISI<-0Am~T_(MVr) zsN+yoE*mpfj)zL5JOy7Y50#4FweZ`veTIFdk^4G-I*roGAqt-3J-uhr0NAhkF9=}z z&a!;->4iJ;GcytB&s|{1Z>69Sl+n?QZ1E#96}=gL-sZrB&o)aGyjt0{@0_f|o1wEy-m z?lQRB;O;I#26uM?g9Ud21bA@<2{O3*;O-<4WN>#UxI=IPk@wHPs`fr--|gzY z?u)LcyPju#*IFNTt20;ByG}iibKn9zA4wjQ4L!DtG|<2v3E_M{V77Y^{zfRWE*$?C z;p^blALZ0(Xzd4Bx+l$GM`)E3%rxcn6TLTmya+t%x7T;iK$TnjlC1f^R6Ohj3`=k9 zt!U2oMVaX*(l-~hsZQO7$5~y1#-2i|Hv>=V$bxGbwrMQnS?#3TyB!&5uD)MLHR9Za z+y(mzIU(v*A!}zo;(8UUL3Hsvn%eC#FM}xGfQNtEcxyPZw=BZY; z5*z;JgEd`zLr-gW!(+!PrW)nl7Foz4In)2<-ak!I>ynGnXtz{RI08?Fx`vOY8!)fY zYgs25n~1~^ICUU=H57h!Z({%?5D2|F;~wls5>;y+_=3xe)>sQ;H`vhxwtWBk3u#k; zx7`lD$y$<~krb2k>|31L{ta2CMyMVgmo_?kk~EB$sfmIzz+598lF$YH(WAam+K|^v z5?%S-Y|orNrv>*{28B)UW3X!Bno^p{EeQ249c;uRwr#0z*}8wT=37hx(T;g$?qT`M z#?T6kg9#%Oy1wbSOt5IV@_^knFp97JEfH!aJ7T^reySDOHZR$OPe%On9KZRMW0wqGMIuC!;t+Lo7m3I+a4p;nhO^T2mZ3) zAi!j1ua=)$MwM~_2}jni)Xb^!(pw5q%i&PUyDyh&KWLds+HHqu`OMKE!&EA*da_HD zol6)NESiiXU_3a+86;`YTE^3=JHkR&%&zI-rKpgx69O^&1M5HQ=4m!&$IE(MZ zkh3kDMB{UJ1rsa^M967tm$YI5FQrHR$w1TqnX-30fyN7&Igsz8<<-j_6OYZktA-ZP zDHgN|IVgCdI{J%44e1r~Mz;E@;g3wIB_#np={3Nv-H5rfdej5|EpcOWO0H4QrD8|T z;IBHx3CA`*iyAvD77R785?;J5mz2A(7Vn3i(fWtyg!@8!Q}5xRGrUDn#LxAm8Zp-P zOjvby7OgVAZSzAl*E#Ika>j=$LC(ni3Du3qC_g_^IW^xZ)rfZ6eb}yIN^wbKbp;7tWV($ZT_hCl(@HC z*`?U{8jx?8GKxht52s-=mNER8k*B6cN<`@rjf@NRyG+)`6<-t9C#)*+?9mlTYNS2X zC-km@0;J>)iR?dVMIFheZ zF%~&~ne=K4VxI98m*_p`d3S%2p>xWb-%>A(Z{2p=#w+6R72M8viX3Ucs*~ZXGO>Fd zz{ur^otg04&bI5SOotm(8K-A$rq*58q!>w@b=tYEV};Wvd(f{eQ^hk<9cdhCGUfWZy zR^Cs)`Wm-X_x@GlHPt46vg|J5=7N8Z8zOXu5vI}g!& zz^wimm4$$&9D}|xoBj%}$`u0&&-Vt}@+qJS2%-*vTus`n)eD>C^`vm(9t*8;)G#!C z_-Xn}LHiQ<09BlE!PJ>}GuR|+$QjXaO418^hid-io1Jfyx;oxl-FrxS#gOE*vEu-` zBXU&jW076o(o7}a$!m@~@k3tR1Wae_1%sqPbO#K14AAX*iym zVNC0n4)-<-%(t>4HN_$bQbSE{OcCy=6AeM(ZAy(r1&kp95!oXm2rzh3u`{L;m7Rb| z>urhSlT7j2)w1cg0s=M&j?|-s_B1fN-BPB>I*?y@ez~O+NvNM^@j|7A+xvG82vCFQ zEkQ9$=8VbGDwU4Vp%-NA@BDPKBY2u3YlyB9)2+Cax)?5w?2ZjG4 zblU1NcG3YORae0=;up&h0aF4@0mf@&w2&7FMpDr?gfR~~Y9i}_h{0?~VShhicwF=> zH30CZYlJ`L_~+Y)^?#28Ov5(+2J`;OeA}9{#yZshU)p6+Ij>tiwpLm@gQ`_q8w1?K zX{WQEyOR*MrS;r+lhRg=wK|c(>a_FtWfp(<@&o-|@@I?sRuOzuafKvUKoNN|W?!sL z*DRZsiv}M9uJT)UAT0|J<_|1Z1y2U)O1Q>WssoQmM|?UYddy|@u4^dSMaV(@ztwd% zF5?azubA7qlasq-zj@NKZwkj-?h^ zENW@|hocHDhtkYTpg2+#1F>K6eomj!u=)4olQMXN9GJu|6_a+LQ~qX781lhCM|^?w zU=%Ql5)cIp1Ogc$5XjH}+{uu{?nGOP{QpFhGG)F59NGVD;xYY)b&hl4Vq0L~qieKG zfkme>o6zZ7OuOG|+80Yb!jW$`4qJUZ2`rIv&$%JPRG+^&`7;I4I{CXl=76p8(euoyq}BrE;L0G5!Uljah&BTcRZj|=5@ z{_!3w1}=zMu6xxJ<*pKIt5!w;yN!S>LxM&X^{I@n^Z7GT5rc|J0#?MksQfFUZtE!7 zQTmI=xs^c4EW`M)@ZiKr3)|BEA?K4938g}IIK)eIqVkx ziMSitEYgHB7z>B;8kpLnpSjm@J-B@PLKI38yj zP>}bZ_;MFD{8qmnHYo1T*^pB7Mi#0Gs}Y(H9yV`UyySC9-Gq>iY$;2O3I+a3IVNqdOvY~EpJ0rkq{~jm;l#niu8l%{{xv7{4N5om zGmbia^k2f^G_gZdlwizj&!q#x3nhbtFX+h|$9W0zR0R>kc|C&eWD(_CvObrO`sqFc7^q0}sJFjx za|t{Z%Dfv(I%rAl<`IBEx&E;{ms)$QEco8N=dzVYg2Bt*C_?#Nu_1zpz0jA13zYjD zPQ$XyIm^K3Dk?-ECp5`_IQH{%S64mEg46lDSN;(({9|ZpXjkHAZovb*b_*^Ma)J|v z%52aGLl&ceq~07nc3mT8Q+?d&Id9=1)+pnHDTRR~Z@u%lnz@lFwx)k%iu~I7xQ#^a zx4A83Vq&e5yGh&X!<;7&*;uMXQNa>ZIK>7_meHWF(#H z3vx}*fG$6Grag!yFvdz=6q;i}$yk!*U81-GiX-5b7)p!%WAUy1VdiQKwQ>Nfh{a2? zn>X`#$TPKaAvKhN0~6I29jOIa*C|^IL6p94qG)!FGNiwMJlj9p`&f z&oRDdlobVy%l@wNJ@!T-niv$uVM|6nBz^(u38u055JCGMdAsf(rJNqq89?)~Xe{!z z5B}=4fp8GDgp}^Veuc|U*RWpV4*)+B4eNhKtGKG5SMj9hn zZyZK)sx}|~iOd z2*?F6iEX3_%ZIxp6R(%Af4lF)?>*mhczR=zb#U0!^R$6#^9u1Kn3M@VpwlWeZ$)mJ3@-eQKvy_S|KT6I4u-?Glw4~J(j8KmC}C~j5e2pks#k+_II5q6Q8Kw^rJ zH^7u9UPJ^$1WadfFNJbW6vxEW?!**Cdz+CO6yBeT)MGB=oVpbYL9YE=O3}<`&|(!p z$Ap;N*oROq3_fa5sSll#ew#M6?H19C_3vw$%JtDt@BMA`fmEIOT%hv6-MyHn9L&tcrXv(Fw~kH$ zCib0p?<|U5XeAS`K>hsADf78rsGYAojZv>fh2@1M!sA?7sdFMWf~wF9D`#7ZSDeuv z2V85`F4op$pK!Bb31^ay(QWAs7hd`PGX$NowqxvD4P35$z;|Agt*SqT1ZgRpT!j7d zHdQve2dO`=0bTWlf{7<2wnqXZHSl~IA4A0t6~<1n%66NEg+U51|N8}1ykT3{BL ze1_L>?6CT#(Q0dA-fKGGV%M3j=-`U&%CGX1A_)|6sIHWo7o6~9q^B|t;?tXSjKJr_ zPG6}iSt)wWIb?OMAoEx^>M5H82u5G<4w?B%a<*CWyrA2@j)N@@`|n64N6j6C{W+T{ zxy9C0VksmZODoLf>(*4vGp3+6Sk4mcem$#vvhk4{B^Y>Q+y*GkZn1zS<|nURw|^vy z&4z5K*hjjO<`w&amRo%jtYRUS0P zaW2QZ4IjZ)OYc!X9QFL7jB)n%3xk_`Ow+Qv+$(;h?S@}bU6Sd~)Fo}6QKr0V7WVv1 zxUrg22RzEIKF&G3-mR8|ITOEimag}j9HeKuY2~(yO>r6735aEMfIL9>SDe%q43dQ)M3UE zoiQ%;3?zdgkL@$>2__aDKG$%oMOylv1K6uP=|=EM=wJn zIwUCtzy9$;@oy)fjeg`{Wh0J!6L3J}CU;&UH?b9Ct;I}&>20#QW$QNm(K)Fj^ElT} z-M&kof=6RBeQn$R9z zXNF}fQWt%3Q|f{!q0pCC8;761ZHD=g$2F##zZ)GIl~VUThu9W3`yKoB42SxGJ7~Xg zH2$M4W}4^O$~NDUBUXZ&UIho0Y5ZFdIsr9+<{?o?ZTa{O zM!@L1iEvUnk|p1)4?}KCZq?;#`d(Cx0w)PLRM{ZBIVp1{wwrbc2Bx6*=Re8HAnb{;dk5Ajzb6NM)T zs~oi~Cf+$XuwEV%&ungDwj{qjuu@ zu$HqODyAla{Nk?lbo3D!yvAaC zTE`QSYgWWPX=PeQO4^gOa2*8+6Yvc{DsY828h8)VXaCbi^*vI%+q91KhkcY6W#PId z44vJTni~Z33BzM@wjq~O9xE6z8X$c^L#gmr@J$Xe9$34=sans>pZTA&)q5K4V)Gt~ z!;X1%r*8Yg#EJB-8wx)&cZ{(~pWoopgs?4}d4rRQ{jy;XcMq41&R#N#_@18S_t!{f zt^^&JnfZWK%L`rqjRhbB0e%a%P3j8;Uj=%A863>frmtVupfLuhsbwK1Zs_@>wgdn& z5)kUMgap@TWB5>D86cC7_j87a2QWFdu)X})I={r&|is)}&mjG1}SIOd$XnkHf_u^VxF{bXSo-95dI=UWC#*wZCBC7qSG;+gneOYq)j; zFp?N3PW5-SAm?itc&_4X?jTdIBDWDc<&cgY`z7v9Kt`q0N^to1;Vr2GsY03g@0HS@ z9!@&7zI(Wfog5VUNDpesW7xq#W0J~V$j~r$+Q4vj3v0yyjeA8pwejZ-biV0_UY-C0N_HAj9sRN=Z~lAA$GtgS?Hr_`;dO3b`& zRW)4>LwM43Y-(&kHU~7N0f%cS6Y=xY@r#$3$Wn9Vm)K2#xUvC0%)hh4pb!A$+d zn^R~rn6XPr&BQ-o)yVfNMhZlW_`6gmS2`QYc7Fd^%Wk>MkupT?HYz8Y`8Z{&Q+dWM zx~nVs>}$ue0hzL?ym}p-QMU^ZRF5x2qcmt7lt@PHAD0w3MH7DkC6%U^BVb0GqaX(o zP_O~xAV3E4oP8z;SjIs--Ybu!w8*WTP{pOfY*dG@t6o#KR#x5`lY{EQufraOY0}Kh z!8yZsN0|!iSWK{AD*2@EveK!xigPKdmdo?71! zwDB($rnLz9RMrIG_BN{0oHiKQPD-SiNKjd`ui1@c00j2RrvZ6NfrD&FK;AYmmV^2} z&=K7R8z3Uhi8h6mxQ4{Vj$|iGKrA;^r?QXcV22Vfvz7y?q{w?`*1U9bY6$CdZ`1cG z)0|t}uZ$_`@}XLsJ36NzWmMU6()gh@^3UX5kw=iZy4lD2<2P`fpE`iqjPv(mF-=`b zjvg5pSF<@CCHuzcmrs#yfWmv)Oq*^}HD<|fN|4`Z2roO9{WL4HLlc{oKLC>*LPli7 z!Cn{;ZkLWSbt?tZxQE~V(sI?*!5|O@bET4`lJ_?yF~uM`fbmqoD%OEHkenp2z`GHT zJMnk=u_l@u?}fh&!+40nDxE5@wd^`J-(?|)&qB!jIB}KU$}h~%oO(|~=Yi#I`%n8q z^~j>;(Cfb}^?iaFts~$N3Tkik702pP{;@1n>QVk2bJBUJK4K&)BU1|zIU6L0A~h#z z9+ilH_RVqk`}R$mV)6KY_XZM=K%DP`&@WkI+PKlKzS9q#jM3g?XgbsSf;!740>nwWH`H|qrm@eHX^=h<0A zK8h20h;MC9(Jjxg^gF6RJfR9FIJd;>%6aA0!ijt%o+)|^D!(mLqYRfyS$J63Ef9X9 zmH+#LE~8T7%tEwE%0`8{KijEOioB~><0w9;Y-=b(xWX!+83!MwtTJu-=wx*N_Rn9f zZHbVr#}{}u#xo-UesYf*edrm4uE#OC#{no4>HubZp8iC^k+3KIb$5*g>9()NT28EP zhSK1@R40H^o;clU?Vf%HLUY=(-?sog5Mb;%&?+%ABQ5`7K5e2&y5X?d!zByN?i6Lq zXGchA5W`GyKuzY+{ZRfCxL21D?8C?6ZVR%E?;xWYF|L=c7wy_V63>L2)eD3R1}iKJ zq`ZGt@c8};{`P1WEc*tz${yRF_9i7?Q$>o=ti-j59|St6Mx*xQ$fl1I!$F`~DbR6c z;+jjlen({j9~Ps)78=5EK5Pdl5m@UbTCWQe8H2;!Wh;8FKG<* zr|g`U17=lf&Q65@i@;!?8pYtlia{)R(kFMD10n(>Q$;xGW+`C{VTu6CK4&rkuS7PW zVsb;6R&s_B*X5`{A`VZSYE-;WUwJB{N|$xxoD}O)Twi1{`J5?GadgP$#oQ*#YRNyd zG8mTcv-=ZJe~#FzGKRooC}?-nOoa&)Kei1c7l#&tZNuYU;*!5JQVCB*A)X0}K@myA z2@+L7DT&16AQfs2xP~_>-MQmuB8tAb?vHZk0$TDX?eZ&U?fo8W3350SOfz-{fx0&J zYjaQgcF@djLEBDhlMxtkMt#qriMA-M{Kmam;5Sg2(9p9p$wDDKhclYuLeu0Zq?(8- zX{r;*xA%b`aGAM323A{hQ}ZMEZhyq6*%Qs_)M-R_1)C0N?Vs(;;-MRWk7*}#rbR$< z=sK?LF8S&5r9`F~%6y={e@ zHG7V4{_s^_8FD(fYRPHTzw6q}4!ePIh?F}E6*PCYeU_~H@$wH@`pHle&VESt;;?P( zVTf2;7{~(P6`sy%@El3%lxZiyRjUi?X@;98GsJF1^K*?W@V1=iE>O#-+xNsXqHQ#k znG7_U9EBqgCt{MPzF`itK?I=xm{b1D&tOe^LWzQ8Bb4wkiv$%-}79o1nZg5T~b9V-_g_Jf3> zziR$&2fuIyF7M%qoqYKeFq&jrs3vy&ZiphTDcnG;Fk53RQN#pL4HVN!6i}~Z8jnu& zc{5!pGxJlF*ovxai=L)CWQShK_vo*sF?*ItJJnJ*wgYXw)-w;4sJYRAG|(+m9947N zYOPYq%dh25ojMi4&j0nbm)&Y+C;}X0M*dx?V9Y_6ot!D>o16oA;oSkh3rw8q=KChp zty7e|oQcAF*rR;zvwHY)F*vdeN5ke=JPkk07o1c~6eC(C!cIR#pK* z2JQRD{>%%~iN!LNKzR%XL(Td6vkg4;Cs|m-ei9aaNe*ZK>vTZ$_D>ep@3`~8KqSb~ zKS&UAmS-lQWR5{yjaCuv zO$#h2#oy3*l2nS3FNY4OVFDi}bArX=LCnZrJe|tX>)qw@C{|6~^>*U-mnrqg(-)^Y zU)qREYuk#Cb8A4MQpOrPvHNv5eH4u%RBdM=*hhvaRsDIo%~a-+IM=?R zpvbvdvd z_Z@q_nZB=*ial>U`9bS<>ELhaIt4&oY4?Bpk&8T98A;Ln;P#x{{T9F&8HAX^O<;oL^9I*D0a^9-4+D`~}J$y$3E1LE9DneRKUx)oYMeW&P&YF*4bbJ z=B0!>RSnRrE^uEaC{Fu|D8d>giXu!MyL2}mP2)B70V5}Acn+s0S#U|EYuCY6eIy7h zpDp(=98RdQuC6cx6jGvrzUC!OLhZP@TB5tk`DrTO2byUuEOLvTKfPJmRzl+KlQgBG zAFFWPtN1QCrUsJ;NGINS6QUb0T8nOt+nwjS$BU8Q?<$sr0K%prFJ9RbX#z@ho7Ka@k{`c+T4n zVAt{Ud-4(0yf*{y|GK%4ZlxZdODKDvOQaA@>^#r)8>St+9|E`xuAyd$p(e zlLt$s%DcJq>jaBbfmi2!lES@yI|7UgpV!%)nhOFnH-57k5g7|IAWk^82B!LLC)czo z_KiT7B(ZCKNYuB4_Mixq2@Hi~Nq_px$>qgH<%p$OKfp)$=a%R73 z%Df;n16T0FggNunPe?AdMpcc!;OX7MLBpF&k`zmAHa8^cr^%O5>#WYr{`~$Qx6b-A zjLli8>xBZhQH%Ezy}$2^h^F3T4-L3B(J234_^lxI=#`Yl=uZ|~Zf*FK4-x$D?JUvX zDIWqU?O*&vf63oYo>RyF+b#M3Q@3P5>pYKo8nbHloo&gwH!buW2ueWWpbi<9Xd8({ z&Aus7R?F%YB&7BSj(Vs%NOB8BF~|fzFrXp;eAafAFkoN@H6T6APR>?pR&cD|>)jMG zovVNI8_MxN|8NS4g+PQdslK7rYf?#aHBU~@4ZV4dvesasb=8A(^(~wcMz=By-#h*_>;9V&9`W6$M~{|$hFmZF2d`c@X78nuR?zRNQ+ERv&W|bdV7$cf1zv` ziJBxhdm_DxSt~k>14XaZp3IBS)cNDL#P?D6XV?O>+Lsm`W8-YIJRZV0lv4sDEP|=b zAo35YlFNv&MI_%qp1yHWw}F`^xvJS%@>D3X|9hhSM0GOS%b&-MQkm83$7t+0o$L&x z!h@Oa&E35CEK?Y1XG1t6En`{l{Pzf^R(*eT_xu)6vtZfCI(C-~_(C>V)qas`&Y6w` zB_SadP6&z|*X+BVUy{z4Xf(eH6IL*r`7(}W9^mdihqYEiz7`8K8bh$)=r-5+ifFGh zo@gmNJbky#@Rl3QlxYhF`H6tg=r++m5*ttV(({%ZC3>x z5^g?>q9Cl|sSC+&8fSEr6+}s_@A-N9x=CFIO^Kfh4>_jn5IEAU-3&R;U-o0Cuupkl zU*!oQ|2(SHNOFD%nfYqSJUFj5LVhTIADd)QujCO}`EfqO{bc%;IS=-!dE*S^&KH!VsER~ z$o3bCXiRi73Ew|*f512@QD)?7DW{(KoQMQlUs9MvHw!GDA1RqK#?^hk7I9A%)1q1h z2JiHGo#7k2;=iXr=%xHdnfnDbh!~rr6AyCrx{ya-{aCOW$NJk$c9|y+KnfxPeeE6h zMhTA9`%&yc4VNX5pH@5-@vnwlK4D(TeF%xOfOF+u@q%gNq+j$FXS&ji*R|4xPomLCx*D^eSL0>qbpZ z{9LE0ol%ziXHFZOW!9l%StIUTcN9alC2Nu^{!>Z0rWUSnLaN0R4`@a@bVYCQRQ_97b)u?YQ zSQ!2MZyJv%R#(yH3hX=UisS;h4NEXAZ4H)TI)_>D+;H3?AH?HN;zacPIV355&bZYq zEkj!1_W^P!m|-M}-IP(S2&5{X?SBX2LT80?h{s|H$@os}f<8I+Qmj6pe|NblM4({n~OM%0bUYB2v=i zcgXD09qDYvpqzti&~&Z%^f>xk>y2by{a~)a%`?0YpaDVYyhw^ zRVwd(UD&S8^r;4~ePGdJd0)9}&GAWUlzA~bdo{LCzA1$3Pir2_Nhmo|we5*;uEp#8 z8do%%zl+_V*)`E;ILl+gp$(Io=-Ka#tFA-_6*o#)x3EmN0j%ik4@QMfqXPLCRI^U= z((?ljW=nk-cDQYqMxJYx5FpU0iCIEKjHSN9l63H-M?9mOkg2|A(PIxTR^ga~(f;T- zsqgyn(}%OeZbR9C1D|@vFvUcm`~DNOMIID?LmYUtW_>W>49;Bp+#r&dmc$=&_=lr% z+T_&ZfpU5@Z#l1|7g%J`un}p=5q|tmq@mJE)T?@`iYj6NbD(k@#2LlTC5(^XrVK|<#AMpg{c;+nA`Y6&ro`pc#m2h3(d8|_K0(^XA$`i_!XKfPadvml_b|2 z4%)nlqcrw4z~)wUUXAQDOqDp>ohng|XRFE}mI04JxJ}J^ZdGVhsp}trlb{+<> zZQFIq%14d_dJAULM6U7IGuaM;j`($Bo@luHMd1b227Nj_|E@R;B6TP}6eF{n*4 zF^HfH<0Lt*6*(V*VVA6V@Ox@NRA`9Sw$B7xEhy{;3)D@Ry%|1JKj@Vc2lU^x%8Mmj zAZgOv9#!hfv5#*Bao4H8Kgey<851=EQEp{2?6TeCWCMES7L?|jQo1^>_8dSfm%w4& zHli!(YQ4pB2zdqOKqQeHr*>K)8uc(i9<9kIH{xwhPd%`ogu~dm(!uYA)BL}GV2@<3 zXWuPqm&{i*jH`U4RL+q6Sf{}4@@Jx;SMpmUUXa>5K(l9SKEKZ_G6PifmOq?G{P>+gM zEOgtbBu%;D%A8l;J3s0fR0fy3!DzBCV}WgNifeVcdU{rQGI1oj{F!`Q90jo}l_USr zM_h4)Pqx;h*igiwgSiASv84l4iBLxpVSGX`j6-bi1UkfvlrGN9~b{ zRd6L}HdRA;$^WrCDC}8Ca75zI(pz-sZq|piJJE)>W?<9AdMLAOA%ZkJRLH7tNJ~|p zK%YZG;gm~+MdJFAL^rsr-hev0x&VXwW9m~b&RPWx|9sXAF`RS-okse<`(8gm}fReI@V8%~Un}n-{3V!LAY!K=RJ# z5Hkls15l?#4<@bdH!?d{$QphWi^dN+RytnezSKCR6wsL!&Lk$D;=&owLF|XusRqx~ zkBWa(`~=ZS&Nwv=tt9>`;LkHei%~+N>L(pXVl|gkDt>w;Fg{-AZrX`I>!T8X7>8fq z>HoWwb*M=AV}(i*X8Hz!@7{7l=TIQ`%ryRSfV+RG+9i-dfD; z=A6c^og*ofNeq85?L!Lzg~r(EPLMrWvjw625$)zI$K&f~v#eR=B{0@0uTgCVn^`z9 zJ2|@goRGcG@6j;{ugC~PEQjwdHkiV~cz6dSmN}}`+8Zkj{)cX+A{H&p<(qE5n_Q}s zBR+lAwb(rcY-k#;S*$lYos-^|h(c6sR#W-Romv*3jnLFWE& zC5ufW#zBKrK3k8_)Hg$2Y}(RJ*?QyGzTbK`ED1KGcxRMDs?PE9#OhQ~;0jlNE_lX35Ruz_iWJ&i4*Q0pHi^+>Lgj21khVyP%)d!fwOIYAX*!@u$O|WnqxyLkP2uDF zx0*;J{Aq>G+rZcnki5>rMZ_k4TyjSwUmB#Dk z%+-HYhg#Z-*XVtYHd5yzks`B9=dj5|)-$$p!!u#p!if=KYNQpV(7LznduG zGx=uY8jjFGDtZewbC-NU3PWsSi%C@R{)6LBloum+09HeYh#1WpcTj+j3eg!Qj-FQz zf}0JCvTOdsco0;csemXY$Ls0Aj^S}My8WunCK%)!7UI!p#{1Y6U4kY`+p(lFvKC98 z=ZtTNg=cgqh~&jqr4AkGJD_rR`C{PL)+w}DW6u5K_ZvzLb{An-x+io*bZ{1IcuhM-Z-h5X?DNGMsl~&plsQ+3#Ta{K*;xl#eai(57u+f_x z-Q1(v#t}(H{tcP)IbP}Ss0>yHSC)h7l${q-}i_ea)(6|S)A)MV2i9i)EUJ)VkMhGT## zB*rl1USbBBv-%;8c|gf1J5yv~vKRiI7fQp*>%$C`URsBh(%8S@{n6^A3JthK>c%iR zLyDU9y#$hXaYkCH?OJ@09Wqh{R?L7uZKCchE6a~h)!z5i4SwJ2?v=K#UIh8 zfo|@z{?Rm~4yt*XguWp1xVO3yx4GAw=e<-lV=uzJG(%W~!|i3cpP@)#+Gx&JK;{2a2{RiHgm@!=wi-r+3S_*T&NHR) z>M7Z{4Ok>n|#;p{Ti zPBkos)X92mnWNC40SoJumGtg&Dr|IOSz?Z%a3~@6dG|So{I7>AzJ@J$o}?OTm0$B# zVdY%ugY%1|bj;WX1}#U5Hs@h8T7GN;g>vepXBq>6Pinq11ylq@P*8|sj`)(6GtPTx zIQVPHwYENhw$VCnwPYPvwR7VzWiw-;J!`HPm0IebuAWR5kkQ6{W-4E1K_`Q|7BI)P zMS^#_hA3g{1qQ$M+Hdsix!B{=J%|cm`LqH#fsfu=9~5zc;NZFz1HE zwqE<$;TmIVHhf(TJ~BqD(ZaX*A|TDLt8E&`4>BdH5VFnbSOidf9gcAN>)G1D@Px=wA4#&n8pS6H zUPGtR#V;)BFCvJRb6P!;x&suk<1$IbSm;qTymTz2YOjwJexYoMAR@rXgy*&!Sav1c zuVqlUDfoK1WB`Q%lA7O8Ru3f5dtRX-cIsCqvELumEfxLiTuYR`xT9m&)liqSHhFZz zT<|~1ZND-zO8=C&Jg@l0ysDS=u}ovKP(CN4y}j2d(GX>aG1>v)%B?jOWM=k-Wu<)HJ8035_B1OKmr0qo!uOdWj_l5$9B6 zR}6d!by2TcKVSuw#@<)%@mZ`wMAxXO6Hbb$7>NE&a_Dre~!8I-dK-qUJ_bd23cP z;%qD1%d^s1b&V?i3b}kj$gpv;X~TBN>&7pU0y}!^2XrntVlU;2Rx@8g+&Jm^CEKG( zO#+(IgnXLVLu|!V99A`RsSVO{EXE3Ln9|KoK~JIiQJ+q zcfG+N(FaW;=N5?7W8hEH1UoXC1DE6;Y#rvz=&R5AeDm>#i8D#v7(@ zVv~`2iVb)D2)|JH)b=3n-Xt(o{!d@+a{so=wuh1P{^v)Zf}l?8(g=KKUtLL%e{4}5 zVIxJWo@qYwsjjk=)EDJk1~ijLhBY7Z!s~-eg5bAZTUP6!wRAzQ1s%>)GJgJ9#;I$o zhlJ*LL(+Ly4?FMxbt}^$fXRwJ4z-P>vJ^9{j9c!_Le{)f{d96O{|(cwS-sKVEGpCp zini>;cC_N?#PkiDvj6s14%1*vE4C5sZgN$cY{e9ruNt$e!4-S7ZH=ogk;H zeufGsnooy_O#9@w16#j;fMw!~#MZr1?Qkq(fw8S`I0_m(TFgo5H2LwHrc9wzwU)s2 zXa8(Gr2>*u9xQ(~qfKx0gq}{uy2roiGQ~>$Y+FQ46b@*7LE|@Lh-EnAD2=b*G53k0-JsXcq$%pf2aF_Mt#iqV#Pl=xqp8`sf6z$5#Swr3*Kk|~K`HiT1jJK?#X#VU_ z;x#>>lD*DY%&f^Dq+crW%iM#Q96MGBiC?cPBuEMde{#aQc9`pT`(Wz#*cZvut5NCIFzP|ffhHhIc5 zG{MfG>Ks{nYBX1ISn9C^eevCA(OYI(+sLCR8i_m8U9;gLpOJ~k8XW#R$;n=AJ#>FKmIf%!_B_C(!ceX3E&l1vdTee$q6mf%( zwH6(Pb=KF%)s&6T6eo+pm-1%F;vJhRO1^t6-?`|5 z6z3k>V$TSOkR{|md`#S6pMPe`nRsoC;}69C6(Axk-NL2FuiwL%hB>mSsyeBW!`ar2A@y>n<#$ltxg_iEC>`J`El&g+ag|i^t;*P z!H)}ncDqWwP2u*QKP-K{&Q30+)Du6x%9o2yvhb=HtW?88;vQ+2nkFcuUaq1olMA)d zTzOg)48FOx+9_0!+07X9c^x1qU~l`Sa>}-|jAn3#!Twd(wsfBxm zce&SXD7}U_+b_%L@Bj2niB793vx@+%0cT&2w=Fn0u;3W^Hk0;ImiZPZMQ(>|!Dt8Y zq9?)cT|eDdy>9W13bRJ9jBE+ch&g)304z6cEBRm_9L) zd_mKrgXNjPU}_4JErRVrj~wmKL|V;MPt`XUZAW&lGb8h6n>_W8mr(gy&UJ3|!)m72 zE38&873YBqZ0nyTpUCm)GtSH|mY7z(Hq+VzoVT#UMj~Uj?L|yA2v4S#^ylq|%~Z~N zvz;4-5ge)=&sM$=I4g@0*~jYPHtzvfrOjGp4_=gI374X>+U2ZLzZ6(FJ$ghHJ zH>d?HN>yV?mGJjMhNKyNJ9-eh{1&#-EA1-3v!WEP-94%d9Ffqrh98VWwYu&KVz~mJ z4uW@6NI~K*bd-Y&;2MWLR`jS~Z`>dat?#tGk_4=2WwgVSz7+|5U4f93%GK63R6=yCI9AkjOnw zwXA}vxusu8O$fI7E8cML=T}|4># zkC}b5FL!od?7whk&U0q&b3fNbfr2H5O@3m0h%C%2zg_%hHo*Jbud~hL&9@;8JSEg_ zdTh5e8oYB+ZK%WfzFkAdBGLU$w!7m>`DPkE=AX6a8xZ-F(-ZA!yf*cf5f3bus=>8r znY>ljHqs(ek4p$(ztShjEmx5#KUPO8GqiIMIDKsJDJV;S0KQgF-?SexI-KU$?K^Db z)%IL@vW2|X>0C6I;omhiyKA{ZzI1PUnU(*qy|nrD6<|ce*_$$F*@CT-3QAUf7Ila*@_9Nk9=BRAY_%m2NH$LvW@b6S zV2GRD7g2jmJ7{<7c~=TkQ_Nx-SZo%zbxbdgC~FWhR)1UO!#(l#5-utsJ~aDf7y7eH zy#So-b2=(zXT19N$@{LajNJO|>AvQ_b*D|{pGn3mKlm!7u6hOuq>QxCQETRnYj)jG zzhEWaUfSY%6+~LeCRC1+qP)1WytA){-l?$ucea=os7JatH7hrk7dz?48O~ znNo;RKJbsx)TW0Wkf`ZB?aFSC%_df5Q4DPr>19qC*1&c=0;`oPC7V^3ZvU5map6au z809DK*P$pVx?}AamgGx55d>rX&=QBPBVWTQeN|$zLGOqu;_TGJXaueC_WZFO`??U*h9b!E!|WB%FS?5*-fg z=daG%iOiGbu!-mLl;$4#d z6GF|5jz%xysf4l?Ut#c{ayb}}wiw=447#K3SF=FAvY<0s;0xUqm*OQK^WVjOlj>zb z^*P%|uQh*rQHyfs;Ch6Za)tlP?629Omb3Wi|?{BigB4D5(Z<8A3+} zTSY|nv2)7mWzQ3gVP^>+Nl0+bZVh-6&-eV68DjuAN=sY^t`8UC4jTU@3xSwqLj8cU zB^_^cYN|c{47Hkjl3y{9Q*3xpiwC(l!#&*$m^9jInpbE#Xk+Lr$uM>Ee(tc~7_ikO zFXTq~)KEne=BY)`kAP&+2E9UTd_Dx(g*h})-7Qn6r!7wy@EpKXYFr@!=p5F6RZqHvmRSwq^ zrLyVrmPV2c88rp!?Qd*Pt~2T&HC@_b+jI%PyTGW~v^$4vN)@j1#z`lq1n9esyJ=4C zb&AQ8f-;XjDStKNnJ4%?a8eU=;(nr4{(eJBA{wnj8+_P7?|kA>l^lMCNAIVeZA8Z2 zz8jCjBOsl2v0(roPs8~_r)2Z5fN$UM$|gmI*MrE%0mZwyY!KN zmUAJ*yU(tOL#}wKC&S@cM=8J_Sw(1Uz8ipK(Ho+qYi+fi?a<8>UrHJH)^5QKEKc?o z-*$9|HLs)2qyg9hQSkY~gHnEAg<(E)Zjr&$U~ptBP3$T`Awndd8?_ZU=fizI@m0+nUwL!0ZtH zFHDwE887;Q%!FqqB!ZxqOYFzFyZC8$!!2U9pl?9MPpG>4uBx#70nwd{7@n`~pqFH7LB3lNdG zm$r`v3J9uCxgYKIX5bA!nGeO^E-9>s<~>4C<~ADEOY&4L!;2|Xi3ahxRbNoIOe#XM zFSlEIL}zJ3&?>{85^qb3Xe-PiYqrF;{1eS#tz4H)BU&ddAqo{(ePhGeXd1OnPA4>ef_uQ%mV&Dmm2 zqFNBw33uD9V_^dJ%U~YK#-=e3FjfD}y{365M=bLppNSTZJq2-f0#7Nc*^f@LgB0;FK^s5V@T1Y(uSF|ossTSMA<uA| zIWoem1-euRFO^$PB%QB8=w%+Az(`XWE5y&15R=7%(*JL+)Vth5^prXM1=13ZC$+vh zyBp!H-*inyu7adohGC+25^hU#EyHVdkHJ(!_|OAj8!MVA+M8BMdoWbw`J1vlsZM-? z6cA%Fzf*6*mW;9R@@Fq_i0RwDt1D)j%s4Q4Rue!>8=gptJIU{zYNSD2K*%Y@6F-rf zgRaJ5R92ok!>C0F-x#GVZu;WfN@sWLz@xRmV!@k4;6$ z#$Xeob8cE;)dQdeJ$BkWhDmUlANo5;w0mfP_D}I0l~`)ry5J#mgawu`#2df;@`oDw zI0xo(aTS`dSe74}kL(i}IS0 zCPqZ&?hq9=_3*yV)0TG)U(wSSWZ!Cd+)UDl2Yt8{dVZq|+e=PQ)E2sM$<&BLUiMTa zAwm7T=oNv^PF4twDi38pmGNw1pbT!P_PlvO!;%E1jq@IFw3@TqyXHv5C|RWgA8|I; zn_%ulYG#(~L$1Vfh(P9+K=?`{7o}rYC280B5|_r+kzm5;!{2mPPOZck@Vt-%;{xJ2 zPpuHUcSDeTM#VjxtGJr=?JRFjG{<#{N%9=sq`SC^pyd%db z&NJM4ngS>>GmfrTpMfi^|3XxUQi@;Dea~a)ze`a-w;|2s^p%**6D{Tp6NwWCaV%U1 z#?FM1ZEW_b+qZ4RId}wr2?m}_Xt;sFk&67P9Ck|_Am zv_dt~R=D{MRH2{kTCwHfY_^O+t^`P__$D@`VNs=sl+QUp(}Zxpu~zh63}&KsO3!#8 znE-4h9nh4fNwKOo5BYY%KaRPIhZW5U{|!r{#eu6}?J6J4^Yc!!>8fRj6$~IABVep= zmX$IN0we5y0+Zz&&Os&iG#;WPO0*0XZ=9K=l6>ZEfy-99ur2H-eR znQGq;n5`$g+oT|jB#^o*?h79~YVpL{WCL^d^|aCkQEb@dmH`&@JoDShCiUNmdd176 zn!5BQLKYPMBgsl9`5-uHA?s&eqsYlDWq}k?C>5%BJVbkItnQ5lv+WrZlQhoQ_(amn z{vSEE9_t$u!PLjk@q1q#6Aa=s2sr=Y5ZdD)F&T_Ah5nUCU%|T2gr4y`rrynY>Dp%( zm^^E<+!@j_3RGb9`JQ1(hDm`d{7T-x6%FPz%ajXPro2utR)EuVsGHhtZ~#v}?|%BL znXyI3n3d+SM!*~KQ=)SkDPDjj?07p`Jd>og&}@mXxlUj6_wYB;`oR*T@*KW}IJcBW6$#B!5zV-)P^HP_D@*;nEzt*D?im(bvSW&w zb&`U`;J~+zEwJCBVQ=woH0QlX_fow;g@2#vW81)+qKFC{X$KPZwKZ^EvA&4`n~`d3oWPgE^*=#6P4>(}yzxpi zZ+n{W1Vm~CX0*SxG1#gaSb2q?O;7tP=b|SAN0SdMK-CVXf2|DjmX zI9(`SMFs14RtK!tQru5rZD0JtjoPPH4^v-k*X4g!Aeb&evB+X~Rh*PS3tKT*XFpai z-!wSOt7|Z}kuHA{2*RMjc-lOJRv z01giUmETz;^^|+A_b8(IXg^{l6yCMY`-GUW9Umr;V8)yI0*VZsw9J9|+v#&KRxy7K zHo46^gN%c@=*aiGpX-mmcyw`(41x6xrMfd$n516n-|? zyqU^TK;$td(!!V+B@0+&CH52d29T)IJ#oG5Kc-W+O!51J4_V5=0!)l{ zfecPHdaMKaSFiZP`H(4-jeuN?mrux*i(CcFOx~kUWzFMU+=U{mdnVgn*@D=>HIOg# zBUD+)MGlhYdlug$ew@j`EGpjwBCZFU1Da z>PPkgO3M zvmv5%q%G$=ze}H$r5f`19%kvafrqL>QrmKMNuhSK9_paY?v`6Z;o9UvsnMm^s*@om zcQ_XFm{<{J>wZ)q2%;PC(a;3Aerel} zg?-<-&q`dWhGo)RsyAMrrHWrgd@#osQUcR7vcC=m-`)LZKVCr48r)Bow1Y?yuu}G&#$OMB3IyqJb zPA|Ev>Z;7+8HQaZ;DUcuSWkzdlK+iuk%Y{32)nF#yAt12YH z;1u6vnq$x|7-S`_5^{J_kQfdZV){;@N?jDagvYF6z0IIp_hDRVSFuJW13o zLH1ndC^U@6`YZfQXIO^pUX$x)7^3`^XIdwY_8ZSi0>g#g9ew5=G?ns>%=Hmk(#bF? zp(NXR4T_j}emCS<{?2w=jDr&}2f*JS=GPXcbX7G>+(PX+>GWbHBYK&r*aaxwez&*Z z=!XK=S3Gw#gdNe_=QS%yawt5%YsfjIgW62%RhbNiP_HZ*HJk&9??Vi8Ik)0;YJ6S) zTy?VjMbsR;zB9(f4SDXR#fc zME0gsjLe@~9yCYMCN=gv2k8DgZZq{A8bz}J9iX4yF*G>{YVM-QseAOfp*$vWqidj- zP%=FO#1A(5ROCc1K*9z+H~*s*eD6>Q~|3=ZVCNKPN|7or=7+nO0p!N-~bi^t`$=Xdx0lU+O;`1 znCH?lXO{THN;#0>%>(Dqa59MEEwak@je3qnWz8&W6O~^0-lt znxe)!?6~krA{&@5NKW^a=qnAO+L$W7E6{!!H7w!Ll@qOW<2aT4li2o=SP!=-(l$zR z9K#}?eU4a|a<+4ncmW%UQ(vM>aiC-x7Sy5?SUcWr_UwN3!dX&uQb*&yo zrQJ01k*TfUH{1^m#6u_Ci%?*&yzEu&O@gnq*lina?oM-k+@fgO-Rov!17I+=vTm3~ z`D-9M&<-+~Ea2`xaoygKyfu&Btc73J%w-KS{KfJ4+ewu)$YyNFk?`_e=|iP|Fi6m! z8RhwUw8n%0E!ufv$&d5JxpRxRngax0E?z^$r+|ePE$CkU(z9$)s;#!QlS6L7ThoAa z^t0n3>*B_qYAIjniRz(;TU{g`?s@SBlmDJH1!4!(W|*>67@XRkh(Ic@dT4 zTz1!+4jL@se#)ey`BE2=bX?!vcbC{?!L3vLawKPJtA`qHCq)WDiDXnC6CDG!x{dhp z8Us-4q`vc=*<6JExCj*pLP+Oc`9aY^!~*#)(^H>k-jRp8=Wi#V`y~Ow(^we=>mJJ} zxXE*4lV0pssWu_53)qz?-;6j*@b;B_@mN3iix>GQ?9}kGEZj65U0m5mjwayC=V9cD zb0F&+-1U0f`#CVSVC>%sIksG@CM8h(%jT+yP6v*Cz%*VbiYNQLk4<=QyOe&X7M}D` z2^g6X<4lQ3z(Z0{4nCBi{o5?-*T%M~RSQ5%HOChW+0R-GJGUJs&$^0w8+vBB+1BSg zEK-SdeRPP)mPi1xPtXGR!e$$JdV{}@a~3MMbS&!(V0v1xt7|Y**Eaw}fK9cKZNoP+ z(jGy5(jCo4v*8ZOGc*e9bA9U)Nh|_g%jIi;GLb*dzx*L|OFlMoI%XfJwKWgSP%z^3A2sn2)!ACMkc^ z+saTDq6|uepjxjmjvxGv*~Zz&)V^4Nd=ElgJ3Q2d8()%oB*+~7<=ND&yWeQq5Odj% z%m!w_;)+O^;_ay?@2#0A3y%BQ*?4RTF03X+XDQjm+;!?oPUWE9y{GZD;-LV+C*!hk zqoo%*#W%hsMKiyL#}4Fzi#{19qO`Wmn-gEj4p`$~leW;kb@+6y(%g7oGK5v9Ieik@ zjZs8RcArw>?0jdBH64M!@SgL1qelS=zHx9b+m(Ouuu2HKt^m$k%ccjbrV(XMTq81* zo?Fmpum0i}g6$=fWR*2ibZYm?>~CVb!g@k`oLfAYA0nWK=q1U=nNoQ}gY!~!6#=u_ zN6?)gWH(bLTHStwIKg)nx&6k*YAaPO4xNc1HVc(rsQ_z}dX8a6Ii9uP38FB%6eCtE z`xQ=0^TD5PSrTKBedahq!lS6)5}L+29I%MR9c7b5fzsinR~x`kKmyK2c7FDBL9(BK*wouqyL#zkK1Ru~7Y780LbxMRhU+&o7z(Pr&{azgf`gxIizN1 z`(j|)Pnicx#flYhTyS%Itr4#vAsc<_oX{%`m`Yh=4vfs8l_p>J9H`V*eI!B%)TqTS z{{1lVu&I84Ke+c-(>G^@H!`xgNk6yir%T*bH7!BRD8pBqvkX+nQBrcLNdWI>9UlT| zO$a`zHoUS~-vYV$!=zwrWN&zZKv4YY&6dg26JFejhaeA|BlwNx<~mGW*j>|VjL-6E zna{imNJ6}t9RUBC zpkqkhHFj+xjc-t2%Jx>qWN1|WWw^|gT zyKz=etK{W4B62r-<@A>meobnFu^8_yE9+7v*I+k~UrdI5G2Q<^FI4N9Ut;p9Y zIUSD=_;Z>ALUc=*bMhCT?RVfB)i;+x*TyQx;x2}=#0Pw!EJ&5<6nW}?0u#Rixp~IC zBBrDHgZP(ED%v?#>gR7ge<<)8S4i1kqUbPva55F6d()QXzRw)wn^4)b+k{)OZu8=GB^YW37|niFCMdBPG`=y{HfZmQHqp|9?P z<(+WF{^jH9Bjprpb0~&I`At)j99lmp_~i~Wu2r*H?-gDSSNDN_MNa8W+Z;onW4H*Hi)S;!~O^VY!viZb)*4egog=*OcC!*Yi^R2cvxs`P96^%Z@H>)`+6EllZK`c{?-K`WN|W z$C}?aYt;lx=ddeWOjixms7^$jC**!%>}HQLcUa6W#;ef%F6+R+gI}jyh8oA!6(KCN7_Go@I} z82l(e6}bOVd-=vqnu?J-lk3LfiEEm9I$B%jR&xH-P>up`LU*mB;{DqgZt-N$)X+I- z$+gn7mBL;4iOH@vwa%7I-?X-FoNHIf7y+OogpB66_qb{N6nR%t+T?4|W*r7yDtt<= zNjVB6N?bX9N~R%UM|bu}-@6zgs!wcjY40-T^;duRW|j!>I6W5aG-MwO$6J2au2bB! zTW{*N=$2=MUC?DEmpBf6ancFX#13T;l!`t!B3XHas9>AT2@wFzVkmshilcoeZqU%4 zV6G8zCi$dde(;sKIGE8NS>6x)af3<&C@J49tC#8pgpNuYaFa*WeabVPBG*sK#I zMC47Fcp>sN6S7mQiP6&b%4f(uiN5{(VY6sJN{R>Ryak`{GBW{JnF-=}W|fO9i`efy zXLqMcEen5_gdsG1D66fjA>(cQEAM(`yM&E8#4O@Na$LT$>QXc`wqHxf#f5X-i7Xe! zH?r+}mL!b3<<=y^={bKVSxaec?EbM&yR)@sNp6v6$UROfqe;R^P_oQt9O528BKNi~ zR6v6HUgCq#QMYp~T_hN;`FlSqfv!(C5#sbID>7-Gn9a)ZUAK1mL}T_*C$H7_gMHa8 z6HpGnuwMYp@^*eQFMl_86l3XXLjf9PG*^rg+d$RJ)@RCH}(O_VmF zc7t_8!H1|p<2FgV*!Nhz$T~_T?xB&2+OXPk+Vo?9zpuFMw=eXF;=h|;IjQf0gsp@8 zalP6VQq^HsVbq1o|I|s)j+s*;5py|Sx@>~7)E-j2S$0V@L>k#g+LgW>@)M4vwHJEo z!F3j^r9Qa(b9`Nn84bB}fm;*@kIPuGoTe;Fd7VeC>?NZxt_@aP_JKia)R_@6$9AF) zHBbKVI_$Jr_3Zp;VcHqnA1r2^miwoQ001g~A|Olc z-5T&WPoby{ZcIKO_{nE-8f{RPXWgW|7BiU>rO|9!qpbA?9zxJ-nR%jqho$B>D9+OV z#Ah4R4sK>OeYmfoB^T1*QYlC09d;@@U6Kxgg)7FDCZ z;yskR&ANO`jf&nDp`uZ%Upz0{`84U~>yGQlpEKI$1%NH?3aYvQOF%oLIbN#2!I1^5 zJaxZXAJ_7B-zNQX7j0R8fZm0kJ+$-!=mAlNjr7`l|XX?w#{h)+piTb79P za(4*|vFs)_WVX=r;VDYw>9lq5Z=Mb=qPC+zixA2qFN{)1R*%YuP3qYj)qR;Lb~wwQ z?(}~{LCPezR=dPZKPU2APffY!8zJ5q#l43So$_o^-+0wNmnUy#VUGH6-ENNYz@+q` z`Js3Nh4QGQ2znJsR7iTWT>FfRC2M#9hS?AFH(Us*<;05S@vEI2US*Z*OHa$RM3OX; z^fkl!Tk@Dk8sZh%|DhOGs0pkl|GHAlZN0KnuX*o!V1jay;l6iSDp{I)@X+y1$rZMc zr)K}0)%@kVs77kTT>b9ztJM=N!5W^AWl|!vhmp_|ZQ%tiI2)&am!Oa$*hW9k`#9=7 z8iNPyc4YnWy`=lc+Tj;%CjS;GibweE#um~bZN|v|B6^N81yKH|Ws{UmiJx>y70@gq z$O3aLi{2Q3TCn(5l}a`g+$8~Z|F)kR(V7_Z(nN%=bE(5spkopmH$(% zGK=9HUJ~e*@=tDUML72ZTeUeXLt8#V1{K7PmsX@+UY^hR;D>0w-5n;Uha5X-LlO`9C5TedU?$X(^JF?(Km)T=<<} z3^HMMv{_K=SNJX#?tUt@um+(2OZr;i>%ntYueC57lpllE;ppo(-wM^KOqwZ^fhu(M$Q>fJTAt01VdeNLYDdz?9MDqO3B@%>8tQjP!9@r%zf^o4$8L zb3#q&*iT%ZO9RgF*#RaS3G<}>$pGK|vQ09r*}XdPnv!y#5VnT2Ii1j-4t_2XZ!OMM z`1ZVUfDycMSeYL?3F>=_h<#9BQ+_RzI##g|UsHc1%S{aMp#(goPg|sK`dkG1K3)z* zgf&Q9RvH>zqQW_5nr9yr z*n$v)2`>$BrYHH}^TawNc*oygn4^v;GEAq6-l&qF5o2cSP`%c@=dv_@Ay>fvka%^Y z;c5kC8N55+SGVhv27l=*Ek=8!B6FCD37%h*7_U`n@n03=wv(a7w_OA(p*VtHCOx59_TutqaDl{lm5}AJvwX$h zd{0b;Ee(a#kC9Ws9IE~4Dd0IsC~E0MV3c4=G~<2+C$ojTDCZ^&)5`j!@x$G^*{hEm z{R8#XV)<6%buxT+E9X_lyY-|Sby%f*HsIfXj9%nujeC9`u!mX+KK!iHRP7vWC`s*a zQFAj1BqMd9`nl^H+`L5m*2Mg{tFtH(M?<|{r*+0dId}zSPXj14E%1FYY~ptZLo_2R zX+1|y7Dbv1k9ny|cMVemB0lNtPZ^q&XRgVxIYF(L1+5CpiwRyIwsxrF8R+2Cas8XJ z3^X#M0QV*tuK6^pU%|!N4#C4lm2GHw%E^XJ+fitsCpx^ZQ7Mse+Aw=%YlpZ~!$^BH zW|sKQbj}4QN!yr{NZNE7j>eXkVSz7zyS2`WG1Ed~*VIBi(>hN3DgXaEbYUBPX|9<1 zKg?1i&tq+@s+*SFMa)gqKUzjnhM|nl+!Oh;a`XQ9^HejNxe_W}QeX$cumjk^kryw7 zv`LNx#s5Q*?LnTb^7izyRGnyc3*|v?JHwHKl>;>oHzD|@-3dyGz4PvM)cA@vKkYt9 z31)*rR1_Dm|36G#8d_|%z8|yWIb@sjA=#+7avCT85eZ@qEXUVJrHPX}*ZV=SJ3$4C zm&zwL>jfMypKoF?Zl?&SYpTFE942$1^=X%Z-3?O;Skt`ll1-8kgb9ffi{CmSF=krk zWgnN+=wz$|ilFmrZHYV;8260GsT^A$dZMxC7g*+)-;hDk>0KVtNlo4WEt|+U--w3G zDOBEFd9Yeb)upoYc4+kY(?Zd%fGHHMbRD^UBSW;U*mAb-1pvAqyOw9RuOa|q6M%L| zEIx+Rm`z-sDI8dqhw!MsJsH!@P#=`}+RYqtuD$amAmGGTv&MT-EeoTiicXlXdJ=_L zTMD2D-vjk?d!51em)_4b{Jg>ra_XlL_Ye=y6Jh9lc5xh_6pDJ>S>FC1iu^=8EBV|p zg>N1=Tc%kaBheITFx_h+1`GOsKdeqLzskuN3q^?U>$55eV1DQI8mDUyg%tFKwb?Qr zMAH6w0uS5-@A}AV_X>9|XdVN;Igb5h?r4|5FbYo5Ng-|e?{K7jlB(=bg)+NhA(h+q z!Q%jN91`*jW$-zbq*x!&iD~O{V5J($N>b~!szFbYZ#dQsk$<0KO7@PxGW}XL9_*TL zWcGf2C?Vl(>f#y-%!$ZQV#b409mak_8AHMGs_=OT%5~dHi zk}@#c^r! zx_+CD;j zed}BJ)>UN)l|W-}7a)GTc~X2W3<@7a(S0g4Q`Gn+3hjyvukEj(FExqNb$ahu!L74K zuzAV@lB6$<2)FXSZs$V>af;IfO#FWH0NE(xb0eow^b!;JgFL(A@cU*$*CD%Wx?tsDNT4|SDB0fRo8jaL6`W@3O95jGHAK@hfL4iDrNTqGBwGFgOP}?&jKAW@m zy1AiE)TQWqzt8P_?;&}Y-%Kep*UkBIzQIR;)WX8NT`I;DF01FCMqIsM$_eaAr+4jK z^31A3D)>5CmK7aaADtDo^9oDV|8@2*+)Cbl`mypWWTi<>n#4OSc2|hbrVB_DwWyRt zx-7wie74=T;0mi^--HOk`@Z%~QP=d|yuGmEtniEVciTfqG{Z|^GlYA|KL=2_jU4y& z?-~ntC9y)lhu?c9!dtf%VHq^O<(j6@26f}(>Y%ihrf_nH->p^OC!fOx)9@^{U!y6l z7M%{bP6>wqB2G}EqxA6G9Vfd$4 zeNFNa3yjyIzaN5`92#Nz`;B;Q$*IEC{7r7Jvw8l*a7E`P6`txXkXGOBq(ye~HRGg}J#Z(v(+a82r{d)8(5qfOV=Tsq4x zuWie*G%8V$jXUZ+6bM_L*5GdNcggqA>>}^FmTAbdXfw$~=eYQAgS7k_EM+1$c zm-iJ=3tFA_b%)&eHDIU{oL1OX!q;%r@{3uvPw@nJL}mXCIbK=+U0lHEW>a~Kefti~I!NtQUHUv_DuC)Nxhl3Nwft3l z%_nJm)vnF7g+A%qw}9aX{3vsVq1@RT4tEqw;OVCVHsV&?9m2+Bn(~}h^K0na5Er&Dl>%^SL6*AlZ3~|wJ5)Gza<#CG}oIB zMAhSq^khkc*4WMtZ+#iAOYp{ z90d*EKL}rcLjH4Q5;oLenIYyd3HJ~k0lnvc5_r)kq5K! zF88*)S*0=L%4I`&5?k;M(x;wF6EU$d>JgX<`=1wpU`xMoX~*Wr5FZ^ux;LRDMBYnj zmUQAt`AKzyPdq%6oLv&?)Z6&}FdSwae$wV9M7MVhy{WpC)&sr?4PA6El6Bv@C%>MS zf~KG<8-=dG%E7PzEQ$NuYmx=y<{Oi_(1VT)!?wAj)>UEB_sS<+VOnVx-mj+h25;%} zEz@LU8kU~#mOaB$*Fy$3oPW$_;9+sKYxS$fQ6+gT)k^>!>M({q8+e*_D;$?39ey5D zr!IKBUvN?Mil0(H&yxa~XEym~Z%B6_5^8qpGFy_0&9UFp7tj}jbC2lW($wRq(K5pC z>0H0^ej4h){iy=X^*Nh|+b9qjB7(bztmbJ5b#r zj?kG;nDg@6%}t~!#}}ADj*{w%c=`bAm&ZC1<1lP~CRPu+^wr7FTXh8M5c+Q)Z5_0@B({5SbuYs?F1dh+Gm ze%n`@+~MiV&#k&dwS2p^Rs;3A)wir$HbTiL$9nmoi<6wN|Dn_{B7a=ZbybA_QXz`ASz`6u!fveiH*->=kk1!Q|FOCnO>CM9CA+2`5Pk3Ek{trH}ua_8jLuOGd7% z7V;T-As!HNT`i=7iLYSU&|sptTW@rlFWh^x-iO;f4RFq3Cx+N17_qv3OKTx>B^VQU zq3-?B^BWA)9rQB$B^8c_t!4na4+*IdmuJxQfEpe5e%>h}ngA!2WK|Dp>2c)$rxU%i zdCwLm{MnK!{XRH;pMr1O6Hh%igRtcrl*&#|vi58)V z&Q<8y(}XZjo(13JBkZO%n9rh`om^XHcR~8>M|d}WiBuv$tAi9aTL3vzn%I(mV6wl( zWN0a~N9MZszvJ>X);=Bxn{II91^B`y^O_Ylk&ZayoTtnSjWuD1z5ngJ`H<&x9xi_b zZN7Y>9gzNL(7*f3v+!N)H$yd~#LmV`>%=qO1d}xHy0A#~2!~XDcCG}g#jQ(gDC^Gw zm9G;RU#fSTju(OaJvj-jM$!|Lsw{o>Y>UesF{iz<=&%Y_Bc)p($%hR3gs z*6;sO{pY1Q5coF9LD|UOn{j1GP}X!hEd}iw=S3}#R1w7hKRW?aW24BwBA-jc>i~>! z_Ves@-EVF6a42~r$$2OzUEgDz+)~q85mPtHeTF#wq-~drV9+Drj@F1r%=KD(DBRy3 zFIjRc^6)|^=VY)s&$@H48XS42(dU=^75DFl*kL$CbAE03$8I7W2{qZL@ z$Y)J9+xFAn9$V#@x#4Jc+#QZ*CGmKu>p1`PXHjeO#HtS(gLFsT}x5Xc5;}V zg~VsYn0v%ra}X=2Fu|m3Xtd85VZ?||C~M$~#n~}af<1Mms zTnVbj>_G?ZSXF{ht{;I?2i^k$eYF#Q;z19y@6Hoz6bT1h`aC*qT7)%ow-!R3DHu6K z$Gr?Bf=(JaZ7lljA!?9&*QD&nV87j-=PF*&Q>bvZR;*CNS00z8*~b2R#mHJrw!6QX zRf4}(qo8~qVUH0k&fb%L#h6OUj;0BWnlnaxSr{bYxk}}VwTdCyP#76Zb}xZ?2lUr@ z(aVEtZQcu6`RP}~{ndXrY-3-oYfCBY8xqOvSnt60c15@&EOJ()7Ce)3Ch*Vg)kCD~uy1g9)jfWiU?RXg;jA zCE*$jvLg)@GqY)JIp0E@6II=Xu|K!|9VQPT%=Td7>}}L~4s5ma^*-%MchlrSemFZ^Rqnkkz~)r|>tnJ%+qtEyOu= zI!yEf+IHnvciakRXPMM7=vd=frkwEY>&7~F-x*cbwl}H;6YmkEDr^jDuPjsC>3Ls+ z7d>IRP1bWk-|`~O^96!mwT4Ro(GJFLwxOB67ob(#)jCdk<)8Tco*~_eSwm~8sr=kl zx8uEm1mChXZlpOVvxIt|cM0kKd03@DQicA)*to?ty-%8nurL(w(q7HuX)n|e$}^ok z!SrLt7kkR}#)FTF&)S#y23hVlpp(V-k#2n+rIi2k+*|5f%;}uMmsoZvFEn}CG7qo= z#y}5cV#C+@bHHFTpohEt>(fc;Y=Z$_OXqJ0>%;XFV- zT8`uCv}0f#q0cbE85DIxAh;$D8FtzyI^@)J}cMOgBZ7MEN%EB9GC(7NVYkR78m}Bha8!sMx|(j>5__^) zmd73TLE2*Rmd*8-1c#1;FEsU9y!hr7n_SWaGOw+v4XzHnHQ8_ku-=2i7U`r-qG_#jN zu86_0BTlKPM}jFTK8Bc{hM0}n%YO-lIW3^e+v+F1?o{bjltoOL4eqmt32NWKmSznm zZ<%DK2^t9**NjRs)T z^xp~a;w^4Q6j{LdSQ*xd*WJx%v678U%=8(n7#?0?m$Evl~5V0tnZ{eQ{9aZ|` z2Wc5iArqzF$W=^LoY9tV*^N#|kD`FRdg1x*x^6zEYYGvO<&Hf3`L>339P(dYW;5G7 z`DjtmXp7NtwrS~KVuXXtlyKfX*p7PY{~4QHxD31Uci{1BNou5jZU`s6PJgiW&k9S~ z(^hDEN(%uG))1@wqiXudZ!x>WkN!JFHZG)B%0DJYdMfn|`AXnB8^{`Kdwy!BzNq92 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�ef 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 literal 0 HcmV?d00001 diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.31版本/更新说明_3_31.txt b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.31版本/更新说明_3_31.txt new file mode 100644 index 0000000..3376dce --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/3.31版本/更新说明_3_31.txt @@ -0,0 +1,8 @@ +更新时间:2025年3月31日 +1.修复了GLOBAL_LLM_CONFIG在子进程里数值传递的问题。 + +2.新增大模型的日志保存:ai_analysis.log + +3.新增反手代码:平空开多,平多开空。 + +4.优化了日志输出,减少了冗余输出,监控时更加清晰。 \ No newline at end of file diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/.vscode/settings.json b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/.vscode/settings.json new file mode 100644 index 0000000..457f44d --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.analysis.typeCheckingMode": "basic" +} \ No newline at end of file diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/04.02更新日志.txt b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/04.02更新日志.txt new file mode 100644 index 0000000..314defc --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/04.02更新日志.txt @@ -0,0 +1,16 @@ +04.02更新: + +1.修复log已创建,无法新建连接不到行情的问题。原因:多进程问题。 + +2.修复固定止损止盈莫名改动的问题。原因: 成交回报那里又重新赋值了一次。 + +3.修复持仓信息保存报错进程问题。原因:多进程问题。 + +4.增加定时启动.py,可以24小时无人值守自动重启程序。 + +5.修复保存下午收盘与夜盘收盘最后一个bar数据未保存问题。 + +6.改善日志输出。 + +7.调整if __name__ == '__main__':代码的整洁 + diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506_ofdata.json b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506_ofdata.json new file mode 100644 index 0000000..85c4af0 --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506_ofdata.json @@ -0,0 +1,387 @@ +{"price":["728.08","728.1","728.12","728.14","728.16","728.18","728.2","728.24","728.26","728.28","728.3","728.32","728.34","728.36","728.38","728.4","728.42","728.44","728.46","728.48","728.5","728.52","728.54","728.56","728.58","728.6","728.62","728.64","728.66","728.68","728.7","728.72","728.74","728.76","728.78","728.8","728.82","728.84","728.86","728.88","728.9","728.92"],"Ask":[0,43,0,14,12,79,8,0,42,54,10,6,40,9,11,0,35,97,139,71,77,28,19,90,6,18,11,24,23,149,63,57,153,61,53,143,30,0,19,0,28,53],"Bid":[17,50,3,46,18,24,16,15,80,26,49,18,13,3,11,19,79,104,64,6,49,21,35,24,10,21,19,0,42,63,75,64,80,74,69,0,19,98,84,29,26,45],"symbol":"au2506","datetime":"2025-03-31 13:33:00","delta":167.0,"close":728.08,"open":728.5,"high":728.92,"low":728.08,"volume":3900,"dj":-1,"dayma":728.08,"delta累计":167.0} +{"price":["728.1","728.12","728.14","728.16","728.18","728.2","728.22","728.24","728.26","728.28","728.3","728.32","728.34","728.36","728.38","728.4","728.42","728.44","728.46"],"Ask":[0,27,27,79,19,59,80,14,1,41,62,110,23,87,34,58,101,38,10],"Bid":[36,9,92,78,17,50,28,3,6,33,61,61,63,91,2,16,39,20,0],"symbol":"au2506","datetime":"2025-03-31 13:36:00","delta":165.0,"close":728.4,"open":728.1,"high":728.46,"low":728.1,"volume":1721,"dj":0,"dayma":728.24,"delta累计":332.0} +{"price":["728.32","728.34","728.36","728.38","728.4","728.42","728.44","728.46","728.48","728.5","728.52","728.54","728.56","728.58","728.6","728.62","728.64","728.66","728.68","728.7"],"Ask":[0,4,0,0,45,7,99,101,58,86,81,74,72,41,27,32,27,10,20,12],"Bid":[24,20,32,32,38,48,45,53,57,108,48,82,20,25,8,10,25,25,47,0],"symbol":"au2506","datetime":"2025-03-31 13:39:00","delta":49.0,"close":728.64,"open":728.4,"high":728.7,"low":728.32,"volume":1695,"dj":-1,"dayma":728.3733333333,"delta累计":381.0} +{"price":["728.62","728.64","728.66","728.68","728.7","728.72","728.74","728.76","728.78","728.8","728.82","728.84","728.86","728.88","728.9","728.92","728.94","728.96","728.98","729.0","729.02","729.04"],"Ask":[0,5,8,50,96,31,72,66,84,167,117,96,83,74,25,46,15,56,49,66,39,42],"Bid":[2,0,37,30,0,71,25,56,184,195,37,76,59,16,20,80,46,19,38,0,75,0],"symbol":"au2506","datetime":"2025-03-31 13:42:00","delta":221.0,"close":728.96,"open":728.64,"high":729.04,"low":728.62,"volume":2463,"dj":0,"dayma":728.52,"delta累计":602.0} +{"price":["728.86","728.88","728.9","728.92","728.94","728.96","728.98","729.0","729.02","729.04","729.06","729.08","729.1","729.12","729.14","729.16"],"Ask":[0,44,83,48,116,158,69,180,41,6,2,31,43,78,15,21],"Bid":[37,99,87,80,68,78,80,113,126,20,4,73,23,56,14,0],"symbol":"au2506","datetime":"2025-03-31 13:45:00","delta":-23.0,"close":728.98,"open":728.94,"high":729.16,"low":728.86,"volume":2031,"dj":0,"dayma":728.612,"delta累计":579.0} +{"price":["728.8","728.82","728.84","728.86","728.88","728.9","728.92","728.94","728.96","728.98","729.0","729.02","729.04","729.06","729.08","729.1"],"Ask":[0,68,76,38,95,92,29,50,117,16,7,51,25,25,23,13],"Bid":[17,69,53,89,78,77,88,41,40,0,19,21,22,25,0,0],"symbol":"au2506","datetime":"2025-03-31 13:48:00","delta":86.0,"close":728.9,"open":728.94,"high":729.1,"low":728.8,"volume":1470,"dj":0,"dayma":728.66,"delta累计":665.0} +{"price":["728.62","728.64","728.66","728.68","728.7","728.72","728.74","728.76","728.78","728.8","728.82","728.84","728.86","728.88","728.9","728.92","728.94","728.96","728.98","729.0","729.04"],"Ask":[0,11,105,31,73,68,66,16,91,16,41,17,5,45,52,37,13,13,14,37,11],"Bid":[67,43,86,50,52,92,52,12,123,66,62,16,63,39,75,65,39,0,7,45,0],"symbol":"au2506","datetime":"2025-03-31 13:51:00","delta":-292.0,"close":728.78,"open":728.9,"high":729.04,"low":728.62,"volume":1905,"dj":0,"dayma":728.6771428571,"delta累计":373.0} +{"price":["728.7","728.72","728.74","728.76","728.78","728.8","728.82","728.84","728.86","728.88","728.9","728.92","728.94","728.96","728.98","729.0","729.02","729.04","729.06","729.08","729.1","729.12","729.14","729.16","729.2","729.22","729.24","729.26","729.28","729.3","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.6","729.62","729.68","729.7","729.72","729.74","729.78","729.8","729.82","729.84"],"Ask":[0,0,3,10,73,15,84,24,2,11,26,13,28,29,11,61,30,13,38,22,21,7,14,7,63,7,52,11,29,14,36,20,15,0,9,28,0,16,131,132,34,87,0,39,23,27,33,0,42,0,0,20],"Bid":[3,1,66,17,63,25,39,22,18,18,9,3,20,27,0,0,2,48,6,0,5,10,0,0,0,18,27,40,0,0,16,25,18,9,19,54,17,59,221,87,0,39,16,0,0,0,35,42,72,13,18,0],"symbol":"au2506","datetime":"2025-03-31 13:54:00","delta":163.0,"close":729.82,"open":728.78,"high":729.84,"low":728.7,"volume":2872,"dj":3,"dayma":728.82,"delta累计":536.0} +{"price":["729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18"],"Ask":[0,0,60,96,57,79,140,117,33,38,24,16,56,30,43,89,32,27,52,58,75,234,122,44,71,112,18,83,17,166,20],"Bid":[15,50,68,70,63,98,24,7,56,88,39,63,29,85,99,78,5,35,88,61,97,124,181,31,18,66,26,11,54,29,0],"symbol":"au2506","datetime":"2025-03-31 13:57:00","delta":251.0,"close":729.58,"open":729.82,"high":730.18,"low":729.58,"volume":4085,"dj":0,"dayma":728.9044444444,"delta累计":787.0} +{"price":["729.56","729.58","729.6","729.64","729.66","729.68","729.7","729.72","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0"],"Ask":[0,40,8,10,7,7,4,9,0,5,15,49,116,74,192,78,106,53,19,23,20],"Bid":[10,6,9,0,5,0,0,6,10,74,61,100,144,91,163,126,43,6,10,16,0],"symbol":"au2506","datetime":"2025-03-31 14:00:00","delta":-45.0,"close":729.82,"open":729.58,"high":730.0,"low":729.56,"volume":1866,"dj":0,"dayma":728.996,"delta累计":742.0} +{"price":["729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.24","730.26","730.28","730.3","730.32","730.34","730.36"],"Ask":[0,0,0,42,26,47,37,2,17,56,100,68,4,40,55,40,14,22,9,65,92,116,69,17,0,26,64,34,66,21,15,46,3,19,8,0,11,30,48,0,18,27,16,28,29,75],"Bid":[9,76,33,31,8,18,125,23,66,9,38,6,51,15,45,6,12,57,59,85,137,51,2,56,7,22,7,30,25,29,13,38,21,6,52,28,0,15,56,12,49,0,0,33,64,0],"symbol":"au2506","datetime":"2025-03-31 14:03:00","delta":-3.0,"close":730.28,"open":729.82,"high":730.36,"low":729.44,"volume":3338,"dj":0,"dayma":729.1127272727,"delta累计":739.0} +{"price":["729.98","730.0","730.02","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52"],"Ask":[0,22,6,20,57,27,39,4,79,62,84,71,82,77,73,74,0,16,25,14,42,81,93,70,59,177,24],"Bid":[5,47,16,43,10,55,24,33,87,66,100,40,43,125,19,26,2,22,17,24,77,49,56,32,43,16,0],"symbol":"au2506","datetime":"2025-03-31 14:06:00","delta":301.0,"close":730.46,"open":730.26,"high":730.54,"low":729.98,"volume":2721,"dj":0,"dayma":729.225,"delta累计":1040.0} +{"price":["730.28","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62"],"Ask":[0,0,26,22,51,93,80,141,127,35,113,147,42,51,134,88,17],"Bid":[31,18,25,81,63,102,106,24,51,40,44,56,38,91,35,122,11],"symbol":"au2506","datetime":"2025-03-31 14:09:00","delta":229.0,"close":730.6,"open":730.46,"high":730.62,"low":730.28,"volume":2369,"dj":0,"dayma":729.3307692308,"delta累计":1269.0} +{"price":["730.62","730.64","730.66","730.7","730.72","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.16","731.18"],"Ask":[7,6,30,59,28,0,24,0,24,0,42,153,134,87,61,40,212,35,181,184,114,78,110,76,0,49],"Bid":[0,34,0,0,0,42,22,29,43,75,31,86,75,73,123,90,211,215,128,89,164,70,0,59,13,0],"symbol":"au2506","datetime":"2025-03-31 14:12:00","delta":62.0,"close":731.02,"open":730.62,"high":731.18,"low":730.62,"volume":3869,"dj":0,"dayma":729.4514285714,"delta累计":1331.0} +{"price":["731.02","731.04","731.06","731.08","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.82","731.84","731.86","731.88","731.9","731.92","731.94","731.96","731.98","732.0","732.04","732.06","732.08","732.1"],"Ask":[0,38,43,12,6,31,214,35,85,44,70,89,0,74,150,54,9,123,91,43,68,99,138,20,67,0,71,106,17,22,12,43,0,0,0,0,27,83,73,59,126,60,0,40,31,11,32,45,131,0,0,129,96],"Bid":[19,32,6,13,28,25,71,26,45,27,118,38,17,0,68,29,10,66,44,117,86,11,64,85,40,50,60,84,3,0,0,22,9,20,44,34,20,61,94,311,63,18,20,0,21,0,0,34,11,20,24,0,0],"symbol":"au2506","datetime":"2025-03-31 14:15:00","delta":709.0,"close":731.46,"open":731.06,"high":732.1,"low":731.02,"volume":5522,"dj":0,"dayma":729.5853333333,"delta累计":2040.0} +{"price":["731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5"],"Ask":[24,183,79,126,103,53,110,80,54,104,80,46,73,8,49,62,18,22,6,11,0,7,17,46,61,16],"Bid":[97,55,69,91,92,58,77,59,27,90,48,17,84,44,25,50,18,11,11,0,27,35,34,67,11,0],"symbol":"au2506","datetime":"2025-03-31 14:18:00","delta":241.0,"close":731.06,"open":731.46,"high":731.5,"low":731.0,"volume":2933,"dj":0,"dayma":729.6775,"delta累计":2281.0} +{"price":["730.66","730.68","730.7","730.72","730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12"],"Ask":[20,21,82,94,175,48,90,103,185,97,71,25,28,31,28,14,93,76,88,29,14,55,29,3],"Bid":[41,4,47,149,44,90,72,19,189,52,52,56,113,81,3,46,104,58,56,47,0,30,3,0],"symbol":"au2506","datetime":"2025-03-31 14:21:00","delta":143.0,"close":730.76,"open":731.08,"high":731.12,"low":730.66,"volume":3134,"dj":0,"dayma":729.7411764706,"delta累计":2424.0} +{"price":["730.72","730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16"],"Ask":[0,10,45,44,61,63,17,84,36,45,108,34,82,40,55,60,10,14,75,35,76,25,10],"Bid":[78,13,33,12,34,59,31,35,80,48,27,16,37,61,8,7,50,45,70,36,39,25,14],"symbol":"au2506","datetime":"2025-03-31 14:24:00","delta":171.0,"close":730.94,"open":730.74,"high":731.16,"low":730.72,"volume":2229,"dj":0,"dayma":729.8077777778,"delta累计":2595.0} +{"price":["730.12","730.14","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.66","730.68","730.7","730.72","730.74","730.76","730.8","730.82","730.84","730.86","730.9","730.92","730.94","730.96","730.98"],"Ask":[0,0,66,0,57,25,46,39,34,20,83,23,12,53,62,74,85,26,76,76,52,106,14,29,0,21,26,28,0,27,12,17,0,0,15,4,0,14,22,2],"Bid":[45,49,9,12,15,90,9,85,50,16,60,35,36,73,144,138,127,40,126,121,29,29,12,33,9,0,6,35,6,4,8,37,4,2,13,0,20,9,5,0],"symbol":"au2506","datetime":"2025-03-31 14:27:00","delta":-295.0,"close":730.18,"open":730.92,"high":730.98,"low":730.12,"volume":3009,"dj":0,"dayma":729.8273684211,"delta累计":2300.0} +{"price":["730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66"],"Ask":[16,40,5,2,45,27,2,114,112,27,50,73,115,46,16,19,34,78,29,22,37,27,119,44,74,14],"Bid":[13,19,5,0,7,26,43,91,63,20,53,47,100,22,8,41,44,29,36,15,44,97,34,0,0,0],"symbol":"au2506","datetime":"2025-03-31 14:30:00","delta":330.0,"close":730.54,"open":730.18,"high":730.66,"low":730.16,"volume":2345,"dj":0,"dayma":729.863,"delta累计":2630.0} +{"price":["730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94"],"Ask":[39,15,0,123,10,56,88,14,10,47,76,104,24,97,12,41,23,17,17,38,53,50,57,20,72,39,20,23,19,10,0,100,41,54,27,25],"Bid":[122,5,51,11,13,0,17,10,19,148,79,29,16,23,20,21,38,14,46,28,106,32,49,26,10,39,0,51,33,35,59,58,32,15,13,0],"symbol":"au2506","datetime":"2025-03-31 14:33:00","delta":193.0,"close":730.2,"open":730.56,"high":730.94,"low":730.2,"volume":3049,"dj":0,"dayma":729.879047619,"delta累计":2823.0} +{"price":["729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24"],"Ask":[0,11,0,37,9,0,47,18,27,32,4,151,68,181,81,52,66,197,117,120,29,164,99,14,62,4,39,6,0,36,32,9],"Bid":[15,0,58,64,0,31,0,53,111,11,0,53,77,54,81,102,68,144,54,166,58,50,12,65,58,10,14,53,49,24,12,3],"symbol":"au2506","datetime":"2025-03-31 14:36:00","delta":162.0,"close":730.06,"open":730.22,"high":730.3,"low":729.62,"volume":3693,"dj":0,"dayma":729.8872727273,"delta累计":2985.0} +{"price":["729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28"],"Ask":[11,0,45,13,20,88,6,78,45,0,21,85,35,32,24,32,4,11,18,0,2,36,33,10,3,31,36,54,39,0,22,38],"Bid":[20,13,52,154,19,52,4,25,8,17,85,108,23,28,52,24,15,32,11,24,10,53,21,17,19,44,20,17,47,34,41,0],"symbol":"au2506","datetime":"2025-03-31 14:39:00","delta":-217.0,"close":729.88,"open":730.1,"high":730.28,"low":729.66,"volume":2152,"dj":0,"dayma":729.8869565217,"delta累计":2768.0} +{"price":["729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08"],"Ask":[0,54,5,32,2,15,51,30,66,45,66,94,76,38,79,34,9,5,43],"Bid":[12,6,12,10,19,23,20,26,57,90,154,57,54,87,19,42,29,32,0],"symbol":"au2506","datetime":"2025-03-31 14:42:00","delta":-5.0,"close":729.86,"open":729.88,"high":730.08,"low":729.72,"volume":1623,"dj":0,"dayma":729.8858333333,"delta累计":2763.0} +{"price":["729.16","729.18","729.2","729.22","729.26","729.28","729.3","729.32","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96"],"Ask":[39,73,0,141,23,11,26,0,9,17,14,0,0,30,73,48,19,91,65,76,31,71,83,19,31,0,0,9,0,0,2,42,106,18,52,40,7,35,25,41],"Bid":[78,37,10,0,0,0,51,26,0,0,12,42,19,48,0,16,71,95,18,109,88,66,5,0,13,14,15,11,14,26,36,219,95,24,35,58,42,56,2,7],"symbol":"au2506","datetime":"2025-03-31 14:45:00","delta":-91.0,"close":729.18,"open":729.84,"high":729.96,"low":729.16,"volume":3035,"dj":1,"dayma":729.8576,"delta累计":2672.0} +{"price":["728.8","728.82","728.84","728.86","728.88","728.9","728.92","728.94","728.96","728.98","729.0","729.02","729.04","729.06","729.08","729.1","729.12","729.14","729.16","729.18","729.2","729.22","729.24","729.26","729.28","729.3","729.32","729.34","729.36"],"Ask":[0,0,30,93,57,67,41,79,20,83,169,61,104,59,53,92,61,78,82,0,86,77,162,84,89,14,6,26,36],"Bid":[50,17,8,45,130,36,58,132,55,13,117,66,50,78,27,117,49,63,46,18,116,111,70,21,49,9,28,0,0],"symbol":"au2506","datetime":"2025-03-31 14:48:00","delta":230.0,"close":729.06,"open":729.24,"high":729.36,"low":728.8,"volume":3757,"dj":0,"dayma":729.8269230769,"delta累计":2902.0} +{"price":["728.5","728.54","728.56","728.58","728.6","728.62","728.64","728.66","728.68","728.7","728.72","728.74","728.76","728.78","728.8","728.82","728.84","728.86","728.88","728.9","728.92","728.94","728.96","728.98","729.0","729.02","729.04","729.06","729.08","729.1","729.12","729.14","729.16","729.18","729.2","729.22","729.24"],"Ask":[0,93,5,88,14,62,77,225,47,94,46,32,10,18,23,59,5,57,12,78,32,85,79,18,35,26,7,43,38,21,14,3,71,10,74,30,46],"Bid":[54,89,24,21,34,106,142,27,15,62,5,0,25,64,44,93,74,38,34,76,20,71,0,81,29,14,33,81,1,0,4,4,37,103,19,1,0],"symbol":"au2506","datetime":"2025-03-31 14:51:00","delta":152.0,"close":729.24,"open":729.06,"high":729.24,"low":728.5,"volume":3497,"dj":0,"dayma":729.8051851852,"delta累计":3054.0} +{"price":["728.98","729.0","729.02","729.04","729.06","729.08","729.1","729.12","729.14","729.16","729.18","729.2","729.22","729.24","729.26","729.28","729.3","729.32","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58"],"Ask":[0,0,35,82,52,42,84,41,6,43,36,15,31,55,4,66,10,60,32,71,32,91,30,32,28,28,24,11,3,33,47],"Bid":[3,51,94,32,81,45,13,27,18,23,26,54,44,28,12,14,69,71,66,28,8,65,9,0,28,28,10,12,7,14,0],"symbol":"au2506","datetime":"2025-03-31 14:54:00","delta":144.0,"close":729.28,"open":729.22,"high":729.58,"low":728.98,"volume":2229,"dj":0,"dayma":729.7864285714,"delta累计":3198.0} +{"price":["728.96","728.98","729.0","729.02","729.04","729.06","729.08","729.1","729.12","729.14","729.16","729.18","729.2","729.22","729.24","729.26","729.28","729.3","729.32","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58","729.6"],"Ask":[0,0,46,42,22,30,4,19,24,20,4,13,54,27,7,73,68,6,26,13,25,47,66,25,44,25,16,41,27,51,42,58,17],"Bid":[13,4,50,42,4,24,9,14,32,11,12,15,62,19,19,12,37,30,12,4,34,45,25,0,5,14,4,19,12,30,17,27,0],"symbol":"au2506","datetime":"2025-03-31 14:57:00","delta":325.0,"close":729.44,"open":729.24,"high":729.6,"low":728.96,"volume":1851,"dj":0,"dayma":729.7744827586,"delta累计":3523.0} +{"price":[],"Ask":[],"Bid":[],"symbol":"au2506","datetime":"2025-03-31 21:00:00","delta":0.0,"close":731.66,"open":731.66,"high":731.66,"low":731.66,"volume":67,"dj":0,"dayma":729.8373333333,"delta累计":3523.0} +{"price":["731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76"],"Ask":[107,0,18,185,136,67,182,66,102,109,37,126,70,242,75,131,104,94,86,61,177,76,95,20,89,51,64,133,80,35,41,52],"Bid":[143,127,0,37,42,240,66,163,260,153,325,71,132,206,101,70,68,28,246,43,290,24,107,60,73,38,99,109,21,86,50,0],"symbol":"au2506","datetime":"2025-03-31 21:03:00","delta":-567.0,"close":731.2,"open":731.54,"high":731.76,"low":731.14,"volume":7036,"dj":0,"dayma":729.8812903226,"delta累计":2956.0} +{"price":["729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.14","730.16","730.18","730.2","730.22","730.24","730.4","730.48","730.5","730.52","730.54","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.12","731.14","731.16"],"Ask":[0,39,0,10,23,33,68,0,0,70,31,69,120,45,32,0,61,0,57,104,136,91,0,3,0,0,13,116,136,29,19,0,0,24,0,21,0,11,33,24,11,37,171,32,54,43,87,40,0,63,66,75,31,98,75,147,108,0,0,0,28],"Bid":[15,9,30,0,0,65,57,51,10,102,63,19,104,87,11,6,155,63,15,63,86,44,37,0,32,57,28,140,127,36,0,67,6,22,18,39,13,6,45,12,53,114,132,117,63,68,74,0,74,47,105,198,41,82,144,106,140,32,13,14,27],"symbol":"au2506","datetime":"2025-03-31 21:06:00","delta":-800.0,"close":729.7,"open":731.18,"high":731.18,"low":729.6,"volume":6650,"dj":-1,"dayma":729.875625,"delta累计":2156.0} +{"price":["729.3","729.32","729.34","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.4"],"Ask":[0,40,42,0,34,47,30,37,0,21,55,26,76,109,82,6,37,29,65,167,139,222,47,162,126,44,32,53,77,35,93,36,40,59,41,10,62,67,102,126,42,51,100,151,62,53,29,52,31],"Bid":[36,0,0,63,0,46,21,0,51,0,86,35,72,43,12,44,22,45,70,96,89,128,117,177,9,11,134,24,97,19,65,3,14,37,28,69,33,85,50,67,0,102,55,66,62,38,14,12,0],"symbol":"au2506","datetime":"2025-03-31 21:09:00","delta":700.0,"close":730.22,"open":729.7,"high":730.4,"low":729.3,"volume":6344,"dj":0,"dayma":729.8860606061,"delta累计":2856.0} +{"price":["730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88"],"Ask":[14,0,13,16,36,0,37,33,11,45,61,75,114,103,65,85,69,155,16,22,70,7,24,12,7,0,47,107,87,45,14,34,35,81,42,36,44,86,41,16,7,36],"Bid":[31,19,61,28,1,16,63,82,31,55,70,162,109,37,20,23,32,50,22,14,25,0,12,42,43,9,10,71,30,56,11,29,79,111,48,33,9,42,63,54,25,45],"symbol":"au2506","datetime":"2025-03-31 21:12:00","delta":75.0,"close":730.64,"open":730.24,"high":730.88,"low":730.06,"volume":3943,"dj":0,"dayma":729.9082352941,"delta累计":2931.0} +{"price":["730.08","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64"],"Ask":[0,44,31,113,52,29,29,60,25,128,104,110,18,55,119,21,31,59,13,37,48,30,51,26,16,23,21,3],"Bid":[11,24,183,86,60,3,32,29,14,194,158,133,26,54,55,32,162,30,29,44,87,94,43,14,27,63,23,8],"symbol":"au2506","datetime":"2025-03-31 21:15:00","delta":-422.0,"close":730.44,"open":730.64,"high":730.64,"low":730.08,"volume":3254,"dj":0,"dayma":729.9234285714,"delta累计":2509.0} +{"price":["730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74"],"Ask":[24,23,9,36,144,141,49,55,89,124,67,47,5,44,9,65,31,49,38,45,13,2],"Bid":[20,60,17,96,129,132,63,19,71,113,50,0,19,52,37,48,0,58,78,17,0,0],"symbol":"au2506","datetime":"2025-03-31 21:18:00","delta":30.0,"close":730.6,"open":730.44,"high":730.74,"low":730.32,"volume":2422,"dj":0,"dayma":729.9422222222,"delta累计":2539.0} +{"price":["730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.7","730.72","730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18"],"Ask":[0,6,25,28,17,10,9,5,24,5,18,12,22,0,61,73,206,172,98,30,119,191,40,91,36,43,67,57,60,6,10,23],"Bid":[39,21,13,12,7,1,0,0,0,0,10,30,52,12,47,105,65,104,64,60,80,145,3,23,110,9,24,117,12,55,17,8],"symbol":"au2506","datetime":"2025-03-31 21:21:00","delta":319.0,"close":731.1,"open":730.56,"high":731.18,"low":730.54,"volume":3122,"dj":3,"dayma":729.9735135135,"delta累计":2858.0} +{"price":["730.36","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18"],"Ask":[0,19,23,102,45,0,32,42,27,67,66,103,134,30,83,45,23,52,38,47,41,110,12,24,68,17,28,2,0,0,0,48,12,55,21,10,87,69],"Bid":[17,22,0,66,59,20,84,21,53,22,91,76,34,23,71,6,27,38,30,125,167,64,15,35,28,20,14,3,60,11,7,10,19,0,38,38,6,0],"symbol":"au2506","datetime":"2025-03-31 21:24:00","delta":162.0,"close":730.64,"open":731.12,"high":731.18,"low":730.36,"volume":3348,"dj":-2,"dayma":729.9910526316,"delta累计":3020.0} +{"price":["729.96","729.98","730.0","730.02","730.04","730.06","730.1","730.12","730.16","730.22","730.26","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68"],"Ask":[30,21,22,0,0,19,9,33,11,28,0,6,0,14,103,54,53,45,161,108,41,58,44,50,22,78,9,67,33,33,14],"Bid":[33,0,0,66,32,0,0,87,34,17,12,0,90,40,132,53,69,110,161,90,61,31,44,19,70,53,24,34,28,0,19],"symbol":"au2506","datetime":"2025-03-31 21:27:00","delta":-243.0,"close":730.0,"open":730.62,"high":730.68,"low":729.96,"volume":2891,"dj":0,"dayma":729.9912820513,"delta累计":2777.0} +{"price":["729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56"],"Ask":[0,10,13,0,64,87,118,110,57,111,112,72,8,20,14,10,90,29,125,37,12,0,49,42,26,21,39,54,39,40,21,64,68,30,11],"Bid":[28,37,7,20,155,108,142,23,59,112,32,33,52,3,24,45,10,52,13,22,20,14,44,12,46,24,20,37,18,31,38,40,54,23,0],"symbol":"au2506","datetime":"2025-03-31 21:30:00","delta":205.0,"close":730.24,"open":730.0,"high":730.56,"low":729.88,"volume":3250,"dj":0,"dayma":729.9975,"delta累计":2982.0} +{"price":["728.6","728.62","728.64","728.66","728.68","728.7","728.72","728.74","728.76","728.78","728.8","728.82","728.84","728.86","728.88","728.9","728.92","728.94","728.96","728.98","729.0","729.02","729.04","729.08","729.1","729.12","729.14","729.16","729.18","729.2","729.24","729.26","729.28","729.3","729.32","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.58","729.6","729.62","729.66","729.68","729.8","729.86","729.9","729.92","730.0","730.08","730.1","730.12","730.14","730.16","730.18"],"Ask":[69,35,48,0,52,0,51,105,63,79,48,0,21,18,134,53,115,277,28,213,212,243,21,0,39,72,23,58,88,41,0,122,33,22,91,79,58,77,9,107,0,28,305,115,137,8,0,0,23,26,0,0,0,0,0,0,0,13,0,12,107,35],"Bid":[29,84,0,37,0,29,105,82,91,82,32,45,23,214,245,218,162,270,320,157,159,243,63,70,0,93,0,33,65,0,81,52,0,53,51,189,66,52,111,155,81,53,137,65,31,53,72,17,54,0,67,15,60,40,28,36,9,19,5,51,18,0],"symbol":"au2506","datetime":"2025-03-31 21:33:00","delta":-1059.0,"close":728.86,"open":730.24,"high":730.24,"low":728.6,"volume":9961,"dj":-5,"dayma":729.9697560976,"delta累计":1923.0} +{"price":["728.2","728.22","728.24","728.26","728.28","728.3","728.32","728.36","728.38","728.4","728.42","728.44","728.46","728.48","728.5","728.52","728.54","728.56","728.58","728.6","728.62","728.64","728.66","728.68","728.7","728.72","728.74","728.76","728.78","728.8","728.82","728.84","728.86","728.88","728.9","728.92","728.94"],"Ask":[32,44,74,85,50,182,0,28,0,135,105,128,204,170,248,262,161,163,27,139,185,29,53,233,166,75,0,0,78,46,19,7,11,40,63,42,18],"Bid":[42,0,69,0,64,152,79,26,45,178,176,38,194,144,289,270,92,16,71,236,121,167,98,40,38,72,25,56,85,44,31,138,9,23,27,8,0],"symbol":"au2506","datetime":"2025-03-31 21:36:00","delta":139.0,"close":728.42,"open":728.88,"high":728.94,"low":728.2,"volume":8080,"dj":0,"dayma":729.9328571429,"delta累计":2062.0} +{"price":["728.06","728.1","728.12","728.14","728.18","728.2","728.22","728.24","728.26","728.28","728.3","728.32","728.34","728.36","728.38","728.4","728.42","728.44","728.46","728.48","728.5","728.52","728.54","728.56","728.58","728.6","728.62","728.64","728.66","728.68","728.7","728.72","728.76"],"Ask":[0,128,31,80,84,114,25,128,14,30,102,61,83,179,72,89,35,35,67,208,19,71,58,91,66,122,73,138,79,171,101,124,62],"Bid":[20,161,7,47,55,125,53,118,10,47,142,33,81,65,134,10,141,201,58,52,171,73,184,77,174,97,109,135,91,55,40,38,0],"symbol":"au2506","datetime":"2025-03-31 21:39:00","delta":-64.0,"close":728.4,"open":728.38,"high":728.76,"low":728.06,"volume":6378,"dj":0,"dayma":729.8972093023,"delta累计":1998.0} +{"price":["727.38","727.4","727.42","727.44","727.46","727.48","727.5","727.52","727.54","727.56","727.58","727.6","727.62","727.64","727.66","727.68","727.7","727.72","727.74","727.76","727.78","727.8","727.82","727.84","727.86","727.88","727.9","727.92","727.94","727.96","727.98","728.04","728.06","728.08","728.1","728.12","728.14","728.16","728.2","728.24","728.26","728.28","728.3","728.32","728.34","728.36","728.38","728.4","728.42","728.44","728.46","728.48","728.5","728.52","728.54","728.56","728.58","728.6","728.62","728.64","728.66","728.68","728.7"],"Ask":[0,0,0,0,13,69,16,80,36,50,25,35,149,108,319,70,16,50,0,0,21,21,0,29,19,196,92,81,0,66,0,0,0,35,19,55,21,22,0,24,0,0,32,32,56,59,42,65,31,0,0,59,26,24,68,24,17,0,23,0,69,36,36],"Bid":[49,28,23,30,32,48,71,83,103,90,87,293,80,146,109,45,78,13,43,49,49,204,77,67,128,207,24,26,68,0,134,23,16,176,52,33,30,27,53,55,4,8,44,29,36,17,39,70,19,14,10,14,45,6,21,9,0,21,0,57,21,119,0],"symbol":"au2506","datetime":"2025-03-31 21:42:00","delta":-1116.0,"close":727.38,"open":728.4,"high":728.7,"low":727.38,"volume":6733,"dj":-1,"dayma":729.84,"delta累计":882.0} +{"price":["726.84","726.9","726.92","726.98","727.0","727.02","727.04","727.06","727.08","727.1","727.12","727.14","727.16","727.18","727.2","727.22","727.24","727.26","727.28","727.3","727.32","727.34","727.36","727.38","727.4","727.42","727.44","727.46","727.48","727.5","727.52","727.56","727.58","727.6","727.62","727.64","727.66","727.68","727.7","727.72","727.74"],"Ask":[0,43,88,29,9,102,11,73,7,94,61,0,208,98,121,97,118,147,40,178,32,172,58,58,248,76,287,38,92,86,32,0,87,34,0,11,49,35,130,123,35],"Bid":[52,109,0,119,88,246,30,2,70,39,39,162,290,48,69,86,74,116,141,236,130,240,165,38,207,61,106,44,64,21,71,61,74,49,10,24,73,33,93,56,0],"symbol":"au2506","datetime":"2025-03-31 21:45:00","delta":-429.0,"close":726.98,"open":727.42,"high":727.74,"low":726.84,"volume":7554,"dj":0,"dayma":729.7764444444,"delta累计":453.0} +{"price":["726.2","726.24","726.26","726.28","726.3","726.32","726.34","726.36","726.38","726.4","726.42","726.44","726.46","726.48","726.5","726.54","726.56","726.58","726.6","726.62","726.64","726.66","726.68","726.7","726.72","726.74","726.76","726.78","726.8","726.82","726.84","726.86","726.88","726.9","726.92","726.94","726.96","726.98","727.06","727.12","727.14","727.18","727.2","727.22","727.24","727.26","727.28","727.3","727.32","727.34","727.36","727.38","727.4","727.42","727.44","727.48","727.5","727.54","727.56","727.58","727.6"],"Ask":[82,0,0,72,87,27,75,25,49,44,76,93,89,33,0,152,56,101,85,35,50,22,111,65,0,95,96,119,230,127,231,37,233,11,121,28,57,39,59,25,23,20,0,103,32,0,131,151,265,89,160,69,76,18,103,140,145,19,33,28,21],"Bid":[31,109,68,0,50,19,118,0,97,50,89,55,116,30,18,25,36,11,37,0,10,0,81,138,54,18,217,291,153,269,79,177,107,47,169,0,35,0,0,0,0,38,75,164,46,134,139,164,115,145,59,47,23,65,35,123,239,103,49,0,0],"symbol":"au2506","datetime":"2025-03-31 21:48:00","delta":-4.0,"close":727.22,"open":726.96,"high":727.6,"low":726.2,"volume":10308,"dj":2,"dayma":729.7208695652,"delta累计":449.0} +{"price":["726.92","726.94","726.96","726.98","727.0","727.02","727.06","727.08","727.1","727.12","727.14","727.16","727.18","727.2","727.22","727.24","727.26","727.28","727.3","727.32","727.34","727.4","727.42","727.48","727.5","727.54","727.56","727.58","727.6","727.62","727.64","727.66","727.68","727.7","727.72","727.74","727.76","727.78","727.8","727.82","727.84","727.86","727.88","727.9","727.92","727.94","727.96","727.98","728.0","728.02","728.04"],"Ask":[0,0,38,0,72,13,54,47,0,0,57,45,147,77,65,105,36,60,27,44,8,58,24,40,0,11,69,30,129,61,132,187,79,48,113,91,11,70,83,37,80,130,71,371,215,108,57,140,58,23,32],"Bid":[2,47,25,53,51,120,64,0,17,49,27,85,45,54,155,21,108,17,0,15,0,0,0,36,31,32,56,78,137,139,47,131,169,23,64,48,132,0,75,90,4,0,383,146,173,145,45,13,57,65,17],"symbol":"au2506","datetime":"2025-03-31 21:51:00","delta":162.0,"close":728.06,"open":727.24,"high":728.06,"low":726.92,"volume":7669,"dj":1,"dayma":729.6855319149,"delta累计":611.0} +{"price":["728.06","728.08","728.1","728.12","728.14","728.16","728.18","728.2","728.22","728.24","728.26","728.28","728.3","728.32","728.34","728.36","728.38","728.4","728.42","728.44","728.46","728.48","728.5","728.52","728.54","728.56","728.58","728.6","728.62","728.64","728.66","728.68","728.7","728.72","728.74","728.76","728.78","728.8","728.82","728.86","728.88","728.9","728.92","728.96","729.0","729.02"],"Ask":[8,22,21,91,5,51,91,52,36,30,55,330,64,110,22,79,56,65,74,0,54,17,161,160,67,92,50,117,75,118,88,65,143,70,106,65,157,87,60,7,28,55,0,14,48,18],"Bid":[0,31,23,31,46,40,25,81,42,37,51,46,34,13,92,42,54,85,0,25,59,74,201,105,143,151,26,136,10,21,188,181,60,228,76,358,115,11,0,23,0,97,58,0,0,0],"symbol":"au2506","datetime":"2025-03-31 21:54:00","delta":65.0,"close":729.02,"open":728.06,"high":729.02,"low":728.06,"volume":7064,"dj":0,"dayma":729.6716666667,"delta累计":676.0} +{"price":["728.92","728.94","728.96","728.98","729.0","729.02","729.04","729.06","729.08","729.1","729.12","729.14","729.16","729.18","729.2","729.22","729.24","729.26","729.28","729.3","729.32","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48"],"Ask":[16,57,47,20,107,21,88,142,30,54,55,140,36,80,323,166,175,45,53,24,76,31,45,93,239,174,43,0,27],"Bid":[44,63,0,23,92,101,90,99,79,50,77,42,11,114,243,377,75,24,32,51,14,33,87,194,132,82,33,23,0],"symbol":"au2506","datetime":"2025-03-31 21:57:00","delta":122.0,"close":729.4,"open":729.04,"high":729.48,"low":728.92,"volume":5262,"dj":0,"dayma":729.666122449,"delta累计":798.0} +{"price":["729.3","729.32","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7"],"Ask":[0,24,51,50,29,90,138,133,49,98,115,108,216,144,72,185,68,76,21,39,68],"Bid":[10,44,52,108,52,213,78,38,78,79,260,151,117,93,196,143,121,80,0,25,17],"symbol":"au2506","datetime":"2025-03-31 22:00:00","delta":-181.0,"close":729.6,"open":729.42,"high":729.7,"low":729.3,"volume":4164,"dj":0,"dayma":729.6648,"delta累计":617.0} +{"price":["729.14","729.16","729.18","729.2","729.22","729.24","729.26","729.3","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8"],"Ask":[0,44,18,139,0,75,19,0,37,71,100,16,36,39,86,6,116,93,168,93,66,136,142,134,120,66,90,65,150,24,64,41],"Bid":[40,136,146,25,58,73,42,15,2,78,116,87,69,48,59,24,164,156,223,70,82,156,131,100,65,78,15,57,155,0,6,0],"symbol":"au2506","datetime":"2025-03-31 22:03:00","delta":-222.0,"close":729.5,"open":729.58,"high":729.8,"low":729.14,"volume":5258,"dj":0,"dayma":729.6615686275,"delta累计":395.0} +{"price":["729.32","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0"],"Ask":[30,22,40,17,95,106,12,85,80,75,62,82,106,149,87,77,19,61,57,0,50,27,48,22,22,35,44,26,22,36,25,16,20],"Bid":[45,41,87,129,83,52,41,57,80,52,110,81,136,155,108,47,25,0,0,30,21,0,88,0,74,36,158,0,20,159,0,0,0],"symbol":"au2506","datetime":"2025-03-31 22:06:00","delta":-260.0,"close":729.54,"open":729.58,"high":730.0,"low":729.32,"volume":4043,"dj":0,"dayma":729.6592307692,"delta累计":135.0} +{"price":["729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24"],"Ask":[0,52,77,66,83,28,16,28,9,0,15,18,7,20,0,25,180,50,68,122,5,93,28,138,90,158,234,37,60,40,64,121,40,10],"Bid":[21,33,65,54,3,55,13,0,0,21,4,19,0,2,54,44,126,47,4,42,50,61,23,123,297,101,11,85,17,23,66,64,16,18],"symbol":"au2506","datetime":"2025-03-31 22:09:00","delta":420.0,"close":730.08,"open":729.58,"high":730.24,"low":729.56,"volume":3930,"dj":0,"dayma":729.6671698113,"delta累计":555.0} +{"price":["730.06","730.08","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42"],"Ask":[0,13,97,36,109,194,111,129,173,244,223,169,136,21,65,0,19,7],"Bid":[16,82,35,123,113,82,139,177,273,322,176,182,35,119,51,19,11,0],"symbol":"au2506","datetime":"2025-03-31 22:12:00","delta":-209.0,"close":730.28,"open":730.08,"high":730.42,"low":730.06,"volume":4072,"dj":0,"dayma":729.6785185185,"delta累计":346.0} +{"price":["729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42"],"Ask":[0,17,24,34,19,17,67,59,15,48,56,86,123,47,119,59,122,69,59,85,41,79,29,66,0],"Bid":[6,33,102,97,6,46,63,36,93,54,48,73,102,141,73,146,35,31,114,48,77,32,140,17,13],"symbol":"au2506","datetime":"2025-03-31 22:15:00","delta":-286.0,"close":730.1,"open":730.34,"high":730.42,"low":729.94,"volume":3163,"dj":0,"dayma":729.6861818182,"delta累计":60.0} +{"price":["729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.6","729.62","729.64","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4"],"Ask":[45,44,83,31,133,17,69,61,48,35,9,6,0,73,9,16,18,18,70,3,53,21,8,25,12,40,51,90,71,37,34,45,47,42,60,0,62,67,23,65,96,89,25,57,83,28,68,12,25],"Bid":[44,0,0,122,221,352,46,48,63,38,39,0,59,41,17,21,15,59,128,6,48,42,0,0,32,71,64,60,142,4,44,5,36,6,9,15,41,98,34,42,56,31,86,77,17,18,111,0,0],"symbol":"au2506","datetime":"2025-03-31 22:18:00","delta":-384.0,"close":729.8,"open":730.08,"high":730.4,"low":729.4,"volume":4954,"dj":0,"dayma":729.6882142857,"delta累计":-324.0} +{"price":["729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.92"],"Ask":[24,31,65,98,52,110,43,144,106,129,16,70,18,8,56,56,38,8,52,46,42,8,0,13,24,2,15,18,10],"Bid":[30,78,89,150,78,57,122,110,65,33,15,54,35,48,52,84,54,50,117,11,0,0,11,22,5,5,7,29,0],"symbol":"au2506","datetime":"2025-03-31 22:21:00","delta":-109.0,"close":729.38,"open":729.8,"high":729.92,"low":729.34,"volume":2992,"dj":0,"dayma":729.6828070175,"delta累计":-433.0} +{"price":["729.24","729.26","729.28","729.3","729.32","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.88"],"Ask":[0,17,0,15,162,36,102,67,47,27,43,35,55,81,54,20,83,27,25,43,31,49,28,10,17,16,51,73,54,38,4,4],"Bid":[15,57,52,48,138,26,87,75,45,47,63,76,26,124,5,36,90,79,21,8,36,77,50,6,32,41,87,48,23,15,11,0],"symbol":"au2506","datetime":"2025-03-31 22:24:00","delta":-230.0,"close":729.36,"open":729.4,"high":729.88,"low":729.24,"volume":3226,"dj":0,"dayma":729.6772413793,"delta累计":-663.0} +{"price":["729.22","729.24","729.26","729.28","729.3","729.32","729.34","729.36","729.38","729.4","729.42","729.44","729.46","729.48","729.5"],"Ask":[0,5,26,64,27,74,106,61,59,95,121,63,21,36,10],"Bid":[16,53,76,17,66,47,60,96,70,74,198,33,18,14,0],"symbol":"au2506","datetime":"2025-03-31 22:27:00","delta":-70.0,"close":729.34,"open":729.38,"high":729.5,"low":729.22,"volume":1783,"dj":0,"dayma":729.6715254237,"delta累计":-733.0} +{"price":["729.36","729.38","729.42","729.44","729.46","729.48","729.5","729.52","729.54","729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02"],"Ask":[4,10,7,68,2,58,23,142,60,43,4,0,48,21,0,47,2,43,51,34,26,96,62,78,156,69,78,104,92,51,32,101,6],"Bid":[0,0,8,26,27,36,20,42,9,17,8,14,2,22,55,6,0,19,27,45,65,86,162,120,122,75,83,47,22,6,19,35,8],"symbol":"au2506","datetime":"2025-03-31 22:30:00","delta":385.0,"close":729.8,"open":729.36,"high":730.02,"low":729.36,"volume":3068,"dj":1,"dayma":729.6736666667,"delta累计":-348.0} +{"price":["729.5","729.52","729.54","729.56","729.58","729.6","729.62","729.64","729.66","729.68","729.7","729.72","729.74","729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.96","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18"],"Ask":[0,0,107,31,10,33,116,9,13,16,25,0,4,33,28,16,31,26,33,39,68,46,56,8,49,118,77,146,25,41,57,32,22,13,18],"Bid":[31,44,35,14,29,16,36,17,7,32,8,9,5,13,4,23,26,3,37,74,96,22,39,34,70,135,47,79,63,9,113,35,38,4,0],"symbol":"au2506","datetime":"2025-03-31 22:33:00","delta":99.0,"close":730.14,"open":729.76,"high":730.18,"low":729.5,"volume":2883,"dj":0,"dayma":729.6813114754,"delta累计":-249.0} +{"price":["730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.92","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.24","731.26","731.28","731.3","731.32","731.36","731.38","731.4","731.42","731.44"],"Ask":[28,42,0,42,47,64,26,8,8,47,34,26,4,0,30,48,65,7,115,19,138,0,108,71,14,51,15,0,65,52,10,31,51,20,29,0,10,24,275,67,166,63,160,141,126,91,49,100,176,7,24,27,61,42,18,18,27,62,13],"Bid":[0,0,38,27,19,15,6,25,13,35,15,17,0,39,0,23,31,24,4,28,8,56,30,54,57,115,65,14,41,0,24,10,35,10,0,10,33,51,158,82,98,151,42,206,37,41,18,35,20,0,0,69,57,0,0,0,62,24,0],"symbol":"au2506","datetime":"2025-03-31 22:36:00","delta":990.0,"close":731.44,"open":730.2,"high":731.44,"low":730.2,"volume":5606,"dj":2,"dayma":729.7096774194,"delta累计":741.0} +{"price":["730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5"],"Ask":[0,21,33,186,79,142,79,35,91,0,28,10,29,7,53,43,4,105,43,35,33,37,5,0,40,83,153,59,137,130,50,27],"Bid":[22,37,172,159,74,47,24,27,32,25,31,8,79,113,18,33,41,26,104,1,0,14,3,40,80,68,116,153,74,71,70,0],"symbol":"au2506","datetime":"2025-03-31 22:39:00","delta":15.0,"close":731.24,"open":731.46,"high":731.5,"low":730.88,"volume":3982,"dj":0,"dayma":729.733968254,"delta累计":756.0} +{"price":["731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.7","731.72","731.74"],"Ask":[0,0,12,59,73,40,72,88,62,135,74,61,6,76,12,31,27,13,28,16,57,46,111,22,73,73,88,30,31,0,20,16,26,43,36,30,24],"Bid":[12,60,66,101,83,64,61,46,99,34,48,45,45,0,0,0,14,7,16,0,0,48,72,8,27,33,67,5,30,41,61,15,90,55,45,14,0],"symbol":"au2506","datetime":"2025-03-31 22:42:00","delta":199.0,"close":731.5,"open":731.26,"high":731.74,"low":731.0,"volume":3285,"dj":1,"dayma":729.7615625,"delta累计":955.0} +{"price":["731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54"],"Ask":[12,40,6,69,69,23,48,3,44,84,75,18,79,53,17,27,16,45,6,35,16],"Bid":[61,40,22,37,67,35,26,23,76,62,73,55,47,53,65,21,27,40,7,0,0],"symbol":"au2506","datetime":"2025-03-31 22:45:00","delta":-52.0,"close":731.16,"open":731.52,"high":731.54,"low":731.14,"volume":1780,"dj":0,"dayma":729.7830769231,"delta累计":903.0} +{"price":["731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7"],"Ask":[18,7,5,2,6,34,32,57,60,145,48,107,52,156,81,15,31,89,18,22,50,22,0,0,24,65,13,27],"Bid":[14,0,0,8,11,14,9,27,112,87,130,49,70,84,23,32,46,11,8,5,0,40,3,33,0,41,16,0],"symbol":"au2506","datetime":"2025-03-31 22:48:00","delta":313.0,"close":731.44,"open":731.16,"high":731.7,"low":731.16,"volume":2239,"dj":0,"dayma":729.8081818182,"delta累计":1216.0} +{"price":["731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.82","731.84","731.86","731.88","731.9","731.92","731.94","731.96"],"Ask":[0,9,30,24,43,31,97,3,17,29,66,33,104,49,27,69,29,1,18,55,0,82,21,60,22,54,30,3,107,37,80,0,48,41,72],"Bid":[19,13,29,33,24,38,31,12,21,35,74,40,86,35,78,0,66,15,0,6,29,42,13,33,36,11,11,27,0,22,74,135,61,0,14],"symbol":"au2506","datetime":"2025-03-31 22:51:00","delta":228.0,"close":731.88,"open":731.44,"high":731.96,"low":731.28,"volume":2726,"dj":1,"dayma":729.8391044776,"delta累计":1444.0} +{"price":["731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.74","731.76","731.78","731.8","731.82","731.84","731.86","731.88","731.9","731.92","731.94"],"Ask":[0,0,12,29,53,49,23,6,5,3,32,10,47,62,18,26,48,34,80,23,0,18,11,50,40,46,19,9,62,74,11],"Bid":[52,18,86,32,80,9,12,37,52,16,51,72,35,76,48,28,36,58,31,70,6,37,115,60,76,52,85,69,58,26,0],"symbol":"au2506","datetime":"2025-03-31 22:54:00","delta":-583.0,"close":731.44,"open":731.86,"high":731.94,"low":731.32,"volume":2692,"dj":0,"dayma":729.8626470588,"delta累计":861.0} +{"price":["731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66"],"Ask":[7,3,12,21,14,13,45,60,56,33,2,54,121,39,92,40,134],"Bid":[10,43,62,10,30,56,58,41,74,43,49,34,76,62,23,45,33],"symbol":"au2506","datetime":"2025-03-31 22:57:00","delta":-3.0,"close":731.58,"open":731.48,"high":731.66,"low":731.34,"volume":1580,"dj":0,"dayma":729.8875362319,"delta累计":858.0} +{"price":["731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.82","731.84","731.86","731.88","731.9"],"Ask":[0,7,11,4,36,46,128,31,94,133,158,185,16,15,85,60,36],"Bid":[4,0,0,37,36,48,83,53,99,78,148,151,33,111,65,20,0],"symbol":"au2506","datetime":"2025-03-31 23:00:00","delta":79.0,"close":731.8,"open":731.6,"high":731.9,"low":731.58,"volume":2120,"dj":0,"dayma":729.9148571429,"delta累计":937.0} +{"price":["731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.82","731.84","731.86","731.88","731.9","731.92"],"Ask":[0,0,29,48,72,75,125,108,125,91,19,19,153,142,52,13],"Bid":[28,40,42,65,84,105,177,182,59,81,49,57,27,35,0,0],"symbol":"au2506","datetime":"2025-03-31 23:03:00","delta":40.0,"close":731.78,"open":731.8,"high":731.92,"low":731.62,"volume":2287,"dj":0,"dayma":729.9411267606,"delta累计":977.0} +{"price":["731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.8"],"Ask":[0,42,57,97,13,32,71,0,84,9,8,4,0,11,0,0,0,31,48,28,35,57,42,57,59,31,32,31,10,2,2],"Bid":[105,41,40,53,33,46,132,48,6,15,15,26,42,10,9,17,13,58,38,72,4,87,41,86,43,32,25,9,9,6,0],"symbol":"au2506","datetime":"2025-03-31 23:06:00","delta":-268.0,"close":731.3,"open":731.8,"high":731.8,"low":731.18,"volume":2187,"dj":-4,"dayma":729.96,"delta累计":709.0} +{"price":["731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4"],"Ask":[0,0,72,41,12,19,40,29,42,15,32,107,66,82,37,119,136,80,28,32,7],"Bid":[5,17,76,138,13,15,5,16,13,16,79,58,145,43,59,64,102,37,6,10,9],"symbol":"au2506","datetime":"2025-03-31 23:09:00","delta":70.0,"close":731.24,"open":731.32,"high":731.4,"low":731.0,"volume":2146,"dj":0,"dayma":729.9775342466,"delta累计":779.0} +{"price":["731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8"],"Ask":[0,10,20,0,4,13,129,49,11,38,0,11,9,11,13,16,35,67,3,64,20,101,89,102,87,45,25,6],"Bid":[7,35,0,4,73,28,49,0,0,0,17,0,0,14,40,24,64,38,11,45,48,83,86,51,25,13,76,25],"symbol":"au2506","datetime":"2025-03-31 23:12:00","delta":122.0,"close":731.66,"open":731.24,"high":731.8,"low":731.22,"volume":1964,"dj":0,"dayma":730.0002702703,"delta累计":901.0} +{"price":["731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.82","731.84","731.88","731.98","732.1","732.28","732.3","732.32","732.34","732.36","732.38","732.4","732.42","732.44","732.46","732.48","732.5","732.52","732.54","732.56","732.58","732.6","732.62","732.64"],"Ask":[0,7,11,10,21,2,45,37,67,54,12,133,55,427,35,0,0,309,70,58,84,105,137,122,149,155,187,66,126,91,113,13,57],"Bid":[3,21,0,32,0,23,15,24,16,0,0,0,0,0,24,15,69,128,69,138,304,223,128,136,200,161,117,45,190,26,54,0,0],"symbol":"au2506","datetime":"2025-03-31 23:15:00","delta":597.0,"close":732.28,"open":731.66,"high":732.64,"low":731.64,"volume":5255,"dj":4,"dayma":730.0306666667,"delta累计":1498.0} +{"price":["731.96","731.98","732.0","732.02","732.04","732.06","732.08","732.1","732.12","732.14","732.16","732.18","732.2","732.22","732.24","732.26","732.28","732.3","732.32","732.34"],"Ask":[0,8,13,33,79,72,54,183,38,17,7,33,19,96,77,110,130,13,35,41],"Bid":[33,27,15,12,53,61,136,87,40,11,63,77,87,93,97,111,68,10,0,11],"symbol":"au2506","datetime":"2025-03-31 23:18:00","delta":-34.0,"close":732.2,"open":732.28,"high":732.34,"low":731.96,"volume":2437,"dj":0,"dayma":730.0592105263,"delta累计":1464.0} +{"price":["731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.82","731.84","731.86","731.88","731.9","731.92","731.96","731.98","732.0","732.02","732.04","732.06","732.08","732.1","732.12","732.14","732.16","732.18","732.2","732.22","732.24","732.26","732.28","732.3","732.32"],"Ask":[0,10,6,24,4,25,30,88,23,25,4,48,17,36,93,13,33,7,10,0,0,0,13,55,34,35,10,19,0,25,38,7,19,22,39,2],"Bid":[24,0,35,23,42,92,102,64,11,16,36,17,28,32,105,15,8,18,0,52,11,7,53,95,30,37,51,13,9,7,24,0,0,25,11,0],"symbol":"au2506","datetime":"2025-03-31 23:21:00","delta":-279.0,"close":731.92,"open":732.2,"high":732.32,"low":731.6,"volume":2066,"dj":0,"dayma":730.0833766234,"delta累计":1185.0} +{"price":["731.74","731.76","731.8","731.82","731.86","731.88","731.9","731.92","731.94","731.96","731.98","732.0","732.02","732.04","732.06","732.08","732.1","732.12","732.14","732.16","732.18"],"Ask":[5,22,7,6,9,8,9,25,20,14,36,70,67,56,47,56,22,21,32,55,23],"Bid":[13,10,12,4,9,53,38,17,14,24,46,21,79,51,89,56,4,37,66,31,15],"symbol":"au2506","datetime":"2025-03-31 23:24:00","delta":-79.0,"close":732.0,"open":731.92,"high":732.18,"low":731.74,"volume":1449,"dj":0,"dayma":730.1079487179,"delta累计":1106.0} +{"price":["731.5","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.84","731.86","731.88","731.9","731.92","731.94","731.96","731.98","732.0","732.02","732.04","732.06","732.08","732.1"],"Ask":[0,26,11,40,4,51,58,25,3,29,35,16,24,31,89,0,0,12,18,26,4,33,62,42,1,43,59,84,33],"Bid":[5,33,22,34,53,37,25,4,27,74,3,13,44,50,53,11,33,37,37,13,4,51,15,59,16,15,53,19,6],"symbol":"au2506","datetime":"2025-03-31 23:27:00","delta":13.0,"close":731.56,"open":732.02,"high":732.1,"low":731.5,"volume":1797,"dj":0,"dayma":730.1263291139,"delta累计":1119.0} +{"price":["731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58"],"Ask":[0,16,0,45,87,42,28,109,37,82,51,76,89,137,90,11,0,46,31],"Bid":[14,24,6,44,79,92,73,60,43,95,61,117,63,111,49,38,69,14,13],"symbol":"au2506","datetime":"2025-03-31 23:30:00","delta":-88.0,"close":731.26,"open":731.56,"high":731.58,"low":731.22,"volume":2200,"dj":0,"dayma":730.1405,"delta累计":1031.0} +{"price":["730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3"],"Ask":[0,11,45,17,42,46,18,61,29,70,84,86,41,47,13,67,91,5,37,52,54,64,33],"Bid":[25,0,126,30,41,74,60,61,44,73,59,195,61,39,71,40,20,46,30,22,12,36,21],"symbol":"au2506","datetime":"2025-03-31 23:33:00","delta":-173.0,"close":731.06,"open":731.24,"high":731.3,"low":730.86,"volume":2323,"dj":0,"dayma":730.1518518519,"delta累计":858.0} +{"price":["730.82","730.84","730.86","730.88","730.9","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22"],"Ask":[0,22,0,26,4,46,14,12,59,57,36,77,73,102,75,82,103,6,7,20],"Bid":[10,7,6,28,3,12,24,8,73,101,56,54,73,97,82,32,45,12,12,0],"symbol":"au2506","datetime":"2025-03-31 23:36:00","delta":86.0,"close":730.82,"open":731.06,"high":731.22,"low":730.82,"volume":1641,"dj":0,"dayma":730.16,"delta累计":944.0} +{"price":["729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.62","730.64","730.66","730.7","730.72","730.74","730.76","730.78","730.8","730.82"],"Ask":[19,5,249,23,11,12,36,25,33,1,2,24,22,42,84,75,86,8,15,57,163,150,66,98,14,280,78,59,0,0,0,0,0,0,0,0,27,0,25],"Bid":[38,218,249,18,37,22,18,34,53,13,75,0,48,103,92,66,125,77,109,164,265,134,48,105,74,100,28,0,50,19,12,13,21,19,7,26,0,57,0],"symbol":"au2506","datetime":"2025-03-31 23:39:00","delta":-748.0,"close":730.38,"open":730.8,"high":730.82,"low":729.98,"volume":4658,"dj":-6,"dayma":730.1626506024,"delta累计":196.0} +{"price":["730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66"],"Ask":[0,27,4,0,91,40,16,52,114,97,58,22,21,15,58,76,102,33],"Bid":[17,36,11,30,52,46,54,87,25,90,35,6,5,26,84,132,41,0],"symbol":"au2506","datetime":"2025-03-31 23:42:00","delta":49.0,"close":730.52,"open":730.38,"high":730.66,"low":730.32,"volume":1713,"dj":0,"dayma":730.1669047619,"delta累计":245.0} +{"price":["730.06","730.08","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54"],"Ask":[0,24,0,19,0,38,27,11,33,28,24,28,110,35,85,40,42,23,29,2,9,1,24,19],"Bid":[41,0,8,11,47,14,5,30,21,47,18,74,66,41,52,27,28,44,38,0,93,11,7,0],"symbol":"au2506","datetime":"2025-03-31 23:45:00","delta":-72.0,"close":730.38,"open":730.5,"high":730.54,"low":730.06,"volume":1473,"dj":0,"dayma":730.1694117647,"delta累计":173.0} +{"price":["730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44"],"Ask":[0,10,43,91,158,74,57,35],"Bid":[12,58,52,171,127,70,15,0],"symbol":"au2506","datetime":"2025-03-31 23:48:00","delta":-37.0,"close":730.38,"open":730.38,"high":730.44,"low":730.3,"volume":1028,"dj":0,"dayma":730.1718604651,"delta累计":136.0} +{"price":["730.24","730.26","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74","730.76","730.78","730.8"],"Ask":[0,0,13,0,13,5,24,26,35,51,58,68,67,90,70,35,33,0,6,3,9,164,29,5,85,49,116,157],"Bid":[9,25,16,49,12,17,0,12,4,22,52,42,74,32,0,0,0,16,23,1,29,23,79,65,51,92,144,51],"symbol":"au2506","datetime":"2025-03-31 23:51:00","delta":271.0,"close":730.72,"open":730.38,"high":730.8,"low":730.24,"volume":2390,"dj":0,"dayma":730.1781609195,"delta累计":407.0} +{"price":["729.76","729.78","729.8","729.82","729.84","729.86","729.88","729.9","729.92","729.94","729.98","730.0","730.02","730.04","730.06","730.08","730.1","730.12","730.14","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74","730.76","730.78"],"Ask":[7,12,87,47,71,18,14,28,0,9,8,54,106,79,60,30,65,18,24,3,25,83,34,22,0,2,13,5,16,10,19,6,0,21,29,6,18,0,0,0,0,28,12,18,15,9,4,19,2,6],"Bid":[57,0,98,70,32,14,55,46,8,30,332,40,136,40,35,44,68,1,0,25,50,36,27,0,3,15,17,14,2,0,37,36,16,18,21,33,5,7,4,4,27,11,19,44,3,0,0,10,4,0],"symbol":"au2506","datetime":"2025-03-31 23:54:00","delta":-432.0,"close":730.24,"open":730.72,"high":730.78,"low":729.76,"volume":2955,"dj":-2,"dayma":730.1788636364,"delta累计":-25.0} +{"price":["730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64"],"Ask":[0,0,38,23,8,2,1,6,54,83,79,148,29,98,11,36,43,94,118,43,38,42],"Bid":[22,36,8,7,2,13,11,71,71,28,131,66,48,30,55,29,79,130,71,0,0,0],"symbol":"au2506","datetime":"2025-03-31 23:57:00","delta":86.0,"close":730.56,"open":730.22,"high":730.64,"low":730.22,"volume":2065,"dj":0,"dayma":730.1831460674,"delta累计":61.0} +{"price":["730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74"],"Ask":[0,11,25,24,53,6,33,20,56,100,195,111,40,85,69,126,52,48,125],"Bid":[9,32,14,25,137,74,42,102,89,200,226,68,31,24,117,85,0,0,0],"symbol":"au2506","datetime":"2025-04-01 00:00:00","delta":-96.0,"close":730.4,"open":730.56,"high":730.74,"low":730.38,"volume":2624,"dj":0,"dayma":730.1855555556,"delta累计":-35.0} +{"price":["730.4","730.44","730.46","730.48","730.5","730.52","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1"],"Ask":[6,41,18,7,16,6,0,51,54,23,27,14,4,59,40,0,74,19,36,8,40,81,89,21,11,168,25,5,48,174,119,66,33,83],"Bid":[7,1,21,3,0,0,43,15,25,6,8,17,7,0,0,17,52,69,11,14,4,18,56,45,41,57,72,73,63,60,124,42,20,36],"symbol":"au2506","datetime":"2025-04-01 00:03:00","delta":439.0,"close":730.94,"open":730.4,"high":731.1,"low":730.4,"volume":2760,"dj":0,"dayma":730.1938461538,"delta累计":404.0} +{"price":["730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04"],"Ask":[0,15,74,50,63,69,55,18,16],"Bid":[3,38,101,85,40,61,11,1,0],"symbol":"au2506","datetime":"2025-04-01 00:06:00","delta":20.0,"close":730.96,"open":730.92,"high":731.04,"low":730.88,"volume":770,"dj":0,"dayma":730.202173913,"delta累计":424.0} +{"price":["730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.96"],"Ask":[0,3,24,8,21,51,10,2,0,0,1,27,15,14,37,14,23,17,42,21,10,12],"Bid":[4,19,80,54,6,5,18,13,2,6,17,5,18,19,78,23,17,45,42,20,13,8],"symbol":"au2506","datetime":"2025-04-01 00:09:00","delta":-160.0,"close":730.64,"open":730.92,"high":730.96,"low":730.52,"volume":921,"dj":-2,"dayma":730.2068817204,"delta累计":264.0} +{"price":["730.04","730.06","730.08","730.1","730.12","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68"],"Ask":[8,5,86,7,14,0,13,0,0,0,0,0,4,41,10,10,20,23,3,0,17,4,3,46,85,29,45,35,42,34,8,3,7],"Bid":[30,61,0,14,0,12,0,11,10,7,10,23,4,12,7,37,11,23,24,16,23,5,38,80,77,49,28,34,19,13,1,0,0],"symbol":"au2506","datetime":"2025-04-01 00:12:00","delta":-77.0,"close":730.06,"open":730.62,"high":730.68,"low":730.04,"volume":1382,"dj":-3,"dayma":730.2053191489,"delta累计":187.0} +{"price":["730.06","730.08","730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58"],"Ask":[4,3,16,17,11,31,7,12,15,18,21,44,3,115,22,75,67,30,9,0,16,18,26,25,5],"Bid":[8,6,0,19,57,10,11,10,18,54,31,22,17,28,45,59,77,13,0,26,20,23,13,0,0],"symbol":"au2506","datetime":"2025-04-01 00:15:00","delta":43.0,"close":730.38,"open":730.06,"high":730.58,"low":730.06,"volume":1307,"dj":0,"dayma":730.2071578947,"delta累计":230.0} +{"price":["730.14","730.16","730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38"],"Ask":[12,10,10,10,34,28,48,62,90,12,14,18,24],"Bid":[5,51,36,64,74,249,45,85,43,46,9,8,0],"symbol":"au2506","datetime":"2025-04-01 00:18:00","delta":-343.0,"close":730.16,"open":730.32,"high":730.38,"low":730.14,"volume":1140,"dj":0,"dayma":730.2066666667,"delta累计":-113.0} +{"price":["730.18","730.2","730.22","730.24","730.26","730.28","730.3","730.32","730.34","730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52"],"Ask":[4,4,16,16,32,15,15,43,32,47,11,18,68,36,43,59,20,24],"Bid":[0,0,0,13,0,17,28,31,16,19,5,25,37,45,42,29,4,0],"symbol":"au2506","datetime":"2025-04-01 00:21:00","delta":192.0,"close":730.44,"open":730.18,"high":730.52,"low":730.18,"volume":883,"dj":1,"dayma":730.2090721649,"delta累计":79.0} +{"price":["730.36","730.38","730.4","730.42","730.44","730.46","730.48","730.5","730.52","730.54","730.56","730.58","730.6","730.62","730.64","730.66"],"Ask":[0,13,22,26,26,30,58,19,27,21,46,45,48,59,44,7],"Bid":[11,13,24,32,18,30,28,4,14,18,23,46,38,47,18,0],"symbol":"au2506","datetime":"2025-04-01 00:24:00","delta":127.0,"close":730.58,"open":730.42,"high":730.66,"low":730.36,"volume":905,"dj":0,"dayma":730.2128571429,"delta累计":206.0} +{"price":["730.54","730.56","730.58","730.6","730.62","730.64","730.66","730.68","730.7","730.72","730.74","730.76","730.78","730.82","730.84","730.86","730.88","730.9","730.92","730.94"],"Ask":[4,0,16,12,20,25,13,6,8,12,34,31,25,0,28,48,38,36,5,10],"Bid":[0,6,26,6,28,26,9,7,5,30,41,23,14,25,32,31,17,37,0,0],"symbol":"au2506","datetime":"2025-04-01 00:27:00","delta":8.0,"close":730.9,"open":730.62,"high":730.94,"low":730.54,"volume":778,"dj":0,"dayma":730.2197979798,"delta累计":214.0} +{"price":["730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06"],"Ask":[0,22,39,76,32,49,30,24,35,31,86,28,8],"Bid":[11,24,87,24,92,44,40,41,63,29,10,2,0],"symbol":"au2506","datetime":"2025-04-01 00:30:00","delta":-7.0,"close":730.9,"open":730.92,"high":731.06,"low":730.82,"volume":979,"dj":0,"dayma":730.2266,"delta累计":207.0} +{"price":["730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08"],"Ask":[0,9,49,42,15,17,21,23,13,52,24,14,13,52,63],"Bid":[18,47,64,45,37,11,37,8,31,18,1,13,19,20,29],"symbol":"au2506","datetime":"2025-04-01 00:33:00","delta":9.0,"close":731.08,"open":730.88,"high":731.08,"low":730.8,"volume":835,"dj":0,"dayma":730.235049505,"delta累计":216.0} +{"price":["731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.44"],"Ask":[23,33,13,18,64,21,10,25,62,28,14,27,34,45,87,60,62,58,28,36],"Bid":[32,19,12,3,10,25,18,26,66,5,24,41,52,26,36,45,25,25,0,0],"symbol":"au2506","datetime":"2025-04-01 00:36:00","delta":258.0,"close":731.36,"open":731.04,"high":731.44,"low":731.04,"volume":1341,"dj":0,"dayma":730.2460784314,"delta累计":474.0} +{"price":["731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54"],"Ask":[0,4,35,38,6,14,22,32,33,23,14,3,18,3,28,39,15,90,42,9],"Bid":[9,19,25,48,9,11,36,34,32,20,21,4,4,41,17,15,22,124,32,0],"symbol":"au2506","datetime":"2025-04-01 00:39:00","delta":-55.0,"close":731.52,"open":731.36,"high":731.54,"low":731.16,"volume":1040,"dj":0,"dayma":730.2584466019,"delta累计":419.0} +{"price":["731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56"],"Ask":[9,4,77,22,69,23,38,28,66,30,46,47,38,41],"Bid":[27,32,14,45,69,50,33,43,46,44,80,4,21,23],"symbol":"au2506","datetime":"2025-04-01 00:42:00","delta":7.0,"close":731.54,"open":731.5,"high":731.56,"low":731.3,"volume":1134,"dj":0,"dayma":730.2707692308,"delta累计":426.0} +{"price":["731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62"],"Ask":[0,4,7,34,11,45,35,8,16,45,17,18,38,11,10,2,3,0,3,15,55,27],"Bid":[7,68,44,10,17,42,7,6,34,29,19,12,40,22,14,3,3,10,11,30,33,2],"symbol":"au2506","datetime":"2025-04-01 00:45:00","delta":-59.0,"close":731.48,"open":731.58,"high":731.62,"low":731.2,"volume":953,"dj":0,"dayma":730.2822857143,"delta累计":367.0} +{"price":["731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7"],"Ask":[14,4,27,13,23,43,111,84,52,35,18,8],"Bid":[3,32,49,32,30,60,29,32,25,30,16,0],"symbol":"au2506","datetime":"2025-04-01 00:48:00","delta":94.0,"close":731.54,"open":731.48,"high":731.7,"low":731.48,"volume":837,"dj":0,"dayma":730.2941509434,"delta累计":461.0} +{"price":["731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68"],"Ask":[0,23,23,23,33,56,38,30,20],"Bid":[10,52,31,16,69,31,53,13,8],"symbol":"au2506","datetime":"2025-04-01 00:51:00","delta":-37.0,"close":731.56,"open":731.54,"high":731.68,"low":731.52,"volume":563,"dj":0,"dayma":730.3059813084,"delta累计":424.0} +{"price":["731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66"],"Ask":[0,5,4,17,22,25,6,0,4,4,4,35,13,48,11,11,31],"Bid":[17,9,16,58,11,8,19,50,12,9,7,50,37,40,21,21,22],"symbol":"au2506","datetime":"2025-04-01 00:54:00","delta":-167.0,"close":731.42,"open":731.56,"high":731.66,"low":731.34,"volume":684,"dj":0,"dayma":730.3162962963,"delta累计":257.0} +{"price":["731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5"],"Ask":[5,24,1,24,11,56,47,10,7,15,34,10,24,16,40,5,10,10],"Bid":[9,13,25,58,44,12,8,7,29,32,22,14,31,22,27,15,8,0],"symbol":"au2506","datetime":"2025-04-01 00:57:00","delta":-27.0,"close":731.3,"open":731.42,"high":731.5,"low":731.16,"volume":808,"dj":0,"dayma":730.3253211009,"delta累计":230.0} +{"price":["730.82","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34"],"Ask":[0,0,0,6,19,50,93,18,21,42,6,4,18,32,29,9,8,2,13,5,6,9,9,0,3,2],"Bid":[4,4,13,38,91,53,20,21,74,22,9,4,22,29,20,5,8,15,17,10,18,13,0,12,2,0],"symbol":"au2506","datetime":"2025-04-01 01:00:00","delta":-120.0,"close":730.82,"open":731.32,"high":731.34,"low":730.82,"volume":1003,"dj":0,"dayma":730.3298181818,"delta累计":110.0} +{"price":["730.74","730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22"],"Ask":[0,14,20,2,40,17,36,5,5,16,46,52,26,20,2,38,37,31,71,30,20,11,5,6,8],"Bid":[23,10,0,35,18,0,23,0,8,18,11,20,68,6,33,31,46,39,8,8,5,8,26,5,0],"symbol":"au2506","datetime":"2025-04-01 01:03:00","delta":109.0,"close":731.16,"open":730.8,"high":731.22,"low":730.74,"volume":1099,"dj":0,"dayma":730.3372972973,"delta累计":219.0} +{"price":["731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34"],"Ask":[0,7,3,23,26,16,35,28,43,10,47,30,7,1],"Bid":[8,13,9,18,9,16,45,26,19,13,53,26,4,0],"symbol":"au2506","datetime":"2025-04-01 01:06:00","delta":17.0,"close":731.32,"open":731.16,"high":731.34,"low":731.08,"volume":559,"dj":0,"dayma":730.3460714286,"delta累计":236.0} +{"price":["731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44"],"Ask":[0,1,10,6,0,7,4,20,8,16,28,9,25,57,92,17],"Bid":[19,0,13,5,3,11,9,4,23,13,20,65,25,56,19,0],"symbol":"au2506","datetime":"2025-04-01 01:09:00","delta":15.0,"close":731.42,"open":731.3,"high":731.44,"low":731.14,"volume":628,"dj":0,"dayma":730.3555752212,"delta累计":251.0} +{"price":["731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66"],"Ask":[0,10,15,46,28,41,21,9,33,34,21,27,5,7,10],"Bid":[6,51,48,46,35,15,22,14,44,35,19,9,25,0,0],"symbol":"au2506","datetime":"2025-04-01 01:12:00","delta":-62.0,"close":731.62,"open":731.42,"high":731.66,"low":731.38,"volume":720,"dj":0,"dayma":730.3666666667,"delta累计":189.0} +{"price":["731.4","731.42","731.44","731.46","731.5","731.52","731.54","731.56","731.58","731.6"],"Ask":[0,14,3,15,17,13,49,33,52,11],"Bid":[7,20,26,14,24,31,39,53,31,0],"symbol":"au2506","datetime":"2025-04-01 01:15:00","delta":-38.0,"close":731.42,"open":731.58,"high":731.6,"low":731.4,"volume":481,"dj":0,"dayma":730.375826087,"delta累计":151.0} +{"price":["731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52"],"Ask":[0,34,1,28,1,20,45,32,14,4,25,1,8,2],"Bid":[6,41,20,7,18,54,64,12,6,6,7,6,7,0],"symbol":"au2506","datetime":"2025-04-01 01:18:00","delta":-39.0,"close":731.36,"open":731.44,"high":731.52,"low":731.26,"volume":498,"dj":0,"dayma":730.3843103448,"delta累计":112.0} +{"price":["731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58"],"Ask":[1,1,9,1,24,3,13,8,35,6,13,25,7,40],"Bid":[7,5,13,5,24,8,10,23,39,1,10,21,35,2],"symbol":"au2506","datetime":"2025-04-01 01:21:00","delta":-17.0,"close":731.44,"open":731.36,"high":731.58,"low":731.32,"volume":422,"dj":0,"dayma":730.3933333333,"delta累计":95.0} +{"price":["731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.42","731.44","731.46"],"Ask":[20,7,10,4,10,36,43,31,63,40,0,3,16,41,11,0,6,5],"Bid":[2,19,14,48,16,41,41,45,48,16,6,13,10,28,0,22,0,0],"symbol":"au2506","datetime":"2025-04-01 01:24:00","delta":-23.0,"close":731.1,"open":731.44,"high":731.46,"low":731.1,"volume":778,"dj":0,"dayma":730.3993220339,"delta累计":72.0} +{"price":["730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.2","731.22","731.24","731.26"],"Ask":[0,20,15,44,63,63,30,9,9,0,11,24,45,48,32,13,16,13,6,6],"Bid":[19,18,40,66,56,15,14,36,7,5,17,39,45,10,10,0,0,45,0,0],"symbol":"au2506","datetime":"2025-04-01 01:27:00","delta":25.0,"close":731.26,"open":731.1,"high":731.26,"low":730.86,"volume":960,"dj":0,"dayma":730.4065546218,"delta累计":97.0} +{"price":["731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34"],"Ask":[1,14,9,14,12,50,34,6,10,13,4,24,36,13,36,35,34,7],"Bid":[17,10,21,12,32,8,6,15,28,14,9,28,25,15,25,9,2,0],"symbol":"au2506","datetime":"2025-04-01 01:30:00","delta":76.0,"close":731.08,"open":731.26,"high":731.34,"low":731.0,"volume":681,"dj":0,"dayma":730.4121666667,"delta累计":173.0} +{"price":["730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08"],"Ask":[0,6,22,39,11,18,37,24,35,29,5,17,2,4],"Bid":[8,18,12,31,42,30,22,25,32,6,24,29,16,0],"symbol":"au2506","datetime":"2025-04-01 01:33:00","delta":-46.0,"close":730.92,"open":731.06,"high":731.08,"low":730.82,"volume":576,"dj":0,"dayma":730.4163636364,"delta累计":127.0} +{"price":["730.76","730.78","730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94"],"Ask":[27,13,0,20,6,8,14,34,32,4],"Bid":[13,34,54,16,11,24,14,16,22,1],"symbol":"au2506","datetime":"2025-04-01 01:36:00","delta":-47.0,"close":730.82,"open":730.92,"high":730.94,"low":730.76,"volume":401,"dj":0,"dayma":730.4196721311,"delta累计":80.0} +{"price":["730.8","730.82","730.84","730.86","730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14"],"Ask":[0,2,17,5,10,24,36,32,1,23,40,19,28,15,2,29,5,14],"Bid":[5,8,2,2,7,9,12,3,10,22,9,21,33,11,25,29,10,0],"symbol":"au2506","datetime":"2025-04-01 01:39:00","delta":84.0,"close":731.04,"open":730.82,"high":731.14,"low":730.8,"volume":549,"dj":1,"dayma":730.4247154472,"delta累计":164.0} +{"price":["730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16"],"Ask":[0,0,11,2,11,15,3,32,10,44,8,16,7],"Bid":[20,9,14,14,15,5,16,52,23,7,11,12,0],"symbol":"au2506","datetime":"2025-04-01 01:42:00","delta":-39.0,"close":731.1,"open":731.04,"high":731.16,"low":730.92,"volume":381,"dj":0,"dayma":730.4301612903,"delta累计":125.0} +{"price":["730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12"],"Ask":[0,2,24,11,11,9,4,12,19,3],"Bid":[24,3,3,20,24,9,21,31,15,0],"symbol":"au2506","datetime":"2025-04-01 01:45:00","delta":-55.0,"close":731.0,"open":731.1,"high":731.12,"low":730.94,"volume":261,"dj":0,"dayma":730.43472,"delta累计":70.0} +{"price":["730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04"],"Ask":[0,4,12,15,11,19,15,1],"Bid":[11,9,10,33,7,26,3,0],"symbol":"au2506","datetime":"2025-04-01 01:48:00","delta":-22.0,"close":730.94,"open":731.0,"high":731.04,"low":730.9,"volume":213,"dj":0,"dayma":730.4387301587,"delta累计":48.0} +{"price":["730.88","730.9","730.92","730.94","730.96","730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16","731.18"],"Ask":[0,0,25,20,2,6,13,1,16,14,3,15,8,22,20,12],"Bid":[2,15,0,4,1,7,23,2,8,13,20,14,15,15,24,0],"symbol":"au2506","datetime":"2025-04-01 01:51:00","delta":14.0,"close":731.04,"open":730.9,"high":731.18,"low":730.88,"volume":371,"dj":0,"dayma":730.4434645669,"delta累计":62.0} +{"price":["730.98","731.0","731.02","731.04","731.06","731.14","731.16","731.18","731.2","731.22"],"Ask":[0,18,9,16,3,12,28,49,37,3],"Bid":[2,71,1,1,3,16,25,26,0,0],"symbol":"au2506","datetime":"2025-04-01 01:54:00","delta":30.0,"close":731.18,"open":731.04,"high":731.22,"low":730.98,"volume":332,"dj":0,"dayma":730.44921875,"delta累计":92.0} +{"price":["731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3"],"Ask":[0,7,19,10,25,64,23,11],"Bid":[4,13,10,48,36,39,0,0],"symbol":"au2506","datetime":"2025-04-01 01:57:00","delta":9.0,"close":731.2,"open":731.18,"high":731.3,"low":731.16,"volume":330,"dj":0,"dayma":730.4550387597,"delta累计":101.0} +{"price":["731.14","731.16","731.18","731.2","731.22","731.24"],"Ask":[0,16,25,33,22,13],"Bid":[28,46,30,4,10,0],"symbol":"au2506","datetime":"2025-04-01 02:00:00","delta":-9.0,"close":731.16,"open":731.2,"high":731.24,"low":731.14,"volume":236,"dj":0,"dayma":730.4604615385,"delta累计":92.0} +{"price":["730.98","731.0","731.02","731.04","731.06","731.08","731.1","731.12","731.14","731.16"],"Ask":[1,16,64,46,23,15,3,17,19,6],"Bid":[33,69,28,20,5,18,22,22,1,0],"symbol":"au2506","datetime":"2025-04-01 02:03:00","delta":-8.0,"close":731.16,"open":731.1,"high":731.16,"low":730.98,"volume":459,"dj":0,"dayma":730.4658015267,"delta累计":84.0} +{"price":["731.14","731.16","731.18","731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36"],"Ask":[0,12,7,8,15,10,19,37,22,15,10,10],"Bid":[3,5,0,10,35,34,18,15,7,10,10,0],"symbol":"au2506","datetime":"2025-04-01 02:06:00","delta":18.0,"close":731.26,"open":731.14,"high":731.36,"low":731.14,"volume":351,"dj":0,"dayma":730.4718181818,"delta累计":102.0} +{"price":["731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36"],"Ask":[0,7,1,17,36,58,9,16,6],"Bid":[19,9,4,23,23,18,5,7,0],"symbol":"au2506","datetime":"2025-04-01 02:09:00","delta":42.0,"close":731.36,"open":731.22,"high":731.36,"low":731.2,"volume":271,"dj":0,"dayma":730.4784962406,"delta累计":144.0} +{"price":["731.32","731.34","731.36","731.38","731.4","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62"],"Ask":[0,0,8,8,20,8,11,31,83,26,19,48,14,28],"Bid":[2,9,2,24,1,0,34,62,34,34,9,20,10,0],"symbol":"au2506","datetime":"2025-04-01 02:12:00","delta":63.0,"close":731.58,"open":731.36,"high":731.62,"low":731.32,"volume":614,"dj":0,"dayma":730.4867164179,"delta累计":207.0} +{"price":["731.52","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7"],"Ask":[0,4,10,18,26,17,37,19,23],"Bid":[15,5,13,47,18,32,19,10,0],"symbol":"au2506","datetime":"2025-04-01 02:15:00","delta":-5.0,"close":731.58,"open":731.58,"high":731.7,"low":731.52,"volume":346,"dj":0,"dayma":730.4948148148,"delta累计":202.0} +{"price":["731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64"],"Ask":[2,18,8,24,6,12,5,6,8,11,10],"Bid":[7,27,1,31,9,20,13,10,11,5,0],"symbol":"au2506","datetime":"2025-04-01 02:18:00","delta":-24.0,"close":731.58,"open":731.58,"high":731.64,"low":731.44,"volume":294,"dj":0,"dayma":730.5027941176,"delta累计":178.0} +{"price":["731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.82","731.84","731.86","731.88","731.9","731.92"],"Ask":[0,5,12,20,34,10,8,8,26,104,36,6,14,8,21,8,10],"Bid":[3,9,18,8,0,0,3,30,16,33,3,10,0,0,17,9,0],"symbol":"au2506","datetime":"2025-04-01 02:21:00","delta":171.0,"close":731.88,"open":731.62,"high":731.92,"low":731.6,"volume":509,"dj":1,"dayma":730.5128467153,"delta累计":349.0} +{"price":["731.86","731.88","731.9","731.92","731.94","731.96","731.98","732.0","732.02","732.04","732.06","732.08","732.1","732.12","732.14","732.16","732.18","732.2"],"Ask":[7,6,32,23,35,23,23,93,8,12,4,9,16,27,21,29,9,13],"Bid":[15,0,14,25,21,0,4,0,4,2,8,0,13,20,25,5,0,0],"symbol":"au2506","datetime":"2025-04-01 02:24:00","delta":234.0,"close":732.2,"open":731.86,"high":732.2,"low":731.86,"volume":566,"dj":1,"dayma":730.5250724638,"delta累计":583.0} +{"price":["732.04","732.06","732.08","732.1","732.14","732.16","732.18","732.2","732.22","732.24","732.26","732.28","732.3"],"Ask":[0,6,6,16,0,2,12,18,39,60,51,15,21],"Bid":[17,27,1,6,10,14,47,47,55,127,32,18,0],"symbol":"au2506","datetime":"2025-04-01 02:27:00","delta":-155.0,"close":732.1,"open":732.22,"high":732.3,"low":732.04,"volume":693,"dj":0,"dayma":730.5364028777,"delta累计":428.0} +{"price":["735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18"],"Ask":[0,13,32,6,4,0,18,15,0,25,0,24],"Bid":[9,26,53,28,0,35,4,76,6,29,16,0],"symbol":"au2506","datetime":"2025-04-01 09:45:00","delta":-145.0,"close":736.08,"open":736.14,"high":736.18,"low":735.96,"volume":472,"dj":0,"dayma":731.2615686275,"delta累计":222.0} +{"price":["736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56"],"Ask":[7,7,0,9,39,50,124,165,142,74,98,58,27,54,40,54,113,12,70,53,107,26,20,30,7,82,21,161,35],"Bid":[38,7,10,132,168,112,139,234,43,90,93,34,71,24,16,0,0,18,24,53,47,0,0,31,22,96,13,59,0],"symbol":"au2506","datetime":"2025-04-01 09:48:00","delta":111.0,"close":736.5,"open":736.1,"high":736.58,"low":736.0,"volume":3568,"dj":2,"dayma":731.3623076923,"delta累计":333.0} +{"price":["736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52"],"Ask":[11,98,37,97,152,110,61,13,18,52,20,78,52,101,29,24,70,59,8],"Bid":[63,145,75,69,98,59,28,45,44,44,117,76,57,61,58,68,47,17,0],"symbol":"au2506","datetime":"2025-04-01 09:51:00","delta":-81.0,"close":736.2,"open":736.48,"high":736.52,"low":736.16,"volume":2373,"dj":0,"dayma":731.4535849057,"delta累计":252.0} +{"price":["736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54"],"Ask":[0,7,7,23,0,7,21,15,85,114,168,50,30,0,137,72,303,47,20],"Bid":[21,0,0,0,27,18,48,69,72,117,108,22,9,26,168,129,25,24,0],"symbol":"au2506","datetime":"2025-04-01 09:54:00","delta":223.0,"close":736.28,"open":736.18,"high":736.54,"low":736.18,"volume":2106,"dj":0,"dayma":731.542962963,"delta累计":475.0} +{"price":["735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28"],"Ask":[0,0,62,17,21,49,187,73,29,61,10,8,12,5,31,59,205,80,0,0,5,0,33,46,65,78,145,72,25,5,11],"Bid":[8,13,65,36,0,59,93,44,0,21,38,10,4,40,137,70,99,34,19,4,44,67,32,90,117,117,123,49,22,6,0],"symbol":"au2506","datetime":"2025-04-01 09:57:00","delta":-67.0,"close":735.88,"open":736.26,"high":736.28,"low":735.68,"volume":3111,"dj":0,"dayma":731.6218181818,"delta累计":408.0} +{"price":["735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16"],"Ask":[0,0,6,60,87,70,57,116,113,78,59,92,34,57,50,36,2,51,22],"Bid":[29,28,30,38,25,47,56,102,25,120,107,31,39,55,11,11,6,19,0],"symbol":"au2506","datetime":"2025-04-01 10:00:00","delta":211.0,"close":736.0,"open":735.88,"high":736.16,"low":735.8,"volume":1868,"dj":0,"dayma":731.7,"delta累计":619.0} +{"price":["735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.98","736.0"],"Ask":[68,37,39,71,29,72,30,28,34,36,79,7,34,44,43,45,60,99,17,0,19,5,4],"Bid":[78,15,46,51,17,15,59,75,132,22,31,46,42,70,33,47,49,6,39,14,49,54,0],"symbol":"au2506","datetime":"2025-04-01 10:03:00","delta":-90.0,"close":735.88,"open":735.98,"high":736.0,"low":735.54,"volume":2228,"dj":0,"dayma":731.7733333333,"delta累计":529.0} +{"price":["735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18"],"Ask":[0,0,7,33,86,84,109,53,133,58,26,29,17,3,26,0,18,24,0,11,10,21,50,13,9,23,21,35,0,39,78,22],"Bid":[28,33,40,53,86,43,84,94,43,31,36,51,0,14,18,7,0,10,21,45,24,30,57,8,13,0,0,40,12,93,47,0],"symbol":"au2506","datetime":"2025-04-01 10:06:00","delta":-23.0,"close":735.74,"open":735.86,"high":736.18,"low":735.56,"volume":2277,"dj":0,"dayma":731.8417241379,"delta累计":506.0} +{"price":["735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3"],"Ask":[0,16,22,29,20,60,16,18,0,8,0,31,16,17,27,8,63,8,0,17,37,78,169,50,57,51,27,43,64,49,57,7],"Bid":[1,26,8,27,33,21,7,4,3,0,4,7,0,4,27,32,13,5,11,45,60,91,64,70,43,33,27,104,87,96,23,0],"symbol":"au2506","datetime":"2025-04-01 10:09:00","delta":89.0,"close":736.18,"open":735.8,"high":736.3,"low":735.68,"volume":2150,"dj":0,"dayma":731.9152542373,"delta累计":595.0} +{"price":["736.16","736.18","736.22","736.24","736.26","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.9"],"Ask":[0,1,9,3,12,28,15,58,52,103,59,33,54,39,77,157,55,23,85,0,64,33,17,16,9,136,64,0,23,28,78,43,3,20,24],"Bid":[13,7,11,2,0,13,81,50,59,83,62,42,58,63,83,74,37,14,60,13,56,27,62,9,110,34,61,17,18,37,13,9,45,21,0],"symbol":"au2506","datetime":"2025-04-01 10:12:00","delta":77.0,"close":736.9,"open":736.18,"high":736.9,"low":736.16,"volume":2935,"dj":0,"dayma":731.9983333333,"delta累计":672.0} +{"price":["736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12"],"Ask":[0,0,18,64,217,344,129,125,136,387,63,55,18,5,143,9],"Bid":[19,38,82,202,321,258,29,100,44,163,47,35,43,18,123,0],"symbol":"au2506","datetime":"2025-04-01 10:15:00","delta":191.0,"close":736.9,"open":736.92,"high":737.12,"low":736.82,"volume":3540,"dj":0,"dayma":732.0786885246,"delta累计":863.0} +{"price":["737.28"],"Ask":[145],"Bid":[0],"symbol":"au2506","datetime":"2025-04-01 10:30:00","delta":145.0,"close":737.28,"open":737.28,"high":737.28,"low":737.28,"volume":145,"dj":0,"dayma":732.1625806452,"delta累计":1008.0} +{"price":["737.3","737.32","737.36","737.4","737.42","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.88","737.9"],"Ask":[102,0,0,46,74,0,0,87,123,20,15,92,101,87,115,116,92,224,65,160,192,77,163,113,162,72,42,101],"Bid":[0,61,63,66,0,8,37,85,28,7,108,191,140,137,70,248,193,210,119,33,178,111,133,235,0,23,0,0],"symbol":"au2506","datetime":"2025-04-01 10:33:00","delta":-43.0,"close":737.8,"open":737.3,"high":737.9,"low":737.3,"volume":5379,"dj":0,"dayma":732.2520634921,"delta累计":965.0} +{"price":["737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82"],"Ask":[10,17,24,23,65,54,30,16,71,22,106,109,90,125,21],"Bid":[34,50,57,132,87,45,48,67,119,59,221,102,58,78,8],"symbol":"au2506","datetime":"2025-04-01 10:36:00","delta":-382.0,"close":737.62,"open":737.8,"high":737.82,"low":737.54,"volume":2077,"dj":0,"dayma":732.3359375,"delta累计":583.0} +{"price":["737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66"],"Ask":[0,35,42,90,61,100,39,104,91,36,77,40,47,23,17,1],"Bid":[19,46,78,94,8,44,77,132,197,45,58,34,14,4,0,0],"symbol":"au2506","datetime":"2025-04-01 10:39:00","delta":-47.0,"close":737.4,"open":737.64,"high":737.66,"low":737.36,"volume":1743,"dj":0,"dayma":732.4138461538,"delta累计":536.0} +{"price":["737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62"],"Ask":[0,38,22,28,0,21,14,19,26,40,47,50,97,51,82,68,13,62,15,48,44,104,38,25],"Bid":[27,1,22,0,15,0,17,37,27,70,30,70,108,49,27,40,24,31,8,72,27,22,0,0],"symbol":"au2506","datetime":"2025-04-01 10:42:00","delta":228.0,"close":737.38,"open":737.38,"high":737.62,"low":737.16,"volume":1793,"dj":0,"dayma":732.4890909091,"delta累计":764.0} +{"price":["737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.66","737.68","737.7","737.72","737.74"],"Ask":[13,108,5,81,15,12,1,38,49,39,83,24,16,25,20,29,3,24,34,61,103,54],"Bid":[28,66,18,10,0,23,20,25,31,29,24,0,0,2,11,0,18,31,106,50,8,0],"symbol":"au2506","datetime":"2025-04-01 10:45:00","delta":337.0,"close":737.74,"open":737.38,"high":737.74,"low":737.3,"volume":1425,"dj":1,"dayma":732.5674626866,"delta累计":1101.0} +{"price":["737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.88","737.9","737.92","737.94","737.96","737.98","738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24"],"Ask":[0,6,92,63,151,117,50,58,40,102,28,41,3,14,18,5,9,3,93,13,58,16,40,9,51,94,22,99,0,13],"Bid":[18,11,62,84,112,44,19,52,140,51,20,0,14,49,0,21,109,25,0,14,0,23,63,18,98,75,74,62,18,0],"symbol":"au2506","datetime":"2025-04-01 10:48:00","delta":32.0,"close":738.0,"open":737.74,"high":738.24,"low":737.66,"volume":2707,"dj":2,"dayma":732.6473529412,"delta累计":1133.0} +{"price":["737.86","737.88","737.9","737.92","737.94","737.96","737.98","738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2"],"Ask":[0,51,82,17,28,55,58,63,67,96,33,49,56,10,25,73,111,21],"Bid":[14,37,49,38,47,44,36,38,54,106,73,56,27,41,64,180,11,0],"symbol":"au2506","datetime":"2025-04-01 10:51:00","delta":-20.0,"close":738.1,"open":738.04,"high":738.2,"low":737.86,"volume":2003,"dj":0,"dayma":732.7263768116,"delta累计":1113.0} +{"price":["738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.32"],"Ask":[0,2,31,50,50,61,19,149,52,62,77,37,49,62,55,70,59],"Bid":[7,26,37,38,25,62,22,18,51,46,70,64,18,119,20,0,0],"symbol":"au2506","datetime":"2025-04-01 10:54:00","delta":262.0,"close":738.28,"open":738.08,"high":738.34,"low":738.0,"volume":1640,"dj":0,"dayma":732.8057142857,"delta累计":1375.0} +{"price":["738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.32","738.34","738.36","738.38","738.4","738.42","738.44","738.46"],"Ask":[8,61,73,66,47,63,82,67,14,62,149,88,81,22,18],"Bid":[28,95,66,11,57,15,168,43,80,75,80,43,16,0,1],"symbol":"au2506","datetime":"2025-04-01 10:57:00","delta":123.0,"close":738.42,"open":738.26,"high":738.46,"low":738.18,"volume":1826,"dj":0,"dayma":732.8847887324,"delta累计":1498.0} +{"price":["738.2","738.22","738.24","738.26","738.28","738.3","738.32","738.34","738.36","738.38","738.4","738.42","738.44","738.46","738.48","738.5","738.52","738.54","738.56","738.58","738.6","738.62"],"Ask":[17,15,29,45,46,27,75,38,13,24,27,58,132,129,82,134,24,15,46,73,43,32],"Bid":[49,27,16,16,53,37,104,18,54,53,32,99,82,93,29,54,45,118,27,33,17,0],"symbol":"au2506","datetime":"2025-04-01 11:00:00","delta":68.0,"close":738.34,"open":738.46,"high":738.62,"low":738.2,"volume":2335,"dj":0,"dayma":732.9605555556,"delta累计":1566.0} +{"price":["738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.32","738.34","738.36"],"Ask":[31,164,40,77,53,36,70,41,71,63,39,41,16,28],"Bid":[100,80,16,72,71,40,45,36,76,68,5,24,0,0],"symbol":"au2506","datetime":"2025-04-01 11:03:00","delta":137.0,"close":738.36,"open":738.32,"high":738.36,"low":738.1,"volume":1614,"dj":0,"dayma":733.0345205479,"delta累计":1703.0} +{"price":["738.08","738.12","738.14","738.16","738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.32","738.34","738.36","738.38","738.4","738.42","738.44","738.46","738.48"],"Ask":[0,0,0,11,29,6,3,39,24,12,52,29,46,49,89,69,20,48,13,20],"Bid":[15,6,13,18,31,38,50,36,33,29,76,62,60,34,90,104,18,16,4,18],"symbol":"au2506","datetime":"2025-04-01 11:06:00","delta":-192.0,"close":738.36,"open":738.34,"high":738.48,"low":738.08,"volume":1399,"dj":0,"dayma":733.1064864865,"delta累计":1511.0} +{"price":["738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.32","738.34","738.36","738.38","738.4","738.46"],"Ask":[0,2,64,77,151,138,95,61,26,56,47,21,185,5,14,0,2,29,5,10,0,31],"Bid":[54,25,42,43,40,114,32,34,43,36,62,42,87,0,0,24,0,6,9,43,9,0],"symbol":"au2506","datetime":"2025-04-01 11:09:00","delta":274.0,"close":738.16,"open":738.36,"high":738.46,"low":738.0,"volume":1971,"dj":0,"dayma":733.1738666667,"delta累计":1785.0} +{"price":["737.74","737.78","737.8","737.82","737.84","737.86","737.88","737.9","737.92","737.94","737.96","737.98","738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18"],"Ask":[0,1,8,14,51,65,28,41,44,58,2,52,41,126,19,46,37,46,41,61,24,3],"Bid":[10,28,49,33,54,43,15,106,48,23,25,16,38,16,46,36,59,12,48,44,6,0],"symbol":"au2506","datetime":"2025-04-01 11:12:00","delta":53.0,"close":737.78,"open":738.14,"high":738.18,"low":737.74,"volume":1684,"dj":-1,"dayma":733.2344736842,"delta累计":1838.0} +{"price":["737.78","737.8","737.82","737.84","737.86","737.88","737.9","737.94","737.96","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.22"],"Ask":[13,58,13,96,21,86,32,59,25,4,0,21,30,66,177,34,50,77,52,26],"Bid":[23,5,25,37,12,62,0,0,0,0,9,52,79,82,99,79,45,1,19,0],"symbol":"au2506","datetime":"2025-04-01 11:15:00","delta":311.0,"close":738.12,"open":737.78,"high":738.22,"low":737.78,"volume":1719,"dj":1,"dayma":733.2979220779,"delta累计":2149.0} +{"price":["738.06","738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.32","738.34","738.36","738.38","738.4"],"Ask":[0,7,19,16,17,18,39,41,12,39,25,79,86,60,59,43,2],"Bid":[3,4,16,23,7,13,53,17,8,32,27,59,33,67,40,0,0],"symbol":"au2506","datetime":"2025-04-01 11:18:00","delta":160.0,"close":738.36,"open":738.14,"high":738.4,"low":738.06,"volume":1034,"dj":0,"dayma":733.3628205128,"delta累计":2309.0} +{"price":["738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.32","738.34","738.36","738.38","738.4","738.42","738.44","738.46","738.48","738.5"],"Ask":[0,16,30,4,24,5,18,2,27,1,6,11,19,5,28,35,58,41,68,45,91,12],"Bid":[2,52,17,16,17,17,20,6,1,18,39,52,29,35,21,71,78,81,103,20,28,0],"symbol":"au2506","datetime":"2025-04-01 11:21:00","delta":-177.0,"close":738.1,"open":738.36,"high":738.5,"low":738.08,"volume":1327,"dj":0,"dayma":733.4227848101,"delta累计":2132.0} +{"price":["737.92","737.94","737.96","737.98","738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24"],"Ask":[0,18,45,107,106,20,22,37,9,23,67,63,58,50,10,4,5],"Bid":[11,85,56,86,36,0,14,22,19,29,40,33,50,13,6,0,0],"symbol":"au2506","datetime":"2025-04-01 11:24:00","delta":144.0,"close":738.2,"open":738.08,"high":738.24,"low":737.92,"volume":1292,"dj":0,"dayma":733.4825,"delta累计":2276.0} +{"price":["738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24","738.26"],"Ask":[0,2,3,44,103,102,66,19,29],"Bid":[13,22,33,103,56,34,34,13,5],"symbol":"au2506","datetime":"2025-04-01 11:27:00","delta":55.0,"close":738.2,"open":738.2,"high":738.26,"low":738.1,"volume":751,"dj":0,"dayma":733.5407407407,"delta累计":2331.0} +{"price":["738.16","738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.32","738.34","738.36","738.38","738.4","738.42","738.44","738.46","738.48"],"Ask":[0,0,14,40,63,67,17,29,11,9,11,29,75,51,40,107,20],"Bid":[2,41,47,28,35,17,6,6,48,22,96,65,52,48,67,23,0],"symbol":"au2506","datetime":"2025-04-01 11:30:00","delta":-20.0,"close":738.46,"open":738.2,"high":738.48,"low":738.16,"volume":1264,"dj":0,"dayma":733.6007317073,"delta累计":2311.0} +{"price":["738.5"],"Ask":[227],"Bid":[0],"symbol":"au2506","datetime":"2025-04-01 13:30:00","delta":227.0,"close":738.5,"open":738.5,"high":738.5,"low":738.5,"volume":227,"dj":0,"dayma":733.6597590361,"delta累计":2538.0} +{"price":["738.76","738.78","738.8","738.82","738.84","738.86","738.88","738.9","738.92","738.94","738.96","738.98","739.0","739.02","739.04","739.06","739.08","739.1","739.12","739.14","739.16","739.18","739.22","739.24","739.26","739.28"],"Ask":[90,232,68,59,60,22,95,312,212,68,96,154,63,93,65,0,49,0,41,17,9,228,27,49,118,61],"Bid":[28,17,3,54,16,57,102,106,131,49,97,315,24,26,0,15,31,18,58,6,67,5,24,82,95,7],"symbol":"au2506","datetime":"2025-04-01 13:33:00","delta":855.0,"close":739.26,"open":738.66,"high":739.28,"low":738.66,"volume":4367,"dj":1,"dayma":733.7264285714,"delta累计":3393.0} +{"price":["739.18","739.2","739.22","739.24","739.26","739.28","739.3","739.32","739.34","739.36","739.38","739.4","739.42","739.44","739.46"],"Ask":[0,29,0,46,39,132,232,162,149,61,80,108,49,46,40],"Bid":[4,53,24,44,92,151,240,57,84,46,100,23,43,15,25],"symbol":"au2506","datetime":"2025-04-01 13:36:00","delta":172.0,"close":739.34,"open":739.28,"high":739.46,"low":739.18,"volume":2361,"dj":0,"dayma":733.7924705882,"delta累计":3565.0} +{"price":["739.26","739.28","739.3","739.32","739.34","739.36","739.38","739.4","739.42","739.46","739.48","739.5","739.52","739.54","739.56","739.58","739.6","739.62","739.64","739.66","739.68","739.7","739.72","739.74","739.76","739.78","739.8"],"Ask":[0,19,45,60,17,44,45,67,36,0,26,13,114,47,21,27,30,31,5,59,13,93,85,34,19,63,8],"Bid":[51,83,110,26,42,32,50,4,14,46,95,38,60,55,29,21,25,42,13,35,24,23,249,43,30,26,0],"symbol":"au2506","datetime":"2025-04-01 13:39:00","delta":-245.0,"close":739.6,"open":739.38,"high":739.8,"low":739.26,"volume":2430,"dj":0,"dayma":733.86,"delta累计":3320.0} +{"price":["739.16","739.18","739.2","739.22","739.24","739.26","739.28","739.3","739.32","739.34","739.36","739.38","739.4","739.42","739.44","739.46","739.48","739.5","739.52","739.54","739.56","739.6"],"Ask":[0,11,57,52,56,71,69,83,59,69,77,77,29,40,47,28,14,23,0,0,10,7],"Bid":[11,68,57,29,41,108,66,107,53,40,41,106,49,44,21,4,0,40,12,9,26,0],"symbol":"au2506","datetime":"2025-04-01 13:42:00","delta":-53.0,"close":739.3,"open":739.6,"high":739.6,"low":739.16,"volume":1982,"dj":0,"dayma":733.9225287356,"delta累计":3267.0} +{"price":["738.62","738.64","738.66","738.68","738.7","738.72","738.74","738.76","738.78","738.8","738.82","738.84","738.86","738.88","738.9","738.92","738.96","739.0","739.02","739.04","739.08","739.1","739.12","739.14","739.16","739.18","739.2","739.22","739.24","739.26","739.28","739.3"],"Ask":[0,62,68,31,143,145,110,28,44,48,95,51,19,50,15,13,55,0,89,12,0,17,58,26,34,20,0,12,8,33,4,21],"Bid":[15,72,146,140,93,54,66,35,70,117,50,50,34,27,7,58,24,30,55,59,7,0,38,50,65,3,23,23,0,11,7,0],"symbol":"au2506","datetime":"2025-04-01 13:45:00","delta":-118.0,"close":738.88,"open":739.3,"high":739.3,"low":738.62,"volume":3002,"dj":0,"dayma":733.9788636364,"delta累计":3149.0} +{"price":["738.4","738.44","738.46","738.48","738.5","738.52","738.54","738.56","738.58","738.6","738.62","738.64","738.66","738.68","738.7","738.72","738.74","738.76","738.78","738.8","738.82","738.84","738.86","738.88","738.9","738.92","738.94","738.96","738.98","739.0","739.02","739.04","739.06","739.08","739.1","739.12","739.14","739.16"],"Ask":[0,28,19,53,52,69,75,46,19,27,27,52,26,28,26,35,19,16,34,21,10,37,0,62,21,20,24,19,1,83,18,19,61,16,6,23,34,29],"Bid":[49,59,58,0,59,35,100,68,58,91,16,37,21,41,59,90,56,19,46,78,26,18,46,32,20,9,19,13,0,86,7,29,0,17,9,0,22,0],"symbol":"au2506","datetime":"2025-04-01 13:48:00","delta":-238.0,"close":738.56,"open":738.86,"high":739.16,"low":738.4,"volume":2929,"dj":0,"dayma":734.0303370787,"delta累计":2911.0} +{"price":["737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.78","737.8","737.82","737.84","737.92","737.98","738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.26","738.28","738.3","738.32","738.36","738.38","738.4","738.42","738.44","738.46","738.48","738.5","738.52","738.54","738.56","738.58","738.6","738.62","738.64","738.66","738.68","738.7","738.72"],"Ask":[33,100,14,90,32,148,53,27,0,0,0,20,0,23,0,9,0,22,83,71,42,130,0,45,0,0,79,49,33,0,0,11,21,0,18,18,30,33,56,26,23,27,66,40,97,93,19],"Bid":[36,46,0,16,0,175,35,27,22,19,29,23,62,74,69,0,8,106,89,20,31,34,24,12,27,32,11,46,0,21,33,5,14,11,0,23,99,28,61,47,7,114,36,52,68,36,0],"symbol":"au2506","datetime":"2025-04-01 13:51:00","delta":-47.0,"close":737.72,"open":738.56,"high":738.72,"low":737.6,"volume":3970,"dj":-1,"dayma":734.0713333333,"delta累计":2864.0} +{"price":["736.22","736.24","736.32","736.34","736.38","736.4","736.42","736.44","736.46","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.86","736.88","737.02","737.06","737.08","737.1","737.12","737.14","737.16","737.2","737.22","737.24","737.26","737.28","737.3","737.34","737.36","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.9","737.94","737.98","738.0","738.02","738.06"],"Ask":[43,254,146,0,0,158,30,0,31,57,119,137,43,24,0,0,0,15,0,16,0,68,142,77,0,154,56,0,0,22,21,113,49,25,0,0,29,94,27,23,0,0,0,36,11,89,13,111,46,69,6,100,29,0,39,18,121,49,117,72,37,41,54,0,14,18,32,18,44,0,22],"Bid":[30,146,59,43,23,101,57,30,0,129,34,103,14,0,19,12,35,31,44,30,79,177,128,6,107,33,96,38,124,98,26,0,7,23,51,15,14,36,42,45,39,39,34,101,22,37,13,147,83,95,21,76,51,7,96,20,58,108,37,78,29,91,47,46,0,0,46,41,49,14,0],"symbol":"au2506","datetime":"2025-04-01 13:54:00","delta":-431.0,"close":736.5,"open":737.74,"high":738.06,"low":736.22,"volume":7824,"dj":-2,"dayma":734.098021978,"delta累计":2433.0} +{"price":["735.48","735.5","735.52","735.56","735.58","735.6","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.8"],"Ask":[0,43,21,99,86,14,0,0,27,84,91,19,141,21,21,0,0,50,93,97,194,79,130,59,234,455,142,104,178,109,162,167,200,74,130,64,0,140,88,123,116,26,33,0,63,25,0,27,168,117,36,0,11,212,18,25,0,28,0,176,67,24],"Bid":[39,104,140,0,0,0,49,35,0,0,111,12,149,128,54,73,25,0,16,37,72,143,98,51,205,192,397,77,95,157,362,0,35,47,58,61,122,21,35,13,31,0,0,22,41,64,57,107,83,115,107,70,0,70,121,73,35,121,33,242,58,0],"symbol":"au2506","datetime":"2025-04-01 13:57:00","delta":248.0,"close":736.32,"open":736.52,"high":736.8,"low":735.48,"volume":11226,"dj":-2,"dayma":734.122173913,"delta累计":2681.0} +{"price":["736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74"],"Ask":[0,0,87,7,27,22,21,44,30,186,243,62,44,156,162,101,48,65,96,86,111,35,14,80,42,71,169,58,31,73,189,119],"Bid":[13,23,75,0,41,43,39,77,73,143,153,51,0,203,193,85,99,43,4,115,49,11,11,34,36,31,199,55,47,55,24,45],"symbol":"au2506","datetime":"2025-04-01 14:00:00","delta":409.0,"close":736.2,"open":736.34,"high":736.74,"low":736.12,"volume":5322,"dj":0,"dayma":734.144516129,"delta累计":3090.0} +{"price":["734.84","734.86","734.9","734.92","734.94","734.96","734.98","735.0","735.02","735.04","735.06","735.08","735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.76","735.78","735.8","735.82","735.84","735.86","735.88","736.0","736.02","736.08","736.12"],"Ask":[0,0,0,108,22,29,0,0,22,64,106,0,235,65,80,141,281,191,380,273,127,194,247,0,26,26,36,54,0,64,47,37,15,16,5,124,20,90,118,73,90,0,83,0,42,0,33,0,0,21,97,0,0,0,0],"Bid":[41,54,145,42,32,37,294,170,0,0,426,36,200,78,342,263,171,241,213,65,55,126,51,78,101,101,43,150,24,10,193,65,278,45,63,130,70,199,17,50,56,42,264,39,149,40,172,34,25,96,34,47,17,80,43],"symbol":"au2506","datetime":"2025-04-01 14:03:00","delta":-2155.0,"close":735.76,"open":736.12,"high":736.12,"low":734.84,"volume":11201,"dj":-5,"dayma":734.1617021277,"delta累计":935.0} +{"price":["735.0","735.06","735.08","735.1","735.18","735.2","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.9","735.92","735.96","736.08","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58"],"Ask":[0,35,82,0,131,113,78,0,25,0,54,17,0,105,100,106,53,28,80,0,16,70,87,0,0,30,13,42,79,34,14,132,116,139,95,62,43,37,65,37,0,33,84,22,168,38,45,2,54,73,86,14,23,21,112,114,101,664,167,228,52,122,25],"Bid":[27,69,0,19,31,135,0,42,48,27,179,87,136,0,258,92,30,48,0,22,36,0,0,13,41,0,69,14,86,96,60,34,99,59,20,0,173,13,0,0,22,0,16,33,121,0,57,14,14,123,8,60,17,53,228,214,40,105,23,156,91,57,0],"symbol":"au2506","datetime":"2025-04-01 14:06:00","delta":851.0,"close":736.58,"open":735.76,"high":736.58,"low":735.0,"volume":9125,"dj":0,"dayma":734.1871578947,"delta累计":1786.0} +{"price":["735.18","735.22","735.24","735.28","735.32","735.34","735.36","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.88","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.24","736.3","736.32","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.52","736.54","736.56","736.58","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.88"],"Ask":[0,0,84,16,159,52,0,33,85,8,18,0,29,17,0,9,40,117,63,0,140,43,0,67,111,107,38,0,0,0,0,9,64,147,76,146,190,175,51,17,18,0,11,54,0,19,0,0,18,11,0,38,17,0,18,14,43,37,68,45,0,23,157,25,31,37,0,15],"Bid":[76,39,0,0,46,0,16,45,37,0,0,18,15,13,55,13,58,242,21,27,183,44,34,46,11,18,45,6,27,13,32,61,132,189,205,87,98,89,54,15,0,25,28,33,7,0,18,9,15,28,5,19,71,67,7,89,56,50,16,84,29,0,83,174,19,0,20,0],"symbol":"au2506","datetime":"2025-04-01 14:09:00","delta":-252.0,"close":735.5,"open":736.58,"high":736.88,"low":735.18,"volume":7004,"dj":-3,"dayma":734.2008333333,"delta累计":1534.0} +{"price":["734.94","734.96","734.98","735.0","735.02","735.04","735.06","735.08","735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54"],"Ask":[0,88,32,55,62,103,0,0,43,102,84,51,56,85,58,87,136,65,103,192,201,59,87,80,63,42,35,119,165,53,10],"Bid":[36,57,0,59,58,67,86,111,44,42,25,65,147,42,77,120,87,99,104,110,62,0,144,76,44,88,32,166,74,0,0],"symbol":"au2506","datetime":"2025-04-01 14:12:00","delta":194.0,"close":735.44,"open":735.52,"high":735.54,"low":734.94,"volume":5160,"dj":0,"dayma":734.2136082474,"delta累计":1728.0} +{"price":["735.2","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74"],"Ask":[0,43,99,7,108,18,14,15,25,16,73,33,33,85,174,106,96,84,37,172,41,54,115,40,0,18,7],"Bid":[19,52,44,79,10,29,18,60,21,122,24,21,74,177,140,99,120,114,38,102,37,61,81,14,25,17,0],"symbol":"au2506","datetime":"2025-04-01 14:15:00","delta":-85.0,"close":735.54,"open":735.5,"high":735.74,"low":735.2,"volume":3530,"dj":0,"dayma":734.2271428571,"delta累计":1643.0} +{"price":["735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.72","735.74","735.8","735.82","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44"],"Ask":[0,17,17,0,16,29,12,2,14,18,36,27,7,6,0,44,63,35,42,6,12,0,54,34,117,35,35,58,0,87,32,42,53,14,0,20,29,36,67,0,15,14,64,65,42,32,45,47,10],"Bid":[26,43,27,5,0,57,26,14,25,61,10,13,0,0,54,0,4,32,27,30,22,39,11,24,43,58,0,38,67,120,87,0,23,11,47,50,19,54,0,11,57,15,127,16,0,28,58,22,0],"symbol":"au2506","datetime":"2025-04-01 14:18:00","delta":-51.0,"close":736.26,"open":735.54,"high":736.44,"low":735.38,"volume":3600,"dj":0,"dayma":734.2476767677,"delta累计":1592.0} +{"price":["735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.24","736.26","736.28","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64"],"Ask":[0,0,16,49,32,0,20,38,18,75,43,100,0,43,42,52,41,7,7,11,14,18,0,10,0,0,7,14,30,12,46,27,108,99,44,2,72,77,39,11,16],"Bid":[51,26,17,74,7,7,73,87,41,218,91,46,25,74,121,75,12,0,20,25,23,19,33,39,15,41,56,26,63,31,88,39,94,54,72,18,68,25,26,0,0],"symbol":"au2506","datetime":"2025-04-01 14:21:00","delta":-680.0,"close":735.84,"open":736.28,"high":736.64,"low":735.8,"volume":3594,"dj":-4,"dayma":734.2636,"delta累计":912.0} +{"price":["735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.18","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4"],"Ask":[0,15,24,54,29,8,34,10,37,14,3,23,8,28,9,0,0,53,90,80,99,65,51,23,113,36],"Bid":[9,30,7,17,14,3,43,19,19,34,5,0,5,4,21,9,22,53,55,62,59,114,83,26,59,0],"symbol":"au2506","datetime":"2025-04-01 14:24:00","delta":134.0,"close":736.3,"open":735.84,"high":736.4,"low":735.82,"volume":1977,"dj":1,"dayma":734.2837623762,"delta累计":1046.0} +{"price":["736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.94","736.98","737.0"],"Ask":[0,13,17,33,56,91,48,92,70,51,16,20,6,43,0,17,8,41,127,109,47,34,25,47,54,84,31,18,19,0,55,45],"Bid":[5,14,11,19,68,35,57,68,23,57,0,7,20,0,8,0,4,123,89,70,64,65,33,77,93,23,19,0,56,25,94,20],"symbol":"au2506","datetime":"2025-04-01 14:27:00","delta":70.0,"close":736.94,"open":736.36,"high":737.0,"low":736.32,"volume":2852,"dj":0,"dayma":734.3098039216,"delta累计":1116.0} +{"price":["736.68","736.7","736.72","736.76","736.78","736.8","736.82","736.84","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36"],"Ask":[0,0,0,8,0,42,0,24,0,0,0,36,29,90,13,39,73,119,137,49,121,12,106,182,67,43,32,130,11,79,9],"Bid":[31,26,8,0,30,18,12,0,14,38,20,29,31,27,47,68,149,127,113,66,28,30,196,129,68,57,143,53,45,0,0],"symbol":"au2506","datetime":"2025-04-01 14:30:00","delta":-152.0,"close":736.68,"open":736.94,"high":737.36,"low":736.68,"volume":3577,"dj":0,"dayma":734.332815534,"delta累计":964.0} +{"price":["736.24","736.3","736.32","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88"],"Ask":[0,22,15,120,0,156,0,90,77,91,95,66,32,60,27,77,44,32,146,79,49,44,14,1,40,13,3,26,22,84],"Bid":[13,0,0,73,111,82,31,27,29,49,18,34,13,26,2,88,31,66,60,47,20,0,28,32,24,0,37,22,34,23],"symbol":"au2506","datetime":"2025-04-01 14:33:00","delta":505.0,"close":736.8,"open":736.68,"high":736.88,"low":736.24,"volume":2946,"dj":0,"dayma":734.3565384615,"delta累计":1469.0} +{"price":["736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1"],"Ask":[0,45,0,10,13,32,41,14,5,19,44,47,58,18,57,57,41,45,59,34,17,25,12,4],"Bid":[8,46,11,9,7,33,10,0,30,12,23,5,41,62,36,31,74,31,50,31,1,65,7,0],"symbol":"au2506","datetime":"2025-04-01 14:36:00","delta":74.0,"close":736.84,"open":736.82,"high":737.1,"low":736.62,"volume":1458,"dj":0,"dayma":734.3801904762,"delta累计":1543.0} +{"price":["736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.82","736.84","736.86","736.88","736.9","736.92","736.94"],"Ask":[0,32,13,0,17,92,47,170,61,74,36,15,13,12,7,30,11,27,54,23,27,18,21,58,21,0,30,32,22,17,2,2],"Bid":[2,49,0,20,38,86,34,46,81,33,20,39,5,8,11,50,17,8,50,33,36,61,9,69,1,21,49,11,1,0,40,0],"symbol":"au2506","datetime":"2025-04-01 14:39:00","delta":56.0,"close":736.32,"open":736.82,"high":736.94,"low":736.3,"volume":2066,"dj":0,"dayma":734.398490566,"delta累计":1599.0} +{"price":["736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5"],"Ask":[0,12,31,19,0,56,0,61,45,35,27,2,24,171,82,49,48,70,37,41,46,47,100,5],"Bid":[75,14,0,27,14,14,72,43,71,48,45,26,38,26,116,56,23,77,17,23,23,60,3,0],"symbol":"au2506","datetime":"2025-04-01 14:42:00","delta":97.0,"close":736.34,"open":736.32,"high":736.5,"low":736.04,"volume":2095,"dj":0,"dayma":734.416635514,"delta累计":1696.0} +{"price":["735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.72"],"Ask":[9,22,77,32,30,41,25,55,0,2,31,20,28,20,2,8,59,10,8,8,49,10,27,53,5,12,57,7,32,10,2,10,16,30,29,15,15,37,16,5],"Bid":[12,57,25,57,108,61,19,25,37,42,51,15,26,37,22,38,53,23,47,17,17,33,10,31,57,3,26,15,17,14,17,8,17,14,4,6,20,8,15,0],"symbol":"au2506","datetime":"2025-04-01 14:45:00","delta":-180.0,"close":736.04,"open":736.36,"high":736.72,"low":735.92,"volume":2211,"dj":0,"dayma":734.4316666667,"delta累计":1516.0} +{"price":["735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16"],"Ask":[0,45,15,41,21,18,19,31,31,40,19,8,14,0,19,33,141,28,13,26,18,3,17,15,26,39,27,61,97,56,73,13],"Bid":[65,47,0,17,21,43,35,76,56,19,18,26,29,26,51,118,57,12,16,32,17,51,59,32,28,70,54,88,90,7,10,3],"symbol":"au2506","datetime":"2025-04-01 14:48:00","delta":-266.0,"close":735.82,"open":736.0,"high":736.16,"low":735.54,"volume":2490,"dj":0,"dayma":734.4444036697,"delta累计":1250.0} +{"price":["735.82","735.84","735.88","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48"],"Ask":[1,4,18,20,3,14,33,21,18,11,35,46,84,62,29,5,14,0,11,16,35,13,26,106,38,39,59,76,118,21,93],"Bid":[0,0,0,4,32,20,38,7,24,9,52,14,11,18,33,4,7,3,17,9,43,20,141,88,46,38,49,132,96,8,0],"symbol":"au2506","datetime":"2025-04-01 14:51:00","delta":106.0,"close":736.46,"open":735.82,"high":736.48,"low":735.82,"volume":2249,"dj":1,"dayma":734.4627272727,"delta累计":1356.0} +{"price":["736.16","736.2","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82"],"Ask":[0,17,0,6,11,8,6,17,0,98,95,79,115,90,125,39,36,21,47,0,11,51,99,3,15,41,72,60,21],"Bid":[58,3,9,6,0,41,12,37,23,125,153,33,37,24,60,41,3,13,0,36,13,16,33,16,30,38,28,17,0],"symbol":"au2506","datetime":"2025-04-01 14:54:00","delta":278.0,"close":736.78,"open":736.46,"high":736.82,"low":736.16,"volume":2309,"dj":0,"dayma":734.4836036036,"delta累计":1634.0} +{"price":["736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.7","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92"],"Ask":[0,24,37,83,11,14,38,11,9,27,36,46,30,58,21,82,5,18,34,0,26,4,21,0,20,22,22,15,21,20,48,64],"Bid":[34,61,23,7,82,24,52,19,28,117,74,34,57,68,31,17,66,33,35,18,0,0,0,3,44,68,9,3,25,46,33,13],"symbol":"au2506","datetime":"2025-04-01 14:57:00","delta":-257.0,"close":736.36,"open":736.78,"high":736.92,"low":736.24,"volume":2243,"dj":0,"dayma":734.5003571429,"delta累计":1377.0} +{"price":["736.2","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16"],"Ask":[28,60,10,54,0,35,0,36,15,41,30,48,47,22,31,0,25,35,87,85,168,89,57,12,224,0,111,0,0,183,26,64,88,255,169,42,62,37,79,54,133,69,85,113,94,105,32],"Bid":[79,0,0,23,36,48,19,88,56,76,104,72,0,39,0,28,0,30,74,207,82,0,34,49,17,56,0,50,24,158,73,156,109,321,51,42,27,23,74,100,79,117,33,26,67,21,0],"symbol":"au2506","datetime":"2025-04-01 21:03:00","delta":272.0,"close":737.14,"open":737.1,"high":737.16,"low":736.2,"volume":6707,"dj":0,"dayma":737.3941176471,"delta累计":641.0} +{"price":["737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48"],"Ask":[45,12,10,23,20,33,46,31,9,60,144,79,295,193,145,258,8,96,109,226,126,37,7,47,49],"Bid":[25,20,22,63,41,4,198,57,44,133,94,127,202,166,134,101,46,157,196,148,106,65,0,26,36],"symbol":"au2506","datetime":"2025-04-01 21:06:00","delta":-103.0,"close":737.24,"open":737.16,"high":737.48,"low":737.0,"volume":4792,"dj":0,"dayma":737.3911538462,"delta累计":538.0} +{"price":["737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8"],"Ask":[5,37,15,32,84,76,27,62,88,27,46,53,33,48,125,49,42,8,35,152,113,12,22,145,51,66,36,0,0,80,115,23,23,15,12,13],"Bid":[14,8,9,39,67,75,34,22,59,60,21,64,5,60,88,7,65,19,20,207,185,8,50,19,72,26,58,51,9,0,35,5,20,46,19,0],"symbol":"au2506","datetime":"2025-04-01 21:09:00","delta":224.0,"close":737.78,"open":737.22,"high":737.8,"low":737.1,"volume":3634,"dj":0,"dayma":737.398490566,"delta累计":762.0} +{"price":["737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.88","737.9","737.92","737.94","737.96","737.98","738.0","738.02","738.04","738.06","738.08"],"Ask":[0,27,14,29,131,59,55,28,93,10,5,32,31,14,41,23,123,0,17,12,11,28,47,48,34,196,22,28,35,12,6,163,66,106,79,106,107,173,68],"Bid":[6,25,39,67,81,91,57,10,27,31,73,42,39,39,10,51,14,23,18,13,44,42,59,62,127,104,36,0,33,0,36,106,193,88,69,49,57,38,0],"symbol":"au2506","datetime":"2025-04-01 21:12:00","delta":180.0,"close":737.48,"open":737.78,"high":738.08,"low":737.3,"volume":4413,"dj":0,"dayma":737.4,"delta累计":942.0} +{"price":["737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62"],"Ask":[36,0,88,15,2,90,104,53,48,15,47,16,68,98,39,68,55,59,52,21,7,46,4,5,9,2,14,33,25,48],"Bid":[76,10,84,52,59,66,152,99,28,81,18,118,61,134,45,45,72,102,46,8,68,0,58,1,5,16,31,57,14,10],"symbol":"au2506","datetime":"2025-04-01 21:15:00","delta":-449.0,"close":737.16,"open":737.48,"high":737.62,"low":737.02,"volume":2987,"dj":0,"dayma":737.3956363636,"delta累计":493.0} +{"price":["736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3"],"Ask":[0,0,120,0,15,99,0,24,31,83,91,21,53,185,124,50,78,55,30,127,74,47,35,73,20,105,0,9,20,18],"Bid":[24,42,25,9,50,0,63,0,0,113,88,119,52,101,85,64,157,32,59,188,32,15,97,73,30,21,12,36,17,0],"symbol":"au2506","datetime":"2025-04-01 21:18:00","delta":-17.0,"close":737.12,"open":737.22,"high":737.3,"low":736.72,"volume":3434,"dj":0,"dayma":737.3907142857,"delta累计":476.0} +{"price":["736.34","736.36","736.38","736.4","736.42","736.44","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2"],"Ask":[0,14,79,33,108,0,36,0,9,68,43,0,23,59,74,0,0,0,58,14,23,41,89,45,17,8,26,75,104,33,79,12,18,26,49,0,27,78,0],"Bid":[54,62,58,0,23,21,13,50,16,12,23,79,7,7,12,32,18,16,54,37,42,45,21,45,62,40,66,105,59,123,26,48,16,48,56,6,0,0,5],"symbol":"au2506","datetime":"2025-04-01 21:21:00","delta":-39.0,"close":736.42,"open":737.16,"high":737.2,"low":736.34,"volume":3101,"dj":-1,"dayma":737.3736842105,"delta累计":437.0} +{"price":["735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52"],"Ask":[0,36,0,12,150,32,21,15,0,71,60,71,11,13,64,19,137,89,12,143,103,60,21,31,37,88,38,68,93,26,90,54,83,50,18,15,28,23,14],"Bid":[39,28,46,126,122,0,49,31,27,32,52,60,27,118,22,0,83,83,137,174,36,103,93,76,0,73,105,53,49,65,129,112,94,36,2,42,37,35,0],"symbol":"au2506","datetime":"2025-04-01 21:24:00","delta":-500.0,"close":735.8,"open":736.4,"high":736.52,"low":735.76,"volume":4890,"dj":0,"dayma":737.3465517241,"delta累计":-63.0} +{"price":["735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34"],"Ask":[0,0,0,59,25,35,66,6,42,23,94,19,64,150,140,75,39,36,374,37,80,48,146,12,66,126,31,18,53,27,4,43,25],"Bid":[78,69,47,118,53,72,38,13,7,32,68,81,118,98,5,128,11,69,42,122,107,82,103,105,140,107,14,0,40,60,0,60,0],"symbol":"au2506","datetime":"2025-04-01 21:27:00","delta":-124.0,"close":735.9,"open":735.82,"high":736.34,"low":735.7,"volume":4361,"dj":0,"dayma":737.3220338983,"delta累计":-187.0} +{"price":["735.6","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18"],"Ask":[14,41,0,49,11,43,43,0,21,55,16,20,40,57,133,77,28,39,80,11,47,152,148,37,38,36,38,6,58],"Bid":[54,51,18,47,31,36,61,21,51,95,46,9,65,51,235,79,28,98,51,32,76,107,54,65,24,22,41,2,20],"symbol":"au2506","datetime":"2025-04-01 21:30:00","delta":-232.0,"close":735.94,"open":735.88,"high":736.18,"low":735.6,"volume":3195,"dj":0,"dayma":737.299,"delta累计":-419.0} +{"price":["735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.24","736.26","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6"],"Ask":[0,10,50,23,27,34,8,0,26,0,89,13,25,124,8,47,53,10,53,25,115,75,73,58,106,123,74,36,82,50,11,6,59,43,148,80,72,58,59,42,118,100,52,117,49,43,60],"Bid":[22,11,22,0,34,23,0,14,79,43,101,74,25,12,97,49,41,8,32,87,48,88,74,158,74,61,8,21,26,0,0,0,31,39,112,146,24,102,64,43,52,137,106,4,12,7,0],"symbol":"au2506","datetime":"2025-04-01 21:33:00","delta":323.0,"close":736.5,"open":735.9,"high":736.6,"low":735.62,"volume":5341,"dj":2,"dayma":737.2859016393,"delta累计":-96.0} +{"price":["736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76"],"Ask":[32,32,96,57,62,35,62,14,45,51,51,15,24,19,156,47,66,107,152,84,104,75,149,35,17],"Bid":[20,52,84,80,78,88,44,39,21,22,49,19,84,169,80,104,82,73,153,108,231,100,56,20,3],"symbol":"au2506","datetime":"2025-04-01 21:36:00","delta":-272.0,"close":736.3,"open":736.5,"high":736.76,"low":736.28,"volume":3762,"dj":0,"dayma":737.27,"delta累计":-368.0} +{"price":["736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56"],"Ask":[33,0,22,22,28,61,8,93,23,15,56,34,29,64,32,62,31,3,16,13,76,19,6,15,121,96,65,46,89],"Bid":[78,82,67,24,38,73,24,34,55,38,62,63,31,4,52,70,14,11,23,37,59,20,25,111,142,52,46,8,40],"symbol":"au2506","datetime":"2025-04-01 21:39:00","delta":-205.0,"close":736.2,"open":736.3,"high":736.56,"low":735.98,"volume":2927,"dj":-1,"dayma":737.253015873,"delta累计":-573.0} +{"price":["736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.28","736.3","736.34","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.22","737.24"],"Ask":[0,0,52,19,14,0,53,53,12,9,2,4,0,0,7,7,57,80,41,117,90,57,35,15,78,0,22,12,19,10,28,88,0,30,10,41,43,15,96,63,50,85,54,27,53,44,88,39,25,23,21,0,75],"Bid":[11,11,70,41,0,36,17,6,0,0,0,0,3,30,31,10,45,74,16,110,37,83,9,6,25,33,0,12,0,0,54,0,11,33,25,99,34,84,93,54,24,18,34,74,0,53,45,54,0,29,0,49,0],"symbol":"au2506","datetime":"2025-04-01 21:42:00","delta":280.0,"close":737.0,"open":736.22,"high":737.26,"low":736.1,"volume":3737,"dj":0,"dayma":737.2490625,"delta累计":-293.0} +{"price":["736.64","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04"],"Ask":[0,17,32,37,26,0,9,32,43,77,51,73,58,41,32,102,72,178,96,20],"Bid":[20,4,23,55,47,4,30,73,80,48,102,60,57,69,44,135,95,71,14,0],"symbol":"au2506","datetime":"2025-04-01 21:45:00","delta":-35.0,"close":736.74,"open":737.0,"high":737.04,"low":736.64,"volume":2150,"dj":0,"dayma":737.2412307692,"delta累计":-328.0} +{"price":["736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0"],"Ask":[0,0,15,50,60,47,72,85,96,114,50,61,37,27,0,10,10,0,16,31,58,55,48,59,30,61,22,10],"Bid":[89,51,37,85,54,125,45,39,91,52,69,62,27,14,9,8,0,2,52,48,71,41,48,27,60,37,0,0],"symbol":"au2506","datetime":"2025-04-01 21:48:00","delta":-119.0,"close":736.9,"open":736.72,"high":737.0,"low":736.44,"volume":2558,"dj":0,"dayma":737.2360606061,"delta累计":-447.0} +{"price":["736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2"],"Ask":[29,23,83,47,18,15,48,11,57,11,6,15,25,0,27,26,20,6,14,3,22,52,70,32,126,114,109,120,25,20,12,41,6],"Bid":[56,113,16,29,35,52,0,53,35,28,0,9,13,17,90,30,20,19,74,47,36,47,12,36,134,151,144,48,0,19,27,9,0],"symbol":"au2506","datetime":"2025-04-01 21:51:00","delta":-166.0,"close":736.7,"open":736.86,"high":737.2,"low":736.54,"volume":2910,"dj":0,"dayma":737.2280597015,"delta累计":-613.0} +{"price":["736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12"],"Ask":[0,30,40,32,38,23,11,36,79,112,89,89,73,49,53,16,45,12,52,29,15,0,11,8,2,11],"Bid":[26,53,42,104,7,46,24,18,57,101,67,48,113,19,38,11,29,61,16,10,19,1,17,79,11,0],"symbol":"au2506","datetime":"2025-04-01 21:54:00","delta":-62.0,"close":736.88,"open":736.7,"high":737.12,"low":736.62,"volume":2131,"dj":0,"dayma":737.2229411765,"delta累计":-675.0} +{"price":["736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12"],"Ask":[3,17,43,7,14,10,0,94,82,31,41,30,73,90,56,64,50,30,31],"Bid":[0,32,43,7,5,21,30,90,72,15,11,18,128,70,64,10,18,51,34],"symbol":"au2506","datetime":"2025-04-01 21:57:00","delta":47.0,"close":736.84,"open":736.88,"high":737.12,"low":736.76,"volume":1607,"dj":0,"dayma":737.2173913043,"delta累计":-628.0} +{"price":["736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1"],"Ask":[0,12,5,12,13,2,46,33,58,98,50,64,52,79,29,28,58],"Bid":[20,21,4,4,0,20,47,39,82,53,34,105,42,54,38,19,0],"symbol":"au2506","datetime":"2025-04-01 22:00:00","delta":57.0,"close":737.1,"open":736.82,"high":737.1,"low":736.78,"volume":1293,"dj":0,"dayma":737.2157142857,"delta累计":-571.0} +{"price":["736.1","736.12","736.18","736.2","736.22","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.52","736.62","736.64","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.94","736.96","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5"],"Ask":[0,26,0,64,75,18,59,30,186,62,59,13,53,19,61,16,22,0,0,0,0,0,24,0,0,0,53,65,17,10,23,7,23,14,0,21,58,59,109,42,48,157,31,57,8,63,36,43,39,85,90,91,42,79,10,49,65],"Bid":[20,37,95,90,18,27,84,109,121,70,98,121,100,88,19,38,140,38,50,34,11,16,0,22,20,47,8,63,10,15,5,25,42,8,16,100,40,130,78,0,60,94,127,124,23,28,38,29,47,63,154,101,99,47,0,36,0],"symbol":"au2506","datetime":"2025-04-01 22:03:00","delta":-842.0,"close":736.42,"open":737.1,"high":737.5,"low":736.1,"volume":6139,"dj":-3,"dayma":737.2045070423,"delta累计":-1413.0} +{"price":["736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08"],"Ask":[0,54,2,45,19,33,30,33,0,5,9,7,31,43,36,75,6,22,36,49,79,119,88,27,70,54,35,56,4,8,54,0,61,81,38,11,7,33,8,24,58,18,14],"Bid":[11,74,0,7,37,0,0,10,6,0,14,15,1,8,33,11,24,65,14,5,155,180,95,30,75,57,13,0,28,19,57,30,53,54,9,16,16,64,3,33,28,0,0],"symbol":"au2506","datetime":"2025-04-01 22:06:00","delta":132.0,"close":736.96,"open":736.44,"high":737.08,"low":736.18,"volume":3290,"dj":0,"dayma":737.2011111111,"delta累计":-1281.0} +{"price":["736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.14","737.16","737.2"],"Ask":[12,33,18,21,16,54,12,28,68,100,69,58,31,61,117,40,16,29,63,47,68,36,34,24,0,97,29,18,8],"Bid":[33,12,77,51,16,31,16,59,153,59,104,36,24,73,112,99,76,30,35,5,49,25,18,33,26,14,45,19,0],"symbol":"au2506","datetime":"2025-04-01 22:09:00","delta":-123.0,"close":736.66,"open":736.96,"high":737.2,"low":736.6,"volume":2764,"dj":0,"dayma":737.1936986301,"delta累计":-1404.0} +{"price":["736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76"],"Ask":[0,32,27,37,57,110,135,80,92,28,14,58,99,15,49,31,25,8,11,3,108,127,64,51,70,82,45,37,17,33,38,43,44,13,6,10],"Bid":[14,50,65,125,32,23,133,11,11,45,29,14,93,41,13,48,48,40,44,53,139,98,91,52,35,159,51,51,35,21,43,20,39,7,0,0],"symbol":"au2506","datetime":"2025-04-01 22:12:00","delta":-74.0,"close":736.3,"open":736.66,"high":736.76,"low":736.06,"volume":3720,"dj":-1,"dayma":737.1816216216,"delta累计":-1478.0} +{"price":["735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.7","735.72","735.76","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56"],"Ask":[97,75,39,37,55,86,14,7,19,69,81,98,40,16,45,97,0,61,29,0,0,83,40,97,0,98,0,47,0,38,0,0,0,74,40,34,28,16,46,29,0,0,51,60,141,54,16,43,14,0,0,57,0,11,0,43,11,47,31,22,34,50,33,61,99,75,36,30],"Bid":[55,178,42,23,22,0,74,59,7,100,25,110,36,53,105,58,32,46,15,50,123,167,37,0,64,29,30,9,92,0,57,20,30,26,115,0,13,76,267,33,75,22,50,83,92,34,10,24,16,21,62,18,23,22,16,49,0,1,53,38,37,19,0,41,38,38,24,0],"symbol":"au2506","datetime":"2025-04-01 22:15:00","delta":-530.0,"close":735.28,"open":736.36,"high":736.56,"low":735.1,"volume":6258,"dj":-1,"dayma":737.1562666667,"delta累计":-2008.0} +{"price":["735.02","735.06","735.08","735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.42","735.52","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.16"],"Ask":[0,24,61,0,49,96,11,104,0,42,26,49,135,55,75,150,37,215,84,117,0,0,0,0,53,15,0,64,58,233,83,28,133,36,44,12,67,50,49,26,20,33,88,86,21,0,4,21,21],"Bid":[38,76,26,64,52,57,36,89,46,107,51,166,22,89,108,80,52,150,122,2,27,22,14,20,46,37,12,23,113,122,115,57,66,6,29,19,56,75,170,19,54,75,86,60,0,37,33,54,39],"symbol":"au2506","datetime":"2025-04-01 22:18:00","delta":-344.0,"close":735.78,"open":735.24,"high":736.16,"low":735.02,"volume":6000,"dj":-2,"dayma":737.1381578947,"delta累计":-2352.0} +{"price":["735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84"],"Ask":[0,19,30,53,86,17,112,0,51,27,52,37,43,41,128,116,88,81,68,59,26,50,18,17,8,9,0],"Bid":[16,19,29,69,56,51,36,25,47,120,59,73,38,71,119,55,95,60,64,16,40,74,58,0,74,0,5],"symbol":"au2506","datetime":"2025-04-01 22:21:00","delta":-133.0,"close":735.38,"open":735.72,"high":735.84,"low":735.32,"volume":2969,"dj":0,"dayma":737.1153246753,"delta累计":-2485.0} +{"price":["734.8","734.82","734.84","734.86","734.88","734.9","734.92","734.94","734.96","734.98","735.0","735.02","735.04","735.06","735.08","735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58"],"Ask":[0,0,69,17,89,97,19,61,75,0,0,94,21,89,71,99,58,187,65,58,50,32,101,158,22,73,49,63,93,47,38,73,51,46,86,23,41,6,8,7],"Bid":[82,27,33,20,81,174,0,0,0,283,30,109,3,25,93,26,89,112,131,27,149,166,48,137,101,75,28,156,126,2,21,40,15,54,30,52,45,0,0,0],"symbol":"au2506","datetime":"2025-04-01 22:24:00","delta":-354.0,"close":735.26,"open":735.36,"high":735.58,"low":734.8,"volume":5337,"dj":0,"dayma":737.0915384615,"delta累计":-2839.0} +{"price":["735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02"],"Ask":[30,5,7,19,11,12,41,0,27,44,16,0,95,55,0,38,18,21,90,0,15,25,118,128,88,20,24,17,90,77,46,140,217,136,115,46,6,10,65,25],"Bid":[0,7,0,0,1,23,0,77,0,10,73,43,55,13,75,0,0,0,30,22,2,20,101,128,51,0,2,82,17,73,149,158,65,55,79,64,26,13,27,19],"symbol":"au2506","datetime":"2025-04-01 22:27:00","delta":377.0,"close":735.84,"open":735.24,"high":736.02,"low":735.22,"volume":3770,"dj":2,"dayma":737.0756962025,"delta累计":-2462.0} +{"price":["735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18"],"Ask":[0,26,34,76,0,11,2,46,73,49,50,44,54,28,57,40,31,21,0,25,48,81,7,15,48,26,24,18,76,17,9,123,73,83,31,100],"Bid":[23,14,42,44,13,7,0,115,27,80,44,44,30,26,106,77,74,30,36,27,89,8,0,0,31,34,51,91,0,12,58,53,78,12,3,0],"symbol":"au2506","datetime":"2025-04-01 22:30:00","delta":67.0,"close":735.62,"open":735.86,"high":736.18,"low":735.46,"volume":2990,"dj":0,"dayma":737.0575,"delta累计":-2395.0} +{"price":["735.04","735.08","735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62"],"Ask":[0,0,42,0,0,27,56,66,18,112,21,56,65,69,40,86,108,28,14,96,171,46,90,134,74,19,2,44,11],"Bid":[20,15,29,36,10,27,41,20,142,33,50,103,72,35,134,65,21,67,123,165,144,117,104,86,42,92,11,25,21],"symbol":"au2506","datetime":"2025-04-01 22:33:00","delta":-355.0,"close":735.3,"open":735.54,"high":735.62,"low":735.04,"volume":3679,"dj":0,"dayma":737.0358024691,"delta累计":-2750.0} +{"price":["735.06","735.08","735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7"],"Ask":[0,33,54,48,29,50,39,28,13,53,63,43,14,17,11,33,9,19,32,14,55,115,42,6,73,29,32,91,153,5,21,25,27],"Bid":[7,55,20,26,49,8,31,45,18,82,57,34,0,6,10,15,0,24,43,52,172,227,91,33,35,28,119,52,44,8,25,11,0],"symbol":"au2506","datetime":"2025-04-01 22:36:00","delta":-151.0,"close":735.42,"open":735.26,"high":735.7,"low":735.06,"volume":2937,"dj":0,"dayma":737.016097561,"delta累计":-2901.0} +{"price":["735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02"],"Ask":[0,6,34,38,9,23,3,49,43,21,64,9,59,81,79,72,63,43,107,143,12,0,29,85,28,17,47,95,73,23,29],"Bid":[26,9,46,24,27,32,21,66,19,36,40,37,37,138,118,88,31,14,56,27,15,20,0,8,0,7,46,137,73,8,27],"symbol":"au2506","datetime":"2025-04-01 22:39:00","delta":151.0,"close":735.94,"open":735.42,"high":736.02,"low":735.42,"volume":2931,"dj":2,"dayma":737.0031325301,"delta累计":-2750.0} +{"price":["735.66","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08"],"Ask":[0,0,21,38,23,27,53,21,10,25,46,69,52,103,119,146,214,89,87,59,31],"Bid":[6,53,8,32,10,24,0,40,2,10,35,103,98,191,121,90,88,77,19,11,14],"symbol":"au2506","datetime":"2025-04-01 22:42:00","delta":201.0,"close":736.0,"open":735.96,"high":736.08,"low":735.66,"volume":2445,"dj":0,"dayma":736.9911904762,"delta累计":-2549.0} +{"price":["735.62","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3"],"Ask":[0,13,1,0,0,0,9,26,40,0,13,0,0,38,4,21,24,68,30,43,44,45,41,107,27,36,49,23,83,45,70,64,156,32],"Bid":[24,20,13,7,15,19,81,11,41,3,0,24,14,68,66,21,74,137,21,97,28,77,13,80,71,42,30,77,81,59,105,147,45,0],"symbol":"au2506","datetime":"2025-04-01 22:45:00","delta":-459.0,"close":735.68,"open":736.0,"high":736.3,"low":735.62,"volume":3014,"dj":-2,"dayma":736.9757647059,"delta累计":-3008.0} +{"price":["735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04"],"Ask":[0,41,111,67,67,32,107,101,29,69,49,13,15,27,80,53,37,44,33,15,11,55,2,28,45,17],"Bid":[63,67,124,63,42,47,76,44,25,4,14,16,9,54,30,62,37,5,25,6,36,17,65,9,31,3],"symbol":"au2506","datetime":"2025-04-01 22:48:00","delta":174.0,"close":735.92,"open":735.66,"high":736.04,"low":735.54,"volume":2298,"dj":0,"dayma":736.9634883721,"delta累计":-2834.0} +{"price":["735.72","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.32","736.34","736.36","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58"],"Ask":[0,0,3,30,35,9,46,1,17,17,32,24,15,44,31,36,42,63,16,15,10,71,52,87,75,50,59,36,12,73,48,48,45,83,181,84,104,34,18],"Bid":[22,28,21,5,4,62,16,13,25,38,39,16,20,10,54,53,91,7,0,0,0,88,48,18,67,57,29,0,0,34,0,8,59,91,42,38,85,41,51],"symbol":"au2506","datetime":"2025-04-01 22:51:00","delta":366.0,"close":736.5,"open":735.94,"high":736.6,"low":735.72,"volume":3116,"dj":1,"dayma":736.9581609195,"delta累计":-2468.0} +{"price":["735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.4","736.42","736.44","736.46","736.48","736.5"],"Ask":[14,11,41,62,71,93,54,81,83,118,22,83,32,43,33,27,17,0,68,31,14,7,53,0,0,0,14],"Bid":[34,73,94,97,137,128,93,78,30,70,141,28,99,0,42,39,25,22,27,15,24,54,8,5,5,9,0],"symbol":"au2506","datetime":"2025-04-01 22:54:00","delta":-305.0,"close":736.04,"open":736.5,"high":736.5,"low":735.96,"volume":2710,"dj":-1,"dayma":736.9477272727,"delta累计":-2773.0} +{"price":["735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.12","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48"],"Ask":[0,21,24,33,30,5,48,34,48,39,19,23,0,23,14,17,88,64,176,184,132,46,76,27,108,43,80,50],"Bid":[6,5,0,39,69,200,43,158,51,0,0,3,33,31,23,20,77,108,219,136,79,103,29,48,13,0,0,0],"symbol":"au2506","datetime":"2025-04-01 22:57:00","delta":-41.0,"close":736.3,"open":736.06,"high":736.48,"low":735.9,"volume":3178,"dj":2,"dayma":736.9404494382,"delta累计":-2814.0} +{"price":["736.28","736.3","736.32","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7"],"Ask":[0,0,7,49,23,99,46,54,92,107,180,133,168,96,140,105,98,30,28,64,33],"Bid":[8,3,16,16,69,12,35,57,255,128,152,83,114,75,48,15,51,26,13,7,50],"symbol":"au2506","datetime":"2025-04-01 23:00:00","delta":319.0,"close":736.46,"open":736.3,"high":736.7,"low":736.28,"volume":2993,"dj":0,"dayma":736.9351111111,"delta累计":-2495.0} +{"price":["736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66"],"Ask":[2,41,31,2,17,72,9,14,13,13,52,38,73,57,31,33,98,46,30,32],"Bid":[63,51,19,8,30,37,6,5,17,57,28,29,49,51,70,39,82,27,0,0],"symbol":"au2506","datetime":"2025-04-01 23:03:00","delta":36.0,"close":736.5,"open":736.48,"high":736.66,"low":736.28,"volume":1470,"dj":0,"dayma":736.9303296703,"delta累计":-2459.0} +{"price":["736.5","736.52","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94"],"Ask":[5,1,7,106,3,44,22,10,19,11,7,9,21,55,119,120,139,258,102,128,55,27],"Bid":[1,7,6,0,4,9,9,0,0,26,9,21,32,128,93,123,130,127,111,58,0,0],"symbol":"au2506","datetime":"2025-04-01 23:06:00","delta":374.0,"close":736.94,"open":736.5,"high":736.94,"low":736.5,"volume":2291,"dj":1,"dayma":736.9304347826,"delta累计":-2085.0} +{"price":["736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14"],"Ask":[0,6,0,16,57,28,71,43,43,101,100,48,47,99,123,41,58],"Bid":[7,20,53,19,82,76,71,193,23,142,38,39,93,69,96,13,3],"symbol":"au2506","datetime":"2025-04-01 23:09:00","delta":-156.0,"close":736.92,"open":736.96,"high":737.14,"low":736.82,"volume":2028,"dj":0,"dayma":736.9303225806,"delta累计":-2241.0} +{"price":["736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96"],"Ask":[0,31,142,47,36,23,38,60,59,119,3,24,0,0,0,11,29,106,35,11,14,2,13,3,10],"Bid":[34,63,99,116,77,49,39,162,41,43,63,21,12,12,74,14,93,23,41,34,12,15,17,0,11],"symbol":"au2506","datetime":"2025-04-01 23:12:00","delta":-349.0,"close":736.52,"open":736.9,"high":736.96,"low":736.48,"volume":2131,"dj":-2,"dayma":736.9259574468,"delta累计":-2590.0} +{"price":["736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88"],"Ask":[0,0,4,44,23,51,2,4,9,10,26,34,71,68,33,26,9,44,43,75,17,8,7,17],"Bid":[33,4,6,13,39,20,5,22,0,18,12,60,30,42,15,20,34,21,52,51,4,39,9,0],"symbol":"au2506","datetime":"2025-04-01 23:15:00","delta":76.0,"close":736.72,"open":736.5,"high":736.88,"low":736.42,"volume":1240,"dj":0,"dayma":736.9237894737,"delta累计":-2514.0} +{"price":["736.12","736.14","736.16","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.46","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86"],"Ask":[0,17,0,0,30,24,61,59,3,8,30,35,55,0,6,0,0,0,14,20,15,49,70,46,36,51,4,9,9,7,4,25,6],"Bid":[13,44,23,29,62,67,31,42,80,32,51,52,10,34,0,40,2,2,1,59,58,47,25,67,63,38,18,0,0,0,13,4,0],"symbol":"au2506","datetime":"2025-04-01 23:18:00","delta":-314.0,"close":736.22,"open":736.74,"high":736.86,"low":736.12,"volume":1831,"dj":1,"dayma":736.9164583333,"delta累计":-2828.0} +{"price":["735.92","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42"],"Ask":[47,25,0,65,74,12,17,13,3,58,119,49,78,9,16,9,18,21,59,37,52,25,31,13,10],"Bid":[43,18,66,47,77,3,49,45,55,57,66,36,44,29,26,17,19,52,44,60,16,34,43,6,9],"symbol":"au2506","datetime":"2025-04-01 23:21:00","delta":-101.0,"close":736.06,"open":736.24,"high":736.42,"low":735.92,"volume":2015,"dj":0,"dayma":736.907628866,"delta累计":-2929.0} +{"price":["736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4"],"Ask":[0,0,0,26,9,3,38,44,65,53,50,78,24,46,42,43,40,64,16,13,17],"Bid":[28,42,4,32,3,64,25,47,20,126,32,25,39,20,35,16,48,13,7,10,17],"symbol":"au2506","datetime":"2025-04-01 23:24:00","delta":18.0,"close":736.28,"open":736.06,"high":736.4,"low":736.0,"volume":1414,"dj":0,"dayma":736.9012244898,"delta累计":-2911.0} +{"price":["735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.1","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32"],"Ask":[16,0,0,13,70,70,8,40,137,66,23,42,29,46,29,50,0,0,0,15,6,40,28,22,22,12,7],"Bid":[7,13,4,48,78,34,43,66,126,65,69,55,17,79,21,17,37,6,1,19,18,26,28,17,8,17,8],"symbol":"au2506","datetime":"2025-04-01 23:27:00","delta":-136.0,"close":735.8,"open":736.3,"high":736.32,"low":735.74,"volume":1919,"dj":-1,"dayma":736.8901010101,"delta累计":-3047.0} +{"price":["735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96"],"Ask":[3,48,20,58,43,60,46,97,64,47,51,10,16],"Bid":[10,54,54,44,92,131,99,34,93,43,55,9,0],"symbol":"au2506","datetime":"2025-04-01 23:30:00","delta":-155.0,"close":735.86,"open":735.78,"high":735.96,"low":735.72,"volume":1356,"dj":0,"dayma":736.8798,"delta累计":-3202.0} +{"price":["735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04"],"Ask":[0,47,19,39,10,43,23,61,36,41,41,20,17,46,19,33,19,16,39,73,52,65,36,0,20],"Bid":[6,4,53,33,9,53,58,57,57,29,47,0,50,13,63,12,36,35,52,44,36,0,26,6,0],"symbol":"au2506","datetime":"2025-04-01 23:33:00","delta":36.0,"close":736.02,"open":735.84,"high":736.04,"low":735.56,"volume":1704,"dj":0,"dayma":736.8712871287,"delta累计":-3166.0} +{"price":["735.72","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04"],"Ask":[0,9,26,14,3,12,20,63,54,52,32,33,40,87,20,33],"Bid":[2,13,0,2,16,12,4,99,57,66,20,49,46,52,15,4],"symbol":"au2506","datetime":"2025-04-01 23:36:00","delta":41.0,"close":736.0,"open":736.04,"high":736.04,"low":735.72,"volume":1031,"dj":0,"dayma":736.862745098,"delta累计":-3125.0} +{"price":["735.6","735.62","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04"],"Ask":[0,0,22,15,0,16,6,4,12,36,13,12,18,15,14,33,58,37,30,19,5,2],"Bid":[43,5,0,0,37,0,7,17,15,35,36,32,45,6,23,92,37,17,24,0,4,0],"symbol":"au2506","datetime":"2025-04-01 23:39:00","delta":-108.0,"close":735.74,"open":736.0,"high":736.04,"low":735.6,"volume":908,"dj":0,"dayma":736.8518446602,"delta累计":-3233.0} +{"price":["735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74"],"Ask":[0,19,16,9,20,0,66,70,118,71,68,10,76,49,32,42,25],"Bid":[12,132,9,20,100,42,53,90,79,123,44,64,60,42,29,5,13],"symbol":"au2506","datetime":"2025-04-01 23:42:00","delta":-226.0,"close":735.42,"open":735.7,"high":735.74,"low":735.42,"volume":1784,"dj":0,"dayma":736.8380769231,"delta累计":-3459.0} +{"price":["734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82","734.84","734.86","734.88","734.9","734.92","734.94","734.96","734.98","735.0","735.02","735.04","735.06","735.08","735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.26","735.28","735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5"],"Ask":[0,0,132,141,73,16,233,92,5,18,35,39,52,12,10,19,37,119,66,0,148,113,121,64,35,69,129,18,0,16,26,0,0,16,0,0,0,0,0,0,0,0,0,8,30,31,6,56],"Bid":[66,124,91,95,80,78,0,32,68,31,0,148,11,0,0,33,72,68,246,57,107,182,72,290,0,38,90,48,52,0,61,36,10,38,56,12,5,11,3,22,6,20,32,36,34,18,31,15],"symbol":"au2506","datetime":"2025-04-01 23:45:00","delta":-640.0,"close":734.94,"open":735.42,"high":735.5,"low":734.52,"volume":5014,"dj":-9,"dayma":736.82,"delta累计":-4099.0} +{"price":["734.8","734.82","734.84","734.86","734.88","734.9","734.92","734.94","734.96","734.98","735.0","735.02","735.04","735.06","735.08","735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.36"],"Ask":[19,12,31,10,136,46,28,39,15,17,88,74,147,48,57,45,25,64,53,20,100,35,75,46,22,39,14,16,10],"Bid":[4,10,72,27,12,66,10,7,16,43,110,154,77,62,51,16,24,96,50,42,104,53,34,108,33,49,0,39,0],"symbol":"au2506","datetime":"2025-04-01 23:48:00","delta":-38.0,"close":735.22,"open":734.92,"high":735.36,"low":734.8,"volume":3068,"dj":0,"dayma":736.8049056604,"delta累计":-4137.0} +{"price":["734.54","734.56","734.58","734.6","734.62","734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82","734.84","734.86","734.88","734.9","734.92","734.94","734.96","734.98","735.0","735.02","735.04","735.06","735.08","735.1","735.12","735.16","735.18","735.22"],"Ask":[0,0,25,16,23,7,0,0,0,0,48,74,43,31,17,35,6,16,24,60,54,43,23,54,61,58,34,20,6,0,2],"Bid":[8,46,0,53,19,0,34,49,6,8,15,80,40,45,41,14,44,46,26,73,44,75,36,65,64,52,7,29,0,15,9],"symbol":"au2506","datetime":"2025-04-01 23:51:00","delta":-263.0,"close":734.68,"open":735.22,"high":735.22,"low":734.54,"volume":1964,"dj":-1,"dayma":736.785046729,"delta累计":-4400.0} +{"price":["733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.1","734.12","734.16","734.22","734.24","734.26","734.28","734.32","734.36","734.42","734.44","734.46","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82","734.84","734.86","734.88"],"Ask":[60,65,18,134,68,79,39,164,42,10,3,111,39,47,32,44,0,0,93,0,0,68,7,63,25,56,0,0,19,0,0,121,10,11,84,22,47,4,16,48,36,36,33,79,130,58,13,10,10,1],"Bid":[43,90,90,176,45,26,103,126,13,0,27,147,186,62,38,63,102,49,23,126,31,0,92,0,6,78,71,22,0,10,185,29,0,32,56,0,9,36,6,90,43,36,56,75,32,24,0,0,8,0],"symbol":"au2506","datetime":"2025-04-01 23:54:00","delta":-507.0,"close":733.78,"open":734.64,"high":734.88,"low":733.7,"volume":5292,"dj":0,"dayma":736.7572222222,"delta累计":-4907.0} +{"price":["733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26"],"Ask":[0,0,90,21,14,40,23,28,0,45,69,66,58,125,210,31,78,138,119,40,48,62,63,16,43,71,66,5],"Bid":[24,27,67,68,10,0,46,7,76,12,60,81,6,113,104,51,157,159,142,86,69,30,70,23,34,5,8,0],"symbol":"au2506","datetime":"2025-04-01 23:57:00","delta":34.0,"close":734.0,"open":733.78,"high":734.26,"low":733.72,"volume":3406,"dj":0,"dayma":736.7319266055,"delta累计":-4873.0} +{"price":["733.08","733.1","733.14","733.16","733.2","733.22","733.24","733.26","733.28","733.3","733.32","733.34","733.38","733.4","733.42","733.44","733.46","733.48","733.5","733.52","733.54","733.56","733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","734.0"],"Ask":[0,38,29,55,16,0,0,5,5,80,6,0,0,52,55,47,35,0,0,14,104,127,84,69,42,121,71,24,56,68,68,19,16,36,27,66,23,35,36,98,0,12,10],"Bid":[11,120,82,49,15,10,10,74,108,13,0,7,153,83,8,65,0,46,68,39,225,64,67,59,20,80,59,94,27,78,135,16,76,47,31,75,36,102,8,6,9,10,0],"symbol":"au2506","datetime":"2025-04-02 00:00:00","delta":-636.0,"close":733.16,"open":734.0,"high":734.0,"low":733.08,"volume":4529,"dj":-1,"dayma":736.6994545455,"delta累计":-5509.0} +{"price":["732.76","732.8","732.82","732.84","732.86","732.88","732.9","732.92","732.94","732.96","732.98","733.0","733.02","733.04","733.06","733.08","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.24","733.26","733.28","733.3","733.32","733.34","733.38","733.42","733.44","733.46","733.48","733.5","733.52","733.54","733.56","733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.96"],"Ask":[0,85,150,7,0,104,9,52,13,11,12,98,135,126,25,103,49,204,81,81,110,66,113,74,10,157,92,31,48,25,19,4,29,0,0,43,110,35,78,12,5,0,23,8,23,84,94,51,20,13,10,11,82],"Bid":[33,43,7,0,58,19,47,140,10,8,42,300,76,66,67,14,186,215,176,27,11,48,41,24,92,94,52,0,41,31,66,0,4,19,32,33,63,34,36,6,7,23,34,2,68,37,52,73,45,71,21,8,0],"symbol":"au2506","datetime":"2025-04-02 00:03:00","delta":123.0,"close":733.64,"open":733.14,"high":733.96,"low":732.76,"volume":6245,"dj":-1,"dayma":736.6718918919,"delta累计":-5386.0} +{"price":["732.82","732.86","732.88","732.9","732.92","732.94","732.96","732.98","733.0","733.02","733.04","733.06","733.08","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.24","733.26","733.28","733.3","733.32","733.34","733.36","733.38","733.4","733.42","733.44","733.48","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.76"],"Ask":[0,24,67,23,79,42,88,138,148,31,78,22,28,28,0,14,29,55,37,68,81,138,156,101,33,50,56,13,4,30,19,7,0,0,0,4,0,23,6,13],"Bid":[11,0,42,93,39,22,27,102,88,13,44,40,7,23,13,3,31,19,3,87,141,65,156,64,49,61,46,42,7,25,25,21,15,6,8,14,17,8,0,0],"symbol":"au2506","datetime":"2025-04-02 00:06:00","delta":256.0,"close":733.34,"open":733.66,"high":733.76,"low":732.82,"volume":3561,"dj":-2,"dayma":736.6421428571,"delta累计":-5130.0} +{"price":["732.38","732.4","732.42","732.44","732.46","732.48","732.5","732.52","732.54","732.56","732.58","732.6","732.62","732.64","732.66","732.68","732.7","732.72","732.74","732.76","732.78","732.8","732.82","732.84","732.86","732.88","732.9","732.92","732.94","732.96","732.98","733.0","733.02","733.04","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.28","733.3","733.32","733.34","733.36","733.38"],"Ask":[0,0,31,35,41,73,94,41,69,53,129,58,111,62,57,26,111,27,30,31,52,67,121,33,12,76,79,70,37,45,83,0,30,9,0,7,0,23,5,29,0,4,7,14,7,11,3],"Bid":[18,116,5,120,33,72,160,36,86,125,128,57,172,76,3,42,56,42,56,65,86,72,61,63,102,66,98,104,15,7,0,6,19,12,11,29,20,1,9,35,35,17,31,4,6,3,0],"symbol":"au2506","datetime":"2025-04-02 00:09:00","delta":-477.0,"close":732.74,"open":733.34,"high":733.38,"low":732.38,"volume":5020,"dj":0,"dayma":736.6076106195,"delta累计":-5607.0} +{"price":["732.46","732.48","732.5","732.52","732.54","732.56","732.58","732.6","732.62","732.64","732.66","732.68","732.7","732.72","732.74","732.76","732.78","732.8","732.82","732.84","732.86","732.88","732.9","732.92","732.94","732.96"],"Ask":[0,24,70,12,36,60,54,47,51,97,76,84,91,151,58,30,21,78,83,48,87,9,9,7,0,10],"Bid":[78,49,11,60,43,84,38,65,69,49,100,65,92,105,79,126,46,30,36,63,68,31,0,10,10,0],"symbol":"au2506","datetime":"2025-04-02 00:12:00","delta":-114.0,"close":732.74,"open":732.8,"high":732.96,"low":732.46,"volume":2958,"dj":0,"dayma":736.5736842105,"delta累计":-5721.0} +{"price":["732.14","732.18","732.2","732.22","732.24","732.26","732.28","732.3","732.32","732.34","732.36","732.38","732.4","732.42","732.44","732.46","732.48","732.5","732.52","732.54","732.56","732.58","732.6","732.62","732.64","732.66","732.68"],"Ask":[0,17,67,42,27,91,14,172,135,32,50,40,11,20,18,52,84,38,104,30,55,90,27,120,31,29,23],"Bid":[12,26,124,67,79,36,66,116,49,2,27,48,16,24,79,30,138,90,79,79,74,45,73,75,32,3,17],"symbol":"au2506","datetime":"2025-04-02 00:15:00","delta":-87.0,"close":732.2,"open":732.68,"high":732.68,"low":732.14,"volume":3178,"dj":0,"dayma":736.5356521739,"delta累计":-5808.0} +{"price":["731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.86","731.88","731.9","731.92","731.96","731.98","732.02","732.04","732.06","732.08","732.12","732.14","732.16","732.18","732.2","732.22","732.24","732.26","732.28","732.3","732.32","732.34","732.36","732.38","732.4","732.42","732.44","732.46","732.48","732.5","732.52","732.54","732.56","732.58","732.6"],"Ask":[81,0,0,0,22,35,116,23,51,139,78,34,52,118,47,74,41,0,17,41,38,0,144,83,0,0,44,32,0,33,77,53,183,104,106,55,49,30,34,105,89,4,0,8,9,0,8,10,68,37,20],"Bid":[69,73,36,14,41,58,21,93,36,57,13,105,0,30,25,107,0,200,53,0,0,17,0,12,25,17,0,63,31,88,94,147,223,34,120,55,86,2,45,7,27,0,59,1,9,91,7,19,0,0,6],"symbol":"au2506","datetime":"2025-04-02 00:18:00","delta":76.0,"close":731.64,"open":732.2,"high":732.6,"low":731.5,"volume":5358,"dj":0,"dayma":736.4934482759,"delta累计":-5732.0} +{"price":["731.2","731.22","731.24","731.26","731.28","731.3","731.32","731.34","731.36","731.38","731.4","731.42","731.44","731.46","731.48","731.5","731.52","731.54","731.56","731.58","731.6","731.62","731.64","731.66","731.68","731.7","731.72","731.74","731.76","731.78","731.8","731.82","731.84","731.86","731.88","731.9","731.92","731.94","731.96","731.98","732.0","732.02","732.04","732.06","732.08","732.1","732.12","732.14","732.16","732.2","732.22","732.24","732.26","732.28","732.3","732.34","732.36","732.38","732.4","732.44"],"Ask":[0,0,0,159,94,0,29,52,22,11,150,46,44,38,69,134,17,0,72,27,53,34,10,13,19,26,38,58,68,163,88,34,87,105,114,25,49,9,18,7,24,0,127,0,43,42,16,46,17,24,31,51,0,48,32,19,6,0,16,13],"Bid":[36,46,65,0,50,77,37,59,35,131,80,34,44,126,106,52,0,43,0,49,0,0,53,36,25,24,110,46,198,79,29,67,116,87,68,22,7,0,9,0,72,56,5,20,26,0,28,10,27,0,0,33,10,0,7,16,5,6,0,0],"symbol":"au2506","datetime":"2025-04-02 00:21:00","delta":170.0,"close":732.44,"open":731.64,"high":732.44,"low":731.2,"volume":5444,"dj":0,"dayma":736.4588034188,"delta累计":-5562.0} +{"price":["732.32","732.34","732.36","732.38","732.4","732.42","732.44","732.46","732.48","732.5","732.52","732.54","732.56","732.58","732.6","732.62","732.64","732.66","732.68","732.7","732.72","732.74","732.76","732.78","732.8","732.82","732.84","732.86","732.88"],"Ask":[33,0,37,0,0,4,58,28,33,76,108,108,29,28,16,17,103,38,6,64,124,223,110,74,141,53,44,26,15],"Bid":[8,20,10,25,41,42,144,29,35,65,40,42,103,39,39,39,107,85,59,226,167,42,91,88,98,58,67,0,0],"symbol":"au2506","datetime":"2025-04-02 00:24:00","delta":-213.0,"close":732.48,"open":732.44,"high":732.88,"low":732.32,"volume":3805,"dj":-1,"dayma":736.4250847458,"delta累计":-5775.0} +{"price":["732.52","732.54","732.56","732.58","732.6","732.62","732.64","732.66","732.68","732.7","732.72","732.74","732.76","732.78","732.8","732.82","732.84","732.86","732.88","732.9","732.92","732.94","732.96"],"Ask":[9,2,7,16,11,24,94,22,39,99,172,57,61,146,75,74,56,38,78,126,20,51,41],"Bid":[0,7,13,19,16,6,48,81,48,82,96,92,89,73,84,83,52,61,42,104,26,0,0],"symbol":"au2506","datetime":"2025-04-02 00:27:00","delta":196.0,"close":732.96,"open":732.52,"high":732.96,"low":732.5,"volume":2580,"dj":0,"dayma":736.3959663866,"delta累计":-5579.0} +{"price":["732.9","732.92","732.94","732.96","732.98","733.0","733.02","733.04","733.06","733.08","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.24","733.26","733.28","733.3","733.32","733.34","733.36","733.38","733.4","733.42","733.44","733.46","733.48","733.5","733.52"],"Ask":[0,5,9,34,19,28,0,0,30,40,192,110,32,86,28,13,50,40,65,57,62,51,80,94,69,48,140,52,25,33,20,24],"Bid":[12,0,0,11,0,0,44,17,45,56,70,65,16,26,22,51,30,29,19,63,41,150,85,94,68,66,76,41,0,41,19,17],"symbol":"au2506","datetime":"2025-04-02 00:30:00","delta":262.0,"close":733.34,"open":732.96,"high":733.52,"low":732.9,"volume":3046,"dj":0,"dayma":736.3705,"delta累计":-5317.0} +{"price":["732.88","732.9","732.92","732.94","732.96","732.98","733.0","733.02","733.04","733.06","733.08","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.24","733.26","733.28","733.3","733.32","733.34","733.36","733.38","733.4","733.42","733.44","733.46","733.48","733.5","733.52"],"Ask":[8,27,55,57,13,18,19,19,92,29,26,44,18,46,21,24,41,56,63,22,19,81,2,16,85,73,49,13,0,17,0,0,19],"Bid":[0,27,29,37,0,52,54,78,154,87,35,74,57,38,27,53,57,53,49,64,56,9,32,7,93,34,66,18,15,18,26,5,9],"symbol":"au2506","datetime":"2025-04-02 00:33:00","delta":-341.0,"close":733.36,"open":733.3,"high":733.52,"low":732.88,"volume":2663,"dj":0,"dayma":736.3456198347,"delta累计":-5658.0} +{"price":["732.82","732.84","732.86","732.88","732.9","732.92","732.94","732.96","732.98","733.0","733.02","733.04","733.06","733.08","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.24","733.26","733.28","733.3","733.32","733.34","733.36","733.38","733.4","733.42"],"Ask":[73,29,86,49,56,16,27,53,26,51,95,27,62,96,24,24,8,24,65,0,3,0,0,8,20,12,5,15,64,81,64],"Bid":[41,28,20,54,20,29,14,31,37,149,20,10,43,44,28,34,23,22,18,7,5,18,11,26,37,18,31,11,16,32,0],"symbol":"au2506","datetime":"2025-04-02 00:36:00","delta":286.0,"close":733.14,"open":733.36,"high":733.42,"low":732.82,"volume":2278,"dj":0,"dayma":736.3193442623,"delta累计":-5372.0} +{"price":["733.08","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.26","733.28","733.3","733.32","733.34","733.36","733.38","733.4","733.44","733.48","733.5","733.52","733.54","733.56","733.6","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12"],"Ask":[0,0,4,3,47,0,44,4,7,16,25,0,59,26,27,17,6,24,36,19,175,41,21,8,7,109,24,41,174,162,57,13,4,9,0,6,32,90,16,29,24,103,71,49,30,82,36],"Bid":[7,9,7,19,11,3,0,17,39,70,75,2,42,16,0,46,5,43,34,52,0,0,0,0,0,29,44,117,194,132,16,22,0,14,52,65,41,55,56,49,18,57,96,112,62,7,0],"symbol":"au2506","datetime":"2025-04-02 00:39:00","delta":42.0,"close":733.94,"open":733.1,"high":734.12,"low":733.08,"volume":3811,"dj":4,"dayma":736.3,"delta累计":-5330.0} +{"price":["733.9","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26","734.28"],"Ask":[0,15,9,43,7,11,124,150,83,138,204,181,12,115,91,71,5,23],"Bid":[25,22,47,13,116,70,131,145,98,41,174,30,28,36,72,19,0,0],"symbol":"au2506","datetime":"2025-04-02 00:42:00","delta":215.0,"close":734.16,"open":733.98,"high":734.28,"low":733.9,"volume":2554,"dj":0,"dayma":736.2827419355,"delta累计":-5115.0} +{"price":["733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24"],"Ask":[0,39,65,48,0,6,62,35,43,34,14,45,5,99,35,18,49,0,0,9,0,7,11,16,12,49,37,23,35,21,22,28,0,8],"Bid":[15,31,59,6,70,78,87,47,33,29,67,63,37,90,54,63,29,7,47,0,30,54,40,6,59,70,28,12,26,10,9,14,23,12],"symbol":"au2506","datetime":"2025-04-02 00:45:00","delta":-430.0,"close":733.6,"open":734.18,"high":734.24,"low":733.58,"volume":2490,"dj":-1,"dayma":736.26128,"delta累计":-5545.0} +{"price":["733.54","733.56","733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98"],"Ask":[0,1,7,103,48,17,13,8,51,68,47,40,17,49,66,68,44,65,46,19,13,18,66],"Bid":[8,21,33,38,20,35,22,29,42,7,19,25,0,77,48,23,30,25,29,48,32,11,2],"symbol":"au2506","datetime":"2025-04-02 00:48:00","delta":250.0,"close":733.86,"open":733.6,"high":733.98,"low":733.54,"volume":1623,"dj":0,"dayma":736.2422222222,"delta累计":-5295.0} +{"price":["733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22"],"Ask":[0,13,25,38,54,31,36,18,6,10,17,97,68,91,49,20,81,15],"Bid":[17,8,25,36,19,12,32,4,0,126,52,45,38,96,31,24,27,3],"symbol":"au2506","datetime":"2025-04-02 00:51:00","delta":74.0,"close":734.1,"open":733.9,"high":734.22,"low":733.88,"volume":1343,"dj":0,"dayma":736.2253543307,"delta累计":-5221.0} +{"price":["733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24"],"Ask":[0,1,7,14,15,15,47,19,33,38,27,56,62,25,42,24,19,48,23,11],"Bid":[13,28,28,17,61,10,49,127,29,21,113,45,14,39,21,5,12,56,19,0],"symbol":"au2506","datetime":"2025-04-02 00:54:00","delta":-181.0,"close":734.18,"open":734.12,"high":734.24,"low":733.86,"volume":1366,"dj":0,"dayma":736.209375,"delta累计":-5402.0} +{"price":["733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22"],"Ask":[0,0,16,27,48,25,12,77,96,0,11,8,9,40,21,0,25,9,24,6],"Bid":[1,13,68,4,31,52,32,79,21,20,50,19,20,6,11,8,11,15,20,0],"symbol":"au2506","datetime":"2025-04-02 00:57:00","delta":-27.0,"close":733.88,"open":734.2,"high":734.22,"low":733.84,"volume":1023,"dj":0,"dayma":736.1913178295,"delta累计":-5429.0} +{"price":["733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86"],"Ask":[0,0,28,82,23,28,46,82,35,22,71,21,24,22,0],"Bid":[6,69,48,28,47,81,123,55,47,31,55,29,32,10,8],"symbol":"au2506","datetime":"2025-04-02 01:00:00","delta":-185.0,"close":733.7,"open":733.86,"high":733.88,"low":733.58,"volume":1237,"dj":0,"dayma":736.1721538462,"delta累计":-5614.0} +{"price":["733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98"],"Ask":[0,25,3,37,21,32,12,11,32,4,34,55,46,71,28,25,25],"Bid":[15,24,28,32,37,25,8,6,15,7,6,64,58,51,58,0,21],"symbol":"au2506","datetime":"2025-04-02 01:03:00","delta":6.0,"close":733.88,"open":733.66,"high":733.98,"low":733.66,"volume":1010,"dj":0,"dayma":736.1546564885,"delta累计":-5608.0} +{"price":["733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.92"],"Ask":[0,24,34,41,68,23,45,12,9,10,8,1],"Bid":[25,19,52,18,34,16,32,34,6,13,1,0],"symbol":"au2506","datetime":"2025-04-02 01:06:00","delta":25.0,"close":733.72,"open":733.88,"high":733.92,"low":733.68,"volume":568,"dj":0,"dayma":736.1362121212,"delta累计":-5583.0} +{"price":["733.36","733.38","733.4","733.42","733.44","733.46","733.48","733.5","733.52","733.54","733.56","733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94"],"Ask":[0,2,12,29,21,7,8,12,23,11,5,14,12,27,21,19,18,8,9,26,6,24,22,53,6,5,7,37,19,18],"Bid":[27,29,38,38,3,21,21,33,13,14,20,33,16,18,0,14,9,9,9,18,49,60,24,13,28,28,16,10,0,0],"symbol":"au2506","datetime":"2025-04-02 01:09:00","delta":-130.0,"close":733.68,"open":733.72,"high":733.94,"low":733.36,"volume":1207,"dj":0,"dayma":736.1177443609,"delta累计":-5713.0} +{"price":["733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92"],"Ask":[0,0,15,42,11,29,54,37,21,11,27,36,15,3,25,16,23],"Bid":[5,24,23,17,9,54,27,32,23,6,34,46,13,0,28,7,0],"symbol":"au2506","datetime":"2025-04-02 01:12:00","delta":17.0,"close":733.88,"open":733.66,"high":733.92,"low":733.6,"volume":797,"dj":0,"dayma":736.1010447761,"delta累计":-5696.0} +{"price":["733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.04"],"Ask":[0,13,20,11,39,20,2,46,29,29,50,42,23,10,3,4,56,47],"Bid":[10,0,20,4,23,13,12,32,31,31,22,14,0,9,15,6,10,0],"symbol":"au2506","datetime":"2025-04-02 01:15:00","delta":192.0,"close":733.98,"open":733.86,"high":734.04,"low":733.68,"volume":740,"dj":0,"dayma":736.0853333333,"delta累计":-5504.0} +{"price":["733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22"],"Ask":[0,0,9,24,48,20,47,30,32,69,40,17,33,11,46,32,29],"Bid":[3,1,89,32,30,24,14,36,30,55,22,7,6,19,26,29,5],"symbol":"au2506","datetime":"2025-04-02 01:18:00","delta":59.0,"close":734.16,"open":734.0,"high":734.22,"low":733.9,"volume":1012,"dj":0,"dayma":736.0711764706,"delta累计":-5445.0} +{"price":["734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26","734.28","734.3","734.32","734.36","734.38","734.4","734.42","734.44","734.46","734.48"],"Ask":[0,3,6,6,15,5,27,24,32,52,66,43,51,54,80,11,14,20,19,52,22,31],"Bid":[14,17,18,18,15,40,14,23,85,37,74,21,62,36,0,11,0,7,43,13,12,0],"symbol":"au2506","datetime":"2025-04-02 01:21:00","delta":73.0,"close":734.48,"open":734.16,"high":734.48,"low":734.04,"volume":1277,"dj":0,"dayma":736.0595620438,"delta累计":-5372.0} +{"price":["734.34","734.36","734.38","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58"],"Ask":[5,5,2,17,11,34,44,67,80,84,59,14,28],"Bid":[13,3,0,20,47,62,122,49,62,33,46,10,0],"symbol":"au2506","datetime":"2025-04-02 01:24:00","delta":-17.0,"close":734.48,"open":734.48,"high":734.58,"low":734.34,"volume":986,"dj":0,"dayma":736.048115942,"delta累计":-5389.0} +{"price":["734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74","734.76"],"Ask":[0,22,12,60,27,33,39,43,84,16,14,58,15,72,25,9,4],"Bid":[14,21,57,65,30,21,41,43,20,23,19,22,49,29,44,10,0],"symbol":"au2506","datetime":"2025-04-02 01:27:00","delta":25.0,"close":734.68,"open":734.5,"high":734.76,"low":734.44,"volume":1150,"dj":0,"dayma":736.0382733813,"delta累计":-5364.0} +{"price":["734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82","734.84"],"Ask":[0,19,17,22,23,36,34,42,85,78,44,21,9,69],"Bid":[7,3,31,10,42,41,69,67,75,39,53,25,5,6],"symbol":"au2506","datetime":"2025-04-02 01:30:00","delta":26.0,"close":734.76,"open":734.72,"high":734.84,"low":734.58,"volume":1067,"dj":0,"dayma":736.0291428571,"delta累计":-5338.0} +{"price":["734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82"],"Ask":[0,7,1,14,9,5,11,14,46,41,30,9,3,25,12,12,22,59,15,8],"Bid":[20,9,4,22,44,39,56,30,38,31,13,27,1,60,36,38,37,34,4,0],"symbol":"au2506","datetime":"2025-04-02 01:33:00","delta":-200.0,"close":734.54,"open":734.74,"high":734.82,"low":734.44,"volume":957,"dj":-1,"dayma":736.0185815603,"delta累计":-5538.0} +{"price":["734.36","734.38","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56"],"Ask":[0,15,20,41,33,48,38,63,32,25,13],"Bid":[1,44,58,63,58,42,16,49,19,12,0],"symbol":"au2506","datetime":"2025-04-02 01:36:00","delta":-34.0,"close":734.4,"open":734.52,"high":734.56,"low":734.36,"volume":742,"dj":0,"dayma":736.0071830986,"delta累计":-5572.0} +{"price":["734.32","734.34","734.36","734.38","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.64"],"Ask":[0,5,25,4,7,37,17,53,52,65,31,20,15,6,0,7],"Bid":[3,23,8,5,24,24,30,32,40,32,19,13,0,0,9,0],"symbol":"au2506","datetime":"2025-04-02 01:39:00","delta":82.0,"close":734.6,"open":734.44,"high":734.64,"low":734.32,"volume":702,"dj":0,"dayma":735.9973426573,"delta累计":-5490.0} +{"price":["734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68"],"Ask":[0,32,94,2,14,35,1,2,20,16,29,25,13,2,7],"Bid":[68,32,4,17,13,18,5,11,52,28,33,37,12,0,0],"symbol":"au2506","datetime":"2025-04-02 01:42:00","delta":-38.0,"close":734.48,"open":734.62,"high":734.68,"low":734.4,"volume":671,"dj":0,"dayma":735.9868055556,"delta累计":-5528.0} +{"price":["734.38","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56"],"Ask":[0,6,21,10,12,16,38,62,13,14],"Bid":[3,21,6,12,11,14,33,15,18,2],"symbol":"au2506","datetime":"2025-04-02 01:45:00","delta":57.0,"close":734.52,"open":734.48,"high":734.56,"low":734.38,"volume":337,"dj":0,"dayma":735.9766896552,"delta累计":-5471.0} +{"price":["734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82","734.84"],"Ask":[0,22,14,67,36,2,16,7,10,6,14,23,2,5,0,25,38,13,41,18,7],"Bid":[17,19,20,8,12,4,5,2,0,10,2,0,2,3,11,40,8,21,18,1,0],"symbol":"au2506","datetime":"2025-04-02 01:48:00","delta":163.0,"close":734.82,"open":734.52,"high":734.84,"low":734.44,"volume":616,"dj":0,"dayma":735.9687671233,"delta累计":-5308.0} +{"price":["734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82"],"Ask":[0,31,27,22,26,14,20,18],"Bid":[23,51,35,27,24,11,26,0],"symbol":"au2506","datetime":"2025-04-02 01:51:00","delta":-39.0,"close":734.78,"open":734.82,"high":734.82,"low":734.68,"volume":388,"dj":0,"dayma":735.9606802721,"delta累计":-5347.0} +{"price":["734.7","734.72","734.74","734.76","734.78","734.8"],"Ask":[3,43,59,20,45,12],"Bid":[50,19,40,25,2,0],"symbol":"au2506","datetime":"2025-04-02 01:54:00","delta":46.0,"close":734.8,"open":734.78,"high":734.8,"low":734.7,"volume":352,"dj":0,"dayma":735.9528378378,"delta累计":-5301.0} +{"price":["734.72","734.74","734.76","734.78","734.8","734.82"],"Ask":[1,56,20,18,48,18],"Bid":[25,26,24,15,24,8],"symbol":"au2506","datetime":"2025-04-02 01:57:00","delta":39.0,"close":734.76,"open":734.78,"high":734.82,"low":734.72,"volume":299,"dj":0,"dayma":735.9448322148,"delta累计":-5262.0} +{"price":["734.7","734.72","734.74","734.76","734.78","734.8","734.82","734.84","734.86","734.88","734.9","734.92","734.94","734.96","734.98","735.0","735.04","735.06"],"Ask":[10,3,18,21,39,30,30,15,11,11,4,3,31,51,13,5,72,26],"Bid":[24,21,33,32,28,9,3,0,0,28,14,9,73,24,0,0,0,0],"symbol":"au2506","datetime":"2025-04-02 02:00:00","delta":95.0,"close":735.06,"open":734.76,"high":735.06,"low":734.7,"volume":773,"dj":3,"dayma":735.9389333333,"delta累计":-5167.0} +{"price":["734.98","735.0","735.02","735.04","735.06","735.08","735.1","735.12","735.14","735.16","735.18","735.2","735.22","735.24","735.26","735.28","735.3","735.32","735.34","735.36","735.38","735.4","735.42","735.44","735.46","735.48","735.5","735.52","735.54","735.56","735.58","735.6","735.62","735.64","735.66","735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.06","736.1","736.12","736.16","736.18","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4"],"Ask":[5,4,14,1,68,45,41,12,21,27,45,3,15,3,2,1,0,6,0,20,28,7,0,25,51,26,41,14,21,31,9,35,62,3,16,9,1,0,0,21,8,0,13,94,82,31,39,62,28,4,131,5,6,0,11,8,14,5,38,8,12,35,2,3,0,22,11],"Bid":[15,57,9,12,0,0,7,8,49,22,0,0,41,41,0,0,7,10,33,7,11,78,3,35,45,83,0,34,51,70,21,49,62,5,5,0,0,2,10,33,29,38,131,32,36,20,0,0,2,0,4,3,0,23,0,0,12,27,20,19,0,7,0,72,15,11,0],"symbol":"au2506","datetime":"2025-04-02 02:03:00","delta":-11.0,"close":736.38,"open":735.06,"high":736.4,"low":734.98,"volume":2972,"dj":0,"dayma":735.9418543046,"delta累计":-5178.0} +{"price":["736.08","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44"],"Ask":[0,15,69,59,36,45,53,2,2,8,18,93,37,52,27,28,48,20],"Bid":[18,38,16,88,42,61,19,11,7,30,114,128,21,88,32,58,7,0],"symbol":"au2506","datetime":"2025-04-02 02:06:00","delta":-166.0,"close":736.16,"open":736.38,"high":736.44,"low":736.08,"volume":1469,"dj":0,"dayma":735.9432894737,"delta累计":-5344.0} +{"price":["736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48"],"Ask":[0,0,21,6,9,3,0,6,11,68,38,17,29,13,22,0,22,13,14],"Bid":[4,40,7,0,5,19,17,64,31,48,80,28,11,16,10,74,16,0,0],"symbol":"au2506","datetime":"2025-04-02 02:09:00","delta":-178.0,"close":736.32,"open":736.16,"high":736.48,"low":736.12,"volume":870,"dj":0,"dayma":735.945751634,"delta累计":-5522.0} +{"price":["736.22","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52"],"Ask":[0,13,9,23,2,25,33,21,29,20,28,55,33,44,9],"Bid":[16,33,10,17,24,42,38,11,25,64,40,84,23,5,0],"symbol":"au2506","datetime":"2025-04-02 02:12:00","delta":-88.0,"close":736.26,"open":736.3,"high":736.52,"low":736.22,"volume":827,"dj":0,"dayma":735.9477922078,"delta累计":-5610.0} +{"price":["736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48"],"Ask":[10,1,6,17,22,28,23,23,6,14,12,13],"Bid":[21,0,1,40,48,21,20,7,10,7,0,0],"symbol":"au2506","datetime":"2025-04-02 02:15:00","delta":0.0,"close":736.42,"open":736.26,"high":736.48,"low":736.26,"volume":385,"dj":0,"dayma":735.9508387097,"delta累计":-5610.0} +{"price":["735.68","735.7","735.72","735.74","735.76","735.78","735.8","735.82","735.84","735.86","735.88","735.92","735.94","735.96","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46"],"Ask":[14,41,1,8,17,11,3,33,25,0,0,0,0,0,0,45,14,10,23,3,0,0,0,0,9,4,18,8,23,1,0,26,27,6,5,1],"Bid":[44,3,4,2,24,1,2,13,6,5,16,8,13,13,52,12,30,6,5,11,8,1,7,2,8,15,23,19,26,16,1,40,15,9,0,0],"symbol":"au2506","datetime":"2025-04-02 02:18:00","delta":-84.0,"close":735.82,"open":736.42,"high":736.46,"low":735.68,"volume":888,"dj":-6,"dayma":735.95,"delta累计":-5694.0} +{"price":["735.88","735.9","735.92","735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3"],"Ask":[16,4,2,5,6,22,29,1,1,11,7,6,29,28,4,17,10,20,31,19,26,24],"Bid":[0,0,7,6,1,5,0,17,5,20,0,8,12,10,2,3,15,34,44,5,31,0],"symbol":"au2506","datetime":"2025-04-02 02:21:00","delta":93.0,"close":736.3,"open":735.88,"high":736.3,"low":735.88,"volume":619,"dj":1,"dayma":735.9522292994,"delta累计":-5601.0} +{"price":["736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.16","736.18","736.2","736.24","736.26","736.28","736.32"],"Ask":[2,3,23,26,62,25,19,15,4,0,0,7,0,3],"Bid":[11,7,23,78,51,23,33,3,1,1,19,4,8,0],"symbol":"au2506","datetime":"2025-04-02 02:24:00","delta":-73.0,"close":736.1,"open":736.32,"high":736.32,"low":736.02,"volume":485,"dj":0,"dayma":735.953164557,"delta累计":-5674.0} +{"price":["735.94","735.96","735.98","736.0","736.02","736.04","736.06","736.08","736.1","736.12","736.14","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32"],"Ask":[0,4,5,12,34,19,17,2,34,8,5,7,27,31,7,11,15,59,6],"Bid":[7,14,15,21,18,3,18,6,10,16,2,7,10,4,3,9,34,26,2],"symbol":"au2506","datetime":"2025-04-02 02:27:00","delta":78.0,"close":736.28,"open":736.1,"high":736.32,"low":735.94,"volume":568,"dj":1,"dayma":735.9552201258,"delta累计":-5596.0} +{"price":["736.66"],"Ask":[0],"Bid":[169],"symbol":"au2506","datetime":"2025-04-02 09:00:00","delta":-169.0,"close":736.66,"open":736.66,"high":736.66,"low":736.66,"volume":169,"dj":0,"dayma":734.3090196078,"delta累计":-892.0} +{"price":["736.12","736.16","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.96","736.98","737.0","737.02","737.06","737.1","737.12","737.14","737.18"],"Ask":[0,40,35,23,49,0,0,75,17,44,47,88,53,89,68,99,100,181,74,149,81,2,12,40,41,74,0,21,20,31,0,44,60,19,162,131,119,0,77,104,0,49,46,36,70,96],"Bid":[25,28,0,0,10,3,9,0,144,59,15,140,69,64,205,97,210,139,12,64,0,21,0,74,0,44,53,24,27,0,129,8,97,64,13,222,40,52,34,31,60,0,80,41,0,0],"symbol":"au2506","datetime":"2025-04-02 09:03:00","delta":159.0,"close":736.44,"open":736.7,"high":737.18,"low":736.12,"volume":5720,"dj":0,"dayma":734.35,"delta累计":-733.0} +{"price":["736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24"],"Ask":[0,21,13,29,0,81,66,23,212,82,164,67,25,7,0,15,0,69,0,9,10,46,96,15,26,2,19,7,0,11,9,25,41,35,13,27,19,22,34,93,18,56,42,34,101,10,34],"Bid":[7,27,12,0,49,69,49,86,60,92,36,42,27,0,28,5,4,17,4,29,43,128,17,10,0,0,0,0,43,42,18,0,78,0,0,0,0,44,24,46,14,64,120,41,254,0,0],"symbol":"au2506","datetime":"2025-04-02 09:06:00","delta":99.0,"close":737.1,"open":736.4,"high":737.24,"low":736.3,"volume":3591,"dj":3,"dayma":734.4018867925,"delta累计":-634.0} +{"price":["737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52"],"Ask":[0,0,27,41,142,65,12,35,96,88,31,54,77,93,112,86,6,21,111,225,201,204,24,190,73,9],"Bid":[5,5,40,88,159,10,6,58,29,97,87,65,82,91,18,100,162,16,167,111,223,413,32,165,14,0],"symbol":"au2506","datetime":"2025-04-02 09:09:00","delta":-220.0,"close":737.44,"open":737.12,"high":737.52,"low":737.02,"volume":4778,"dj":0,"dayma":734.4581481481,"delta累计":-854.0} +{"price":["737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74"],"Ask":[0,0,5,136,49,17,40,209,31,72,111,233,307,189,26,14,19,112,105,176,102,31,115,51,39],"Bid":[49,4,303,136,68,11,80,158,172,112,85,73,157,122,105,38,124,231,74,32,7,43,61,4,0],"symbol":"au2506","datetime":"2025-04-02 09:12:00","delta":-60.0,"close":737.66,"open":737.46,"high":737.74,"low":737.26,"volume":4700,"dj":0,"dayma":734.5163636364,"delta累计":-914.0} +{"price":["737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.88","737.9","737.94"],"Ask":[0,0,10,0,9,85,180,35,27,6,11,0,12,24,56,57,90,142,214,254,72,89,26,61,163,35,13],"Bid":[39,34,0,38,40,80,31,43,39,32,0,33,0,57,135,167,153,155,73,262,227,84,42,88,75,11,0],"symbol":"au2506","datetime":"2025-04-02 09:15:00","delta":-267.0,"close":737.76,"open":737.66,"high":737.94,"low":737.4,"volume":4037,"dj":0,"dayma":734.5742857143,"delta累计":-1181.0} +{"price":["737.48","737.5","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.88","737.9"],"Ask":[0,0,7,47,286,123,8,54,63,59,129,58,108,45,39,179,53,77,120,158,37],"Bid":[26,55,89,160,83,94,33,80,56,16,135,115,107,78,42,135,37,45,28,39,6],"symbol":"au2506","datetime":"2025-04-02 09:18:00","delta":191.0,"close":737.74,"open":737.76,"high":737.9,"low":737.48,"volume":3284,"dj":0,"dayma":734.6298245614,"delta累计":-990.0} +{"price":["737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.88","737.9","737.92","737.94","737.96","737.98","738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.32","738.34","738.36"],"Ask":[0,27,20,29,8,26,14,51,50,50,24,53,58,111,31,107,0,7,0,31,30,6,29,76,258,69,20,15,0,21,67,6,16,23,6,106,30,24,0,54,89,218,76,4],"Bid":[3,64,69,22,15,27,66,33,30,103,46,76,88,24,66,0,28,0,24,98,23,43,3,24,0,54,0,0,12,0,77,0,10,21,10,30,37,62,68,136,108,15,12,7],"symbol":"au2506","datetime":"2025-04-02 09:21:00","delta":306.0,"close":738.22,"open":737.78,"high":738.36,"low":737.48,"volume":3894,"dj":1,"dayma":734.6917241379,"delta累计":-684.0} +{"price":["737.52","737.54","737.56","737.58","737.6","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.88","737.9","737.92","737.94","737.96","737.98","738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.18","738.2","738.22","738.24","738.26"],"Ask":[0,43,14,49,25,102,0,7,103,24,12,50,51,89,68,12,30,18,21,32,18,91,68,71,18,38,41,131,62,9,25,0,27,4,30,90],"Bid":[33,0,2,10,68,6,46,12,106,20,19,23,61,6,64,46,70,70,40,19,75,51,94,24,14,127,50,40,44,69,7,19,56,25,56,0],"symbol":"au2506","datetime":"2025-04-02 09:24:00","delta":1.0,"close":737.98,"open":738.24,"high":738.26,"low":737.52,"volume":3242,"dj":0,"dayma":734.7474576271,"delta累计":-683.0} +{"price":["737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.88","737.9","737.92","737.94","737.96","737.98","738.02","738.04","738.06","738.08","738.1","738.14","738.16"],"Ask":[0,0,17,20,31,39,51,91,80,28,28,25,130,22,3,21,18,14,7,27],"Bid":[11,47,16,26,17,73,180,32,46,23,13,10,56,0,20,12,2,30,0,0],"symbol":"au2506","datetime":"2025-04-02 09:27:00","delta":38.0,"close":738.06,"open":737.98,"high":738.16,"low":737.74,"volume":1363,"dj":0,"dayma":734.8026666667,"delta累计":-645.0} +{"price":["737.86","737.88","737.9","737.92","737.94","737.96","737.98","738.0","738.02","738.04","738.06","738.08"],"Ask":[6,87,117,28,39,85,150,250,64,127,69,2],"Bid":[0,26,105,42,31,158,189,108,52,20,22,0],"symbol":"au2506","datetime":"2025-04-02 09:30:00","delta":271.0,"close":737.96,"open":738.02,"high":738.08,"low":737.86,"volume":1875,"dj":0,"dayma":734.8544262295,"delta累计":-374.0} +{"price":["737.96","737.98","738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.22","738.24","738.26","738.28","738.3","738.34","738.38","738.4","738.42","738.44","738.46","738.48","738.5"],"Ask":[2,14,45,28,48,30,41,43,87,117,115,51,58,11,22,139,26,103,64,47,27,0,149,13,26,52],"Bid":[21,1,101,27,33,43,5,68,111,162,11,1,80,16,2,75,50,33,0,118,12,21,20,93,37,0],"symbol":"au2506","datetime":"2025-04-02 09:33:00","delta":217.0,"close":738.44,"open":737.96,"high":738.5,"low":737.96,"volume":2649,"dj":0,"dayma":734.9122580645,"delta累计":-157.0} +{"price":["737.82","737.84","737.86","737.88","737.9","737.92","737.94","737.96","737.98","738.0","738.02","738.04","738.06","738.08","738.1","738.12","738.14","738.16","738.18","738.2","738.24","738.28","738.3","738.32","738.34","738.36","738.38","738.4","738.44"],"Ask":[0,14,40,55,100,28,0,6,16,48,13,8,52,21,138,169,144,85,37,13,0,0,2,0,68,30,16,0,18],"Bid":[40,48,28,22,10,0,46,42,18,82,49,70,73,87,110,134,31,72,78,0,50,15,6,65,22,17,5,17,13],"symbol":"au2506","datetime":"2025-04-02 09:36:00","delta":-129.0,"close":737.82,"open":738.44,"high":738.44,"low":737.82,"volume":2587,"dj":-1,"dayma":734.9584126984,"delta累计":-286.0} +{"price":["737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8"],"Ask":[81,0,0,21,67,124,105,16,84,48,105,29,259,84,59,0,8,30,43,0,29,17,64,0,4,33,3,0,49,21,58,62,60,2,89],"Bid":[63,7,15,161,81,15,29,61,65,31,205,166,69,22,0,87,15,6,3,41,27,33,31,14,25,28,16,21,53,108,149,34,9,55,24],"symbol":"au2506","datetime":"2025-04-02 09:39:00","delta":-115.0,"close":737.22,"open":737.8,"high":737.8,"low":737.1,"volume":3611,"dj":0,"dayma":734.99375,"delta累计":-401.0} +{"price":["737.0","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46"],"Ask":[0,0,0,169,115,30,53,121,229,241,126,98,120,140,41,75,35,48,38,24,30,8,44],"Bid":[69,9,90,41,120,58,88,69,95,176,14,73,47,30,60,54,25,13,16,9,32,8,5],"symbol":"au2506","datetime":"2025-04-02 09:42:00","delta":584.0,"close":737.36,"open":737.2,"high":737.46,"low":737.0,"volume":3134,"dj":0,"dayma":735.0301538462,"delta累计":183.0} +{"price":["737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.58"],"Ask":[0,5,47,38,16,14,7,7,7,8,17,19,20,32,35,176,43,92,11,19,30,14,37],"Bid":[24,49,34,20,8,22,23,6,26,40,24,27,88,46,189,70,14,70,0,1,73,22,0],"symbol":"au2506","datetime":"2025-04-02 09:45:00","delta":-182.0,"close":737.2,"open":737.4,"high":737.58,"low":737.12,"volume":1767,"dj":0,"dayma":735.063030303,"delta累计":1.0} +{"price":["737.04","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.66","737.68","737.7","737.72"],"Ask":[0,6,14,23,1,0,6,36,41,12,5,39,21,22,0,13,34,29,39,22,24,67,75,15,13,55,44,42,49,19,75,19,25],"Bid":[27,10,33,40,12,2,6,40,19,20,18,12,0,0,4,1,18,20,40,23,30,17,49,21,40,23,49,12,0,28,8,25,0],"symbol":"au2506","datetime":"2025-04-02 09:48:00","delta":238.0,"close":737.7,"open":737.2,"high":737.72,"low":737.04,"volume":1624,"dj":0,"dayma":735.1023880597,"delta累计":239.0} +{"price":["737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86"],"Ask":[0,3,10,17,30,54,32,48,32,37,24,0,31,0,15,18,7,5,12],"Bid":[23,26,34,25,39,43,51,37,56,40,5,28,32,33,6,0,15,16,30],"symbol":"au2506","datetime":"2025-04-02 09:51:00","delta":-164.0,"close":737.58,"open":737.72,"high":737.86,"low":737.5,"volume":999,"dj":0,"dayma":735.1388235294,"delta累计":75.0} +{"price":["737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72"],"Ask":[0,14,3,41,152,25,4,36,7,15,0,14,18,20,108,10,8,41,26,22,20],"Bid":[13,12,31,17,100,40,94,30,1,10,55,1,27,26,48,12,17,27,35,12,7],"symbol":"au2506","datetime":"2025-04-02 09:54:00","delta":-31.0,"close":737.38,"open":737.56,"high":737.72,"low":737.32,"volume":1304,"dj":0,"dayma":735.1713043478,"delta累计":44.0} +{"price":["737.14","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66"],"Ask":[0,21,0,17,13,9,17,8,8,22,40,28,115,43,40,50,56,45,10,8,27,17,7,0,21,12],"Bid":[28,0,11,8,16,11,11,75,6,18,123,54,66,30,52,5,26,29,11,38,10,8,3,56,0,10],"symbol":"au2506","datetime":"2025-04-02 09:57:00","delta":-71.0,"close":737.48,"open":737.38,"high":737.66,"low":737.14,"volume":1521,"dj":0,"dayma":735.2042857143,"delta累计":-27.0} +{"price":["737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.72","737.74"],"Ask":[0,3,31,39,14,10,50,55,41,59,31,32,69,11,24],"Bid":[8,6,9,5,21,31,43,46,35,53,18,30,45,34,23],"symbol":"au2506","datetime":"2025-04-02 10:00:00","delta":62.0,"close":737.58,"open":737.48,"high":737.74,"low":737.46,"volume":981,"dj":0,"dayma":735.2377464789,"delta累计":35.0} +{"price":["737.26","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6"],"Ask":[0,43,5,18,91,40,88,40,72,152,28,65,17,1,2,20,6],"Bid":[25,75,0,16,27,142,205,35,48,22,68,34,24,4,11,4,14],"symbol":"au2506","datetime":"2025-04-02 10:03:00","delta":-66.0,"close":737.44,"open":737.56,"high":737.6,"low":737.26,"volume":1589,"dj":0,"dayma":735.2683333333,"delta累计":-31.0} +{"price":["737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62","737.64","737.66","737.68","737.7","737.74","737.76","737.78","737.8","737.84","737.88","737.9","737.92","737.94","737.96"],"Ask":[4,18,11,6,15,25,33,55,13,0,27,92,67,74,88,18,28,7,29,29,38,23,15,21,0,57,8],"Bid":[17,9,1,10,18,33,64,7,0,10,8,67,51,39,7,3,22,53,26,9,9,0,26,0,20,0,0],"symbol":"au2506","datetime":"2025-04-02 10:06:00","delta":292.0,"close":737.96,"open":737.46,"high":737.96,"low":737.38,"volume":1372,"dj":0,"dayma":735.3052054795,"delta累计":261.0} +{"price":["737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.56","737.58","737.6","737.64","737.66","737.68","737.7","737.72","737.74","737.76","737.78","737.8","737.82","737.84","737.86","737.88","737.9","737.92","737.94","737.98"],"Ask":[0,11,86,17,20,34,15,7,48,0,0,0,27,0,0,7,1,9,42,12,15,48,46,57,21,13,15,0,0,11],"Bid":[10,6,61,16,34,6,35,2,62,5,18,6,26,12,10,21,27,26,39,77,36,56,102,72,15,0,20,12,25,0],"symbol":"au2506","datetime":"2025-04-02 10:09:00","delta":-275.0,"close":737.46,"open":737.98,"high":737.98,"low":737.34,"volume":1487,"dj":-1,"dayma":735.3343243243,"delta累计":-14.0} +{"price":["737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56","737.58","737.6","737.62"],"Ask":[0,10,0,36,19,42,24,6,14,54,68,19,65,23,10],"Bid":[12,18,24,19,33,6,28,11,21,43,42,34,47,15,0],"symbol":"au2506","datetime":"2025-04-02 10:12:00","delta":37.0,"close":737.4,"open":737.44,"high":737.62,"low":737.34,"volume":812,"dj":0,"dayma":735.3618666667,"delta累计":23.0} +{"price":["737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5"],"Ask":[0,41,2,6,57,34,99,43,12,17,56],"Bid":[40,14,37,24,29,40,94,62,33,15,26],"symbol":"au2506","datetime":"2025-04-02 10:15:00","delta":-47.0,"close":737.42,"open":737.34,"high":737.5,"low":737.3,"volume":843,"dj":0,"dayma":735.3889473684,"delta累计":-24.0} +{"price":["737.42"],"Ask":[0],"Bid":[5],"symbol":"au2506","datetime":"2025-04-02 10:18:00","delta":-5.0,"close":737.42,"open":737.42,"high":737.42,"low":737.42,"volume":5,"dj":0,"dayma":735.4153246753,"delta累计":-29.0} +{"price":["736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.16","737.18","737.2","737.26","737.28","737.3","737.32","737.34","737.36","737.38","737.4","737.42","737.44","737.46","737.48","737.5","737.52","737.54","737.56"],"Ask":[0,39,13,39,0,22,72,137,19,18,33,195,89,120,39,11,17,20,4,5,0,0,3,0,7,21,0,7,4,19,13,34,38,30,0,0,9],"Bid":[6,22,18,0,13,69,142,86,42,20,30,72,136,48,41,45,46,19,21,28,23,7,0,27,3,15,6,5,16,2,28,30,6,36,3,31,0],"symbol":"au2506","datetime":"2025-04-02 10:33:00","delta":-65.0,"close":737.04,"open":737.44,"high":737.56,"low":736.78,"volume":2335,"dj":-3,"dayma":735.4361538462,"delta累计":-94.0} +{"price":["736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.2","737.22","737.24","737.26"],"Ask":[0,2,0,29,49,27,27,13,50,41,8,17,38,54,39,11,11,18,21],"Bid":[4,7,19,36,39,23,96,25,42,17,29,16,33,23,7,11,14,0,0],"symbol":"au2506","datetime":"2025-04-02 10:36:00","delta":14.0,"close":736.96,"open":737.02,"high":737.26,"low":736.88,"volume":998,"dj":0,"dayma":735.455443038,"delta累计":-80.0} +{"price":["736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16"],"Ask":[7,16,31,30,16,42,154,102,85,18,6,16],"Bid":[2,31,30,18,10,66,55,37,28,0,0,0],"symbol":"au2506","datetime":"2025-04-02 10:39:00","delta":246.0,"close":737.04,"open":736.98,"high":737.16,"low":736.94,"volume":892,"dj":0,"dayma":735.47525,"delta累计":166.0} +{"price":["736.44","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.06"],"Ask":[0,0,0,46,43,7,96,71,124,55,13,20,54,30,75,48,56,0,0,0,15,15,2,38,19,14,0,5],"Bid":[9,89,23,28,94,34,195,75,101,57,10,22,79,35,92,14,19,11,5,19,42,24,22,15,18,81,9,0],"symbol":"au2506","datetime":"2025-04-02 10:42:00","delta":-376.0,"close":736.44,"open":737.06,"high":737.06,"low":736.44,"volume":2146,"dj":-1,"dayma":735.4871604938,"delta累计":-210.0} +{"price":["736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9"],"Ask":[0,0,14,24,35,4,37,13,33,29,5,11,14,51,18,3,1,17,10,20,17,47,66,52,21],"Bid":[14,19,21,0,37,39,17,6,1,14,5,35,4,7,0,14,2,7,18,38,50,47,78,19,0],"symbol":"au2506","datetime":"2025-04-02 10:45:00","delta":50.0,"close":736.82,"open":736.44,"high":736.9,"low":736.42,"volume":1131,"dj":0,"dayma":735.5034146341,"delta累计":-160.0} +{"price":["736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16","737.18","737.2","737.22","737.24","737.26","737.28","737.3","737.34"],"Ask":[0,6,10,21,9,18,3,53,24,31,48,78,19,13,19,157,69,17,17,16,22,36,54,40,10,23,19,30,5],"Bid":[8,7,19,10,1,25,15,19,35,8,2,17,13,69,21,31,36,9,24,13,44,69,56,47,0,24,26,40,0],"symbol":"au2506","datetime":"2025-04-02 10:48:00","delta":179.0,"close":737.12,"open":736.8,"high":737.34,"low":736.76,"volume":1737,"dj":0,"dayma":735.5228915663,"delta累计":19.0} +{"price":["736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.08"],"Ask":[0,0,5,12,96,19,26,100,33,19,41,29,11,25,5,56,22,7,0],"Bid":[50,3,4,35,35,39,18,39,36,16,19,19,14,10,8,40,16,23,2],"symbol":"au2506","datetime":"2025-04-02 10:51:00","delta":80.0,"close":736.76,"open":737.08,"high":737.08,"low":736.7,"volume":988,"dj":0,"dayma":735.5376190476,"delta累计":99.0} +{"price":["736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86"],"Ask":[10,9,21,20,60,21,61,76,27,19,10,11,9],"Bid":[25,14,17,18,76,64,80,64,11,5,16,3,4],"symbol":"au2506","datetime":"2025-04-02 10:54:00","delta":-43.0,"close":736.86,"open":736.74,"high":736.86,"low":736.62,"volume":815,"dj":0,"dayma":735.5531764706,"delta累计":56.0} +{"price":["736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02"],"Ask":[0,11,7,6,19,57,23,31,9,24,14,18,44],"Bid":[5,0,17,39,36,37,23,9,70,25,14,81,10],"symbol":"au2506","datetime":"2025-04-02 10:57:00","delta":-103.0,"close":736.88,"open":736.86,"high":737.02,"low":736.78,"volume":709,"dj":0,"dayma":735.5686046512,"delta累计":-47.0} +{"price":["736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.86","736.88"],"Ask":[0,5,3,17,2,8,4,6,9,61,11,17,17,7,15,27,37,6,1,8],"Bid":[12,50,17,68,12,10,62,14,110,54,33,50,25,21,56,50,18,1,0,1],"symbol":"au2506","datetime":"2025-04-02 11:00:00","delta":-403.0,"close":736.48,"open":736.88,"high":736.88,"low":736.48,"volume":1015,"dj":0,"dayma":735.5790804598,"delta累计":-450.0} +{"price":["736.12","736.14","736.16","736.18","736.2","736.22","736.24","736.26","736.28","736.3","736.32","736.34","736.36","736.38","736.4","736.42","736.44","736.46","736.48","736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64"],"Ask":[0,9,24,13,56,0,39,20,13,26,45,42,40,44,40,0,17,17,51,79,16,29,89,205,78,27,0],"Bid":[21,30,31,118,33,28,0,44,22,72,40,1,87,29,42,64,43,34,86,53,28,59,4,50,5,12,3],"symbol":"au2506","datetime":"2025-04-02 11:03:00","delta":-20.0,"close":736.58,"open":736.5,"high":736.64,"low":736.12,"volume":2196,"dj":0,"dayma":735.5904545455,"delta累计":-470.0} +{"price":["736.5","736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76"],"Ask":[0,0,26,9,26,48,37,32,30,32,87,15,16,1],"Bid":[6,11,23,19,27,55,42,43,27,26,9,0,64,0],"symbol":"au2506","datetime":"2025-04-02 11:06:00","delta":7.0,"close":736.58,"open":736.56,"high":736.76,"low":736.5,"volume":772,"dj":0,"dayma":735.6015730337,"delta累计":-463.0} +{"price":["736.52","736.54","736.56","736.58","736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14","737.16"],"Ask":[0,0,11,29,26,5,14,2,7,24,6,12,7,5,7,16,24,11,11,8,14,67,23,87,66,26,6,50,5,31,34,8,2],"Bid":[3,16,4,166,13,0,5,0,1,16,4,4,3,0,30,17,1,0,0,5,42,68,30,20,15,17,16,13,22,21,49,6,0],"symbol":"au2506","datetime":"2025-04-02 11:09:00","delta":37.0,"close":737.0,"open":736.54,"high":737.16,"low":736.52,"volume":1341,"dj":1,"dayma":735.6171111111,"delta累计":-426.0} +{"price":["736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04","737.06","737.08","737.1","737.12","737.14"],"Ask":[13,15,37,29,22,3,35,49,14,27,36,1,21,24,26,0,2,11,19],"Bid":[50,52,55,20,15,9,57,16,95,41,20,64,15,45,35,2,3,0,4],"symbol":"au2506","datetime":"2025-04-02 11:12:00","delta":-214.0,"close":736.92,"open":737.02,"high":737.14,"low":736.78,"volume":1036,"dj":0,"dayma":735.6314285714,"delta累计":-640.0} +{"price":["736.88","736.9","736.92","736.94","736.96","736.98","737.0","737.02","737.04"],"Ask":[0,0,9,39,67,155,41,8,43],"Bid":[3,12,35,34,58,48,43,1,0],"symbol":"au2506","datetime":"2025-04-02 11:15:00","delta":128.0,"close":736.96,"open":736.96,"high":737.04,"low":736.88,"volume":615,"dj":0,"dayma":735.6458695652,"delta累计":-512.0} +{"price":["736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0"],"Ask":[0,9,9,36,62,67,21,25,6,10,6],"Bid":[17,54,43,30,41,16,12,10,20,27,0],"symbol":"au2506","datetime":"2025-04-02 11:18:00","delta":-19.0,"close":736.9,"open":736.98,"high":737.0,"low":736.8,"volume":542,"dj":0,"dayma":735.6593548387,"delta累计":-531.0} +{"price":["736.78","736.8","736.82","736.84","736.86","736.88","736.9","736.92","736.94","736.96","736.98","737.0"],"Ask":[0,9,13,33,31,35,23,43,30,18,16,38],"Bid":[18,14,46,53,64,38,28,9,3,23,5,0],"symbol":"au2506","datetime":"2025-04-02 11:21:00","delta":-12.0,"close":736.84,"open":736.9,"high":737.0,"low":736.78,"volume":635,"dj":0,"dayma":735.6719148936,"delta累计":-543.0} +{"price":["736.6","736.62","736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84","736.86"],"Ask":[3,7,15,66,27,31,25,0,5,6,5,8,7,2],"Bid":[23,73,13,94,17,48,8,12,28,18,27,11,7,0],"symbol":"au2506","datetime":"2025-04-02 11:24:00","delta":-172.0,"close":736.72,"open":736.82,"high":736.86,"low":736.6,"volume":660,"dj":-1,"dayma":735.6829473684,"delta累计":-715.0} +{"price":["736.64","736.66","736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82","736.84"],"Ask":[0,5,5,5,0,16,42,69,21,10,6],"Bid":[2,32,82,42,31,43,50,7,23,6,0],"symbol":"au2506","datetime":"2025-04-02 11:27:00","delta":-139.0,"close":736.76,"open":736.72,"high":736.84,"low":736.64,"volume":523,"dj":-1,"dayma":735.6941666667,"delta累计":-854.0} +{"price":["736.68","736.7","736.72","736.74","736.76","736.78","736.8","736.82"],"Ask":[0,13,74,153,24,49,57,26],"Bid":[19,130,146,76,31,28,19,0],"symbol":"au2506","datetime":"2025-04-02 11:30:00","delta":-53.0,"close":736.74,"open":736.76,"high":736.82,"low":736.68,"volume":891,"dj":0,"dayma":735.7049484536,"delta累计":-907.0} +{"price":["733.16","733.32","733.34","733.36","733.4","733.42","733.44","733.46","733.48","733.5","733.52","733.54","733.56","733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16"],"Ask":[0,89,56,154,19,59,81,140,77,27,83,201,51,75,69,61,63,219,111,484,295,138,211,44,87,39,0,0,76,17,108,93,56,62,385,51,514,155,146,55,123,91,101],"Bid":[49,126,0,80,37,0,105,56,0,170,49,212,24,21,80,0,305,213,183,166,0,59,57,0,729,0,169,93,43,91,33,45,256,177,238,141,90,34,56,68,133,91,0],"symbol":"au2506","datetime":"2025-04-02 13:33:00","delta":487.0,"close":733.76,"open":734.28,"high":734.28,"low":733.16,"volume":11344,"dj":0,"dayma":737.1121568627,"delta累计":401.0} +{"price":["732.48","732.52","732.56","732.58","732.6","732.62","732.64","732.66","732.68","732.7","732.72","732.74","732.78","732.82","732.86","732.88","732.9","732.92","732.94","732.96","732.98","733.0","733.02","733.04","733.06","733.08","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.24","733.26","733.28","733.3","733.32","733.34","733.36","733.38","733.58","733.64","733.72","733.74","733.76"],"Ask":[0,124,71,228,139,166,72,0,0,172,181,21,81,47,0,14,77,58,297,11,117,196,92,61,139,24,17,18,75,79,197,81,35,101,60,98,103,154,21,60,42,0,0,0,51,25],"Bid":[83,68,89,85,118,129,71,28,101,29,150,0,0,0,103,17,69,70,137,82,86,237,0,28,0,55,110,84,204,154,30,182,327,68,140,8,148,126,0,34,0,81,27,50,35,10],"symbol":"au2506","datetime":"2025-04-02 13:36:00","delta":-48.0,"close":732.92,"open":733.76,"high":733.76,"low":732.44,"volume":8686,"dj":1,"dayma":737.0315384615,"delta累计":353.0} +{"price":["732.86","732.88","732.9","732.92","732.96","732.98","733.0","733.02","733.04","733.06","733.08","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.24","733.26","733.28","733.3","733.32","733.38","733.4","733.42","733.46","733.5","733.52","733.56","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76"],"Ask":[0,31,0,0,0,85,13,171,7,163,87,117,102,107,44,70,106,64,86,40,13,7,6,11,28,156,2,42,18,6,0,130,86,169,29,0,40,34],"Bid":[18,0,76,28,53,54,97,169,130,126,32,138,95,178,82,97,43,17,28,33,8,0,6,20,59,26,0,0,0,19,42,89,76,40,0,93,58,80],"symbol":"au2506","datetime":"2025-04-02 13:39:00","delta":-40.0,"close":733.68,"open":732.96,"high":733.76,"low":732.86,"volume":4468,"dj":1,"dayma":736.9683018868,"delta累计":313.0} +{"price":["733.34","733.36","733.38","733.4","733.42","733.44","733.46","733.48","733.5","733.52","733.54","733.56","733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92"],"Ask":[17,18,19,26,52,28,53,39,4,0,36,12,4,40,43,16,7,46,80,156,98,27,8,51,5,78,94,124,95,29],"Bid":[19,30,48,52,87,13,36,27,35,3,0,13,60,44,15,54,72,133,28,67,23,56,30,100,35,92,171,80,13,0],"symbol":"au2506","datetime":"2025-04-02 13:42:00","delta":-131.0,"close":733.86,"open":733.68,"high":733.92,"low":733.34,"volume":2862,"dj":0,"dayma":736.9107407407,"delta累计":182.0} +{"price":["733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.96","733.98","734.0","734.02","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26"],"Ask":[0,50,64,140,6,87,48,112,8,9,24,0,0,103,44,12,64,43,148,77,132,36,21],"Bid":[10,37,69,47,158,99,28,30,0,0,0,31,23,41,80,40,42,58,120,160,0,14,0],"symbol":"au2506","datetime":"2025-04-02 13:45:00","delta":141.0,"close":734.08,"open":733.88,"high":734.26,"low":733.78,"volume":2489,"dj":0,"dayma":736.8592727273,"delta累计":323.0} +{"price":["733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.26","734.28","734.3","734.32","734.34","734.36","734.38"],"Ask":[0,15,12,12,20,73,30,89,46,21,29,102,28,34,27,31,10,29,17,10,0,25,24,16,107,3,93,151,12],"Bid":[16,126,46,7,33,22,37,55,31,31,119,51,25,29,9,0,31,9,0,0,31,0,57,24,83,16,37,76,0],"symbol":"au2506","datetime":"2025-04-02 13:48:00","delta":65.0,"close":734.3,"open":734.08,"high":734.38,"low":733.8,"volume":2283,"dj":0,"dayma":736.8135714286,"delta累计":388.0} +{"price":["734.26","734.28","734.3","734.32","734.34","734.36","734.38","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74","734.76"],"Ask":[12,14,3,41,23,73,6,89,46,95,0,70,78,60,58,85,51,70,34,5,20,0,32,24,27,15],"Bid":[17,26,27,16,107,27,13,86,25,17,81,76,97,62,38,36,77,68,0,13,7,19,25,58,4,0],"symbol":"au2506","datetime":"2025-04-02 13:51:00","delta":9.0,"close":734.7,"open":734.32,"high":734.76,"low":734.26,"volume":2295,"dj":0,"dayma":736.7764912281,"delta累计":397.0} +{"price":["734.46","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82"],"Ask":[0,23,1,31,7,53,42,18,116,87,78,90,102,88,48,23,94,24],"Bid":[32,41,36,16,4,33,113,68,46,93,71,59,96,76,71,43,15,0],"symbol":"au2506","datetime":"2025-04-02 13:54:00","delta":12.0,"close":734.6,"open":734.68,"high":734.82,"low":734.46,"volume":1951,"dj":0,"dayma":736.7389655172,"delta累计":409.0} +{"price":["734.28","734.3","734.32","734.34","734.36","734.38","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82","734.84","734.86","734.88","734.9","734.92","734.94"],"Ask":[0,9,17,22,29,0,23,0,9,15,26,55,45,0,5,12,51,54,26,19,29,71,0,25,3,7,33,8,14,21,32,0,28,55],"Bid":[30,0,62,0,30,14,26,32,22,73,76,36,92,2,161,30,37,41,3,13,20,21,35,6,17,37,10,30,5,21,28,75,71,0],"symbol":"au2506","datetime":"2025-04-02 13:57:00","delta":-413.0,"close":734.28,"open":734.58,"high":734.94,"low":734.28,"volume":2085,"dj":0,"dayma":736.6972881356,"delta累计":-4.0} +{"price":["734.24","734.3","734.34","734.36","734.38","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.68","734.7","734.72","734.74"],"Ask":[0,3,14,40,13,96,44,44,20,10,8,16,21,82,70,91,33,28,12,0,0,23,6],"Bid":[21,0,0,21,42,46,19,0,0,0,3,28,30,67,122,34,20,13,13,7,13,10,0],"symbol":"au2506","datetime":"2025-04-02 14:00:00","delta":165.0,"close":734.7,"open":734.3,"high":734.74,"low":734.24,"volume":1274,"dj":2,"dayma":736.6294117647,"delta累计":521.0} +{"price":["734.52","734.58","734.6","734.64","734.66","734.68","734.7","734.72","734.74","734.76","734.78","734.8","734.82"],"Ask":[0,0,16,15,50,53,52,117,78,62,38,93,45],"Bid":[16,13,2,33,73,34,100,18,79,63,52,100,18],"symbol":"au2506","datetime":"2025-04-02 14:03:00","delta":18.0,"close":734.76,"open":734.74,"high":734.82,"low":734.52,"volume":1321,"dj":0,"dayma":736.5934615385,"delta累计":539.0} +{"price":["734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66","734.7","734.72","734.74","734.76","734.78","734.8"],"Ask":[0,0,18,39,38,78,56,15,18,41,19,22,30,0,0,28,0,4,10],"Bid":[36,72,106,137,137,36,19,31,4,57,47,12,25,31,16,1,35,0,0],"symbol":"au2506","datetime":"2025-04-02 14:06:00","delta":-386.0,"close":734.44,"open":734.76,"high":734.8,"low":734.42,"volume":1371,"dj":0,"dayma":736.5528301887,"delta累计":153.0} +{"price":["733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","734.0","734.02","734.04","734.06","734.08","734.12","734.14","734.16","734.2","734.22","734.24","734.28","734.3","734.32","734.34","734.36","734.38","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58","734.6","734.62","734.64","734.66"],"Ask":[0,0,60,22,84,16,55,16,24,20,5,9,64,56,18,83,104,0,6,0,18,39,28,21,6,84,0,0,8,13,0,3,2,0,22,0,0,9,6,16,11,19,20,0,39,12,28,10],"Bid":[8,59,22,30,15,18,112,9,23,31,31,86,153,111,24,52,0,118,26,22,71,0,0,3,0,35,25,33,3,47,13,7,30,15,21,5,17,7,7,17,44,8,34,5,14,28,2,0],"symbol":"au2506","datetime":"2025-04-02 14:09:00","delta":-385.0,"close":733.68,"open":734.44,"high":734.66,"low":733.62,"volume":2884,"dj":-3,"dayma":736.4996296296,"delta累计":-232.0} +{"price":["733.3","733.32","733.34","733.36","733.38","733.4","733.42","733.46","733.5","733.52","733.54","733.56","733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94"],"Ask":[0,36,6,2,42,20,0,0,28,0,12,49,32,2,11,8,18,48,61,47,79,63,49,90,40,10,56,12,63,8,16],"Bid":[92,0,22,60,9,23,11,12,113,20,26,16,16,43,44,26,0,15,76,24,74,27,47,15,47,45,28,72,43,3,0],"symbol":"au2506","datetime":"2025-04-02 14:12:00","delta":-141.0,"close":733.32,"open":733.68,"high":733.94,"low":733.3,"volume":2176,"dj":-1,"dayma":736.4418181818,"delta累计":-373.0} +{"price":["733.06","733.08","733.1","733.12","733.14","733.16","733.18","733.2","733.22","733.24","733.26","733.3","733.32","733.36","733.38","733.4","733.42","733.44","733.46","733.48","733.5","733.52","733.54","733.56","733.58"],"Ask":[0,0,73,14,36,62,342,76,62,70,5,5,14,27,10,11,82,30,88,72,171,19,64,63,15],"Bid":[5,9,96,85,105,93,112,34,9,6,16,14,44,0,9,30,83,32,46,114,105,8,16,24,0],"symbol":"au2506","datetime":"2025-04-02 14:15:00","delta":316.0,"close":733.54,"open":733.36,"high":733.58,"low":733.06,"volume":2910,"dj":0,"dayma":736.39,"delta累计":-57.0} +{"price":["733.5","733.52","733.54","733.56","733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86"],"Ask":[5,5,12,12,1,45,6,13,1,82,48,46,70,63,67,107,42,54,121],"Bid":[6,4,9,2,11,12,18,4,9,22,64,51,48,85,28,70,49,69,21],"symbol":"au2506","datetime":"2025-04-02 14:18:00","delta":218.0,"close":733.84,"open":733.52,"high":733.86,"low":733.5,"volume":1510,"dj":0,"dayma":736.3452631579,"delta累计":161.0} +{"price":["733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26","734.28","734.3","734.32","734.34","734.36","734.38"],"Ask":[5,0,31,5,50,72,48,25,38,34,60,98,42,73,34,9,0,26,36,17,11,33,13,55,64,42,12,0,6,23,57],"Bid":[27,13,25,8,41,51,55,17,3,63,26,41,23,24,0,0,3,7,26,47,22,69,69,69,36,0,62,16,0,0,14],"symbol":"au2506","datetime":"2025-04-02 14:21:00","delta":162.0,"close":734.2,"open":733.88,"high":734.38,"low":733.78,"volume":1960,"dj":0,"dayma":736.3082758621,"delta累计":323.0} +{"price":["733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.12","734.16","734.18","734.2","734.22","734.24"],"Ask":[0,5,74,54,1,12,23,71,70,53,38,24,0,6,75,29,46,20,47,116,14,0,10,3,0,11,0,0,0,0,0,4],"Bid":[11,11,89,64,17,0,38,66,39,17,50,24,10,0,61,60,55,35,13,32,6,19,45,4,14,11,16,7,9,5,7,0],"symbol":"au2506","datetime":"2025-04-02 14:24:00","delta":-29.0,"close":733.9,"open":734.2,"high":734.24,"low":733.58,"volume":1741,"dj":-3,"dayma":736.2674576271,"delta累计":294.0} +{"price":["733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06"],"Ask":[11,9,27,30,46,19,32,59,26,59,25,1,28,39,17,53],"Bid":[10,12,87,31,28,36,90,70,29,34,19,6,19,20,5,28],"symbol":"au2506","datetime":"2025-04-02 14:27:00","delta":-43.0,"close":733.8,"open":733.9,"high":734.06,"low":733.76,"volume":1097,"dj":0,"dayma":736.2263333333,"delta累计":251.0} +{"price":["733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.96","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26","734.28","734.3"],"Ask":[13,0,21,17,8,0,32,4,9,20,37,22,29,41,7,106,46,0,68,54,14,22,0,90,32,29,21,3,81,17,12,17,20,46],"Bid":[42,18,23,14,17,47,10,13,42,28,98,47,22,97,3,57,0,3,59,102,37,4,41,55,75,57,3,19,86,34,4,0,0,0],"symbol":"au2506","datetime":"2025-04-02 14:30:00","delta":-219.0,"close":734.22,"open":733.78,"high":734.3,"low":733.6,"volume":2261,"dj":1,"dayma":736.193442623,"delta累计":32.0} +{"price":["733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","734.0","734.02","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24"],"Ask":[0,28,37,89,22,48,43,27,2,16,29,16,22,15,0,14,0,0,3,5,13,0,30,43,43,45,19,7],"Bid":[20,69,16,44,13,64,1,33,19,14,29,37,8,11,6,12,11,14,30,5,50,21,54,83,94,24,10,0],"symbol":"au2506","datetime":"2025-04-02 14:33:00","delta":-176.0,"close":733.9,"open":734.24,"high":734.24,"low":733.66,"volume":1527,"dj":-2,"dayma":736.1564516129,"delta累计":-144.0} +{"price":["733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04"],"Ask":[0,0,43,43,66,33,31,57,95,18,4,22],"Bid":[8,18,77,68,38,47,54,49,70,8,6,0],"symbol":"au2506","datetime":"2025-04-02 14:36:00","delta":-31.0,"close":733.94,"open":733.92,"high":734.04,"low":733.82,"volume":925,"dj":0,"dayma":736.1212698413,"delta累计":-175.0} +{"price":["733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26"],"Ask":[0,6,25,21,0,29,61,42,76,55,19,44,9,70,9,17,33,36,22],"Bid":[23,31,12,29,14,47,63,28,45,25,47,34,40,65,7,23,36,5,0],"symbol":"au2506","datetime":"2025-04-02 14:39:00","delta":0.0,"close":734.26,"open":733.92,"high":734.26,"low":733.9,"volume":1241,"dj":0,"dayma":736.0921875,"delta累计":-175.0} +{"price":["734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26","734.28"],"Ask":[1,11,84,49,30,29,19,12,84,10,15,10],"Bid":[27,75,83,15,50,38,73,102,58,15,2,0],"symbol":"au2506","datetime":"2025-04-02 14:42:00","delta":-184.0,"close":734.12,"open":734.24,"high":734.28,"low":734.06,"volume":1036,"dj":0,"dayma":736.0618461538,"delta累计":-359.0} +{"price":["734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26","734.28","734.3","734.32","734.34","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56"],"Ask":[0,0,18,14,22,31,37,106,31,29,52,40,47,14,12,42,0,68,32,52,82,0,9,9],"Bid":[1,30,48,17,15,32,81,51,64,40,24,28,9,16,6,31,108,19,43,2,9,29,11,18],"symbol":"au2506","datetime":"2025-04-02 14:45:00","delta":15.0,"close":734.48,"open":734.12,"high":734.56,"low":734.06,"volume":1643,"dj":0,"dayma":736.0378787879,"delta累计":-344.0} +{"price":["734.18","734.2","734.22","734.24","734.26","734.28","734.3","734.32","734.34","734.36","734.38","734.4","734.42","734.44","734.46","734.48","734.5","734.52","734.54","734.56","734.58"],"Ask":[2,0,52,0,4,27,28,8,75,40,45,34,5,18,14,15,15,7,28,43,10],"Bid":[26,24,20,32,4,83,52,89,59,47,50,44,5,26,4,5,24,40,24,25,0],"symbol":"au2506","datetime":"2025-04-02 14:48:00","delta":-213.0,"close":734.3,"open":734.48,"high":734.58,"low":734.18,"volume":1225,"dj":0,"dayma":736.0119402985,"delta累计":-557.0} +{"price":["734.1","734.12","734.14","734.16","734.18","734.2","734.22","734.24","734.26","734.28","734.3","734.32","734.34","734.36","734.38"],"Ask":[0,11,3,0,1,40,58,96,126,27,82,78,33,13,12],"Bid":[8,27,50,64,43,94,48,86,49,20,10,32,45,5,0],"symbol":"au2506","datetime":"2025-04-02 14:51:00","delta":-1.0,"close":734.2,"open":734.26,"high":734.38,"low":734.1,"volume":1229,"dj":-1,"dayma":735.9852941176,"delta累计":-558.0} +{"price":["734.04","734.06","734.08","734.1","734.12","734.14","734.16","734.18","734.22","734.24","734.26","734.28","734.3","734.32","734.34","734.36","734.38"],"Ask":[0,0,35,28,64,28,34,8,0,8,12,31,111,50,93,35,7],"Bid":[19,1,37,66,38,11,36,33,34,38,27,54,51,35,13,3,0],"symbol":"au2506","datetime":"2025-04-02 14:54:00","delta":48.0,"close":734.08,"open":734.26,"high":734.38,"low":734.04,"volume":1147,"dj":-2,"dayma":735.9576811594,"delta累计":-510.0} +{"price":["733.82","733.84","733.86","733.88","733.9","733.92","733.94","733.96","733.98","734.0","734.02","734.04","734.06","734.08","734.1","734.12","734.14"],"Ask":[0,2,15,28,79,65,102,133,42,43,12,17,27,13,8,24,18],"Bid":[7,35,80,84,147,69,84,32,11,57,29,36,49,28,25,1,0],"symbol":"au2506","datetime":"2025-04-02 14:57:00","delta":-146.0,"close":733.92,"open":734.04,"high":734.14,"low":733.82,"volume":1559,"dj":0,"dayma":735.9285714286,"delta累计":-656.0} +{"price":["733.58","733.6","733.62","733.64","733.66","733.68","733.7","733.72","733.74","733.76","733.78","733.8","733.82","733.84","733.86","733.88","733.9","733.92"],"Ask":[0,0,13,79,222,307,313,71,91,52,40,26,70,19,20,10,3,7],"Bid":[34,32,82,161,253,163,100,92,23,62,9,18,32,7,2,18,5,0],"symbol":"au2506","datetime":"2025-04-02 15:00:00","delta":250.0,"close":733.62,"open":733.92,"high":733.92,"low":733.58,"volume":2660,"dj":0,"dayma":735.896056338,"delta累计":-406.0} diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506_stops.json b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506_stops.json new file mode 100644 index 0000000..38c0c61 --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506_stops.json @@ -0,0 +1,16 @@ +{ + "long": { + "position": 0, + "entry_price": 0, + "stop_loss": 0, + "take_profit": 0, + "trailing_stop": 0 + }, + "short": { + "position": 0, + "entry_price": 0, + "stop_loss": 0, + "take_profit": 0, + "trailing_stop": 0 + } +} \ No newline at end of file diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506traderdata.csv b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506traderdata.csv new file mode 100644 index 0000000..7fcaeeb --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/traderdata/au2506traderdata.csv @@ -0,0 +1,2 @@ +datetime,pos,short_trailing_stop_price,long_trailing_stop_price,sl_long_price,sl_shor_price +2025-04-02 14:44:09,0,0,0,0,0 diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/专享策略20_o3mini.py b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/专享策略20_o3mini.py new file mode 100644 index 0000000..e441b41 --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/专享策略20_o3mini.py @@ -0,0 +1,2610 @@ +''' +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +该代码的主要目的是处理Tick数据并生成交易信号。代码中定义了一个tickcome函数,它接收到Tick数据后会进行一系列的处理,包括构建Tick字典、更新上一个Tick的成交量、保存Tick数据、生成K线数据等。其中涉及到的一些函数有: + +on_tick(tick): 处理单个Tick数据,根据Tick数据生成K线数据。 +tickdata(df, symbol): 处理Tick数据,生成K线数据。 +orderflow_df_new(df_tick, df_min, symbol): 处理Tick和K线数据,生成订单流数据。 +GetOrderFlow_dj(kData): 计算订单流的信号指标。 +除此之外,代码中还定义了一个MyTrader类,继承自TraderApiBase,用于实现交易相关的功能。 +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 +''' +from multiprocessing import Process, Queue +from AlgoPlus.CTP.MdApi import run_tick_engine +from AlgoPlus.CTP.FutureAccount import get_simulate_account +from AlgoPlus.CTP.FutureAccount import FutureAccount +from AlgoPlus.CTP.TraderApiBase import TraderApiBase +from AlgoPlus.ta.time_bar import tick_to_bar +import pandas as pd +from datetime import datetime, timedelta +from datetime import time as s_time +import operator +import time +import numpy as np +import os +import re +import json +import requests # 添加requests库用于API调用 +from openai import OpenAI # 导入OpenAI客户端 +import threading +from queue import Queue as ThreadQueue +import warnings +warnings.filterwarnings("ignore", category=FutureWarning) +import copy +import math +import shutil +import re # 新增 +import logging # 新增 +from logging.handlers import RotatingFileHandler # 新增 + +# 在文件顶部定义全局变量 +tickdatadict = {} # 存储Tick数据的字典 +quotedict = {} # 存储行情数据的字典 +ofdatadict = {} # 存储K线数据的字典 +trader_df = pd.DataFrame({}) # 存储交易数据的DataFrame对象 +previous_volume = {} # 上一个Tick的成交量 +tsymbollist={} +# 全局LLM配置变量 +GLOBAL_LLM_CONFIG = {} # 全局大模型配置参数 +# 全局交易信号队列,用于存储AI模型生成的交易信号 +AI_SIGNAL_QUEUE = ThreadQueue() +# 标记是否有AI线程正在运行 +AI_THREAD_RUNNING = False +# 不再需要单独的K线时间粒度全局变量,它已经被整合到GLOBAL_LLM_CONFIG中 + +# 设置日志系统 +def setup_logging(log_folder='logs'): + # 确保日志文件夹存在 + if not os.path.exists(log_folder): + os.makedirs(log_folder) + + # 创建日志格式 + formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') + + # 设置AI分析日志 + ai_logger = logging.getLogger('ai_analysis') + ai_logger.setLevel(logging.INFO) + + # 设置带有文件循环的文件处理器 + ai_file_handler = RotatingFileHandler( + os.path.join(log_folder, 'ai_analysis.log'), + maxBytes=10*1024*1024, # 10MB + backupCount=5 + ) + ai_file_handler.setFormatter(formatter) + ai_logger.addHandler(ai_file_handler) + + # 设置交易信号日志 + signal_logger = logging.getLogger('trading_signals') + signal_logger.setLevel(logging.INFO) + + signal_file_handler = RotatingFileHandler( + os.path.join(log_folder, 'trading_signals.log'), + maxBytes=10*1024*1024, # 10MB + backupCount=5 + ) + signal_file_handler.setFormatter(formatter) + signal_logger.addHandler(signal_file_handler) + + # 设置止损止盈日志 + stoploss_logger = logging.getLogger('stoploss') + stoploss_logger.setLevel(logging.INFO) + + stoploss_file_handler = RotatingFileHandler( + os.path.join(log_folder, 'stoploss.log'), + maxBytes=10*1024*1024, # 10MB + backupCount=5 + ) + stoploss_file_handler.setFormatter(formatter) + stoploss_logger.addHandler(stoploss_file_handler) + + # 返回三个日志记录器 + return ai_logger, signal_logger, stoploss_logger + +# 全局日志记录器 +AI_LOGGER, SIGNAL_LOGGER, STOPLOSS_LOGGER = setup_logging() + +def tickcome(md_queue): + global previous_volume + + data=md_queue + instrument_id = data['InstrumentID'].decode() # 品种代码 + ActionDay = data['ActionDay'].decode() # 交易日日期 + update_time = data['UpdateTime'].decode() # 更新时间 + #zzg_quant + update_millisec = str(data['UpdateMillisec']) # 更新毫秒数 + created_at = ActionDay[:4] + '-' + ActionDay[4:6] + '-' + ActionDay[6:] + ' ' + update_time + '.' + update_millisec #创建时间 + # 构建tick字典 + tick = { + 'symbol': instrument_id, # 品种代码和交易所ID + 'created_at':datetime.strptime(created_at, "%Y-%m-%d %H:%M:%S.%f"), + #'created_at': created_at, # 创建时间 + 'price': float(data['LastPrice']), # 最新价 + 'last_volume': int(data['Volume']) - previous_volume.get(instrument_id, 0) if previous_volume.get(instrument_id, 0) != 0 else 0, # 瞬时成交量 + 'bid_p': float(data['BidPrice1']), # 买价 + 'bid_v': int(data['BidVolume1']), # 买量 + 'ask_p': float(data['AskPrice1']), # 卖价 + 'ask_v': int(data['AskVolume1']), # 卖量 + 'UpperLimitPrice': float(data['UpperLimitPrice']), # 涨停价 + 'LowerLimitPrice': float(data['LowerLimitPrice']), # 跌停价 + 'TradingDay': data['TradingDay'].decode(), # 交易日日期 + 'cum_volume': int(data['Volume']), # 最新总成交量 + 'cum_amount': float(data['Turnover']), # 最新总成交额 + 'cum_position': int(data['OpenInterest']), # 合约持仓量 + } + # 更新上一个Tick的成交量 + previous_volume[instrument_id] = int(data['Volume']) + if tick['last_volume']>0: + #print(tick['created_at'],'vol:',tick['last_volume']) + # 处理Tick数据 + on_tick(tick) + + +def can_time(hour, minute): + hour = str(hour) + minute = str(minute) + if len(minute) == 1: + minute = "0" + minute + return int(hour + minute) + +def on_tick(tick): + + tm=can_time(tick['created_at'].hour,tick['created_at'].minute) + #print(tick['symbol']) + #print(1) + #if tm>1500 and tm<2100 : + # return + if tick['last_volume']==0: + return + quotes = tick + timetick=str(tick['created_at']).replace('+08:00', '') + tsymbol=tick['symbol'] + if tsymbol not in tsymbollist.keys(): + # 获取tick的买卖价和买卖量 + #zzg_quant + tsymbollist[tsymbol]=tick + bid_p=quotes['bid_p'] + ask_p=quotes['ask_p'] + bid_v=quotes['bid_v'] + ask_v=quotes['ask_v'] + else: + # 获取上一个tick的买卖价和买卖量 + rquotes =tsymbollist[tsymbol] + bid_p=rquotes['bid_p'] + ask_p=rquotes['ask_p'] + bid_v=rquotes['bid_v'] + ask_v=rquotes['ask_v'] + tsymbollist[tsymbol]=tick + tick_dt=pd.DataFrame({'datetime':timetick,'symbol':tick['symbol'],'mainsym':tick['symbol'].rstrip('0123456789').upper(),'lastprice':tick['price'], + 'vol':tick['last_volume'], + 'bid_p':bid_p,'ask_p':ask_p,'bid_v':bid_v,'ask_v':ask_v},index=[0]) + sym = tick_dt['symbol'][0] + #print(tick_dt) + + # 直接调用tickdata,不传递resample_rule参数,让其自行从全局配置获取 + tickdata(tick_dt, sym) + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def data_of(df): + global trader_df + # 将df数据合并到trader_df中 + trader_df = pd.concat([trader_df, df], ignore_index=True) + #print('trader_df: ', len(trader_df)) + #print(trader_df) + +def process(bidDict, askDict, symbol): + try: + # 尝试从quotedict中获取对应品种的报价数据 + dic = quotedict[symbol] + bidDictResult = dic['bidDictResult'] + askDictResult = dic['askDictResult'] + except: + # 如果获取失败,则初始化bidDictResult和askDictResult为空字典 + bidDictResult, askDictResult = {}, {} + + # 将所有买盘字典和卖盘字典的key合并,并按升序排序 + sList = sorted(set(list(bidDict.keys()) + list(askDict.keys()))) + + # 遍历所有的key,将相同key的值进行累加 + for s in sList: + if s in bidDict: + if s in bidDictResult: + bidDictResult[s] = int(bidDict[s]) + bidDictResult[s] + else: + bidDictResult[s] = int(bidDict[s]) + if s not in askDictResult: + askDictResult[s] = 0 + else: + if s in askDictResult: + askDictResult[s] = int(askDict[s]) + askDictResult[s] + else: + askDictResult[s] = int(askDict[s]) + if s not in bidDictResult: + bidDictResult[s] = 0 + + # 构建包含bidDictResult和askDictResult的字典,并存入quotedict中 + df = {'bidDictResult': bidDictResult, 'askDictResult': askDictResult} + quotedict[symbol] = df + + return bidDictResult, askDictResult +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + +def tickdata(df, symbol): + tickdata =pd.DataFrame({'datetime':df['datetime'],'symbol':df['symbol'],'lastprice':df['lastprice'], + 'volume':df['vol'],'bid_p':df['bid_p'],'bid_v':df['bid_v'],'ask_p':df['ask_p'],'ask_v':df['ask_v']}) + try: + if symbol in tickdatadict.keys(): + rdf=tickdatadict[symbol] + rdftm=pd.to_datetime(rdf['bartime'][0]).strftime('%Y-%m-%d %H:%M:%S') + now=str(tickdata['datetime'][0]) + if now>rdftm: + try: + oo=ofdatadict[symbol] + data_of(oo) + #print('oo',oo) + if symbol in quotedict.keys(): + quotedict.pop(symbol) + if symbol in tickdatadict.keys(): + tickdatadict.pop(symbol) + if symbol in ofdatadict.keys(): + ofdatadict.pop(symbol) + except IOError as e: + print('rdftm捕获到异常',e) + tickdata['bartime'] = pd.to_datetime(tickdata['datetime']) + tickdata['open'] = tickdata['lastprice'] + tickdata['high'] = tickdata['lastprice'] + tickdata['low'] = tickdata['lastprice'] + tickdata['close'] = tickdata['lastprice'] + tickdata['starttime'] = tickdata['datetime'] + else: + tickdata['bartime'] = rdf['bartime'] + tickdata['open'] = rdf['open'] + tickdata['high'] = max(tickdata['lastprice'].values,rdf['high'].values) + tickdata['low'] = min(tickdata['lastprice'].values,rdf['low'].values) + tickdata['close'] = tickdata['lastprice'] + tickdata['volume']=df['vol']+rdf['volume'].values + tickdata['starttime'] = rdf['starttime'] + else : + print('新bar的第一个tick进入') + tickdata['bartime'] = pd.to_datetime(tickdata['datetime']) + tickdata['open'] = tickdata['lastprice'] + tickdata['high'] = tickdata['lastprice'] + tickdata['low'] = tickdata['lastprice'] + tickdata['close'] = tickdata['lastprice'] + tickdata['starttime'] = tickdata['datetime'] + except IOError as e: + print('捕获到异常',e) + + + tickdata['bartime'] = pd.to_datetime(tickdata['bartime']) + # 直接从全局配置获取resample_rule + resample_rule = GLOBAL_LLM_CONFIG.get('bar_resample_rule') + + # 使用resample_rule生成K线 + bardata = tickdata.resample(on = 'bartime', rule = resample_rule, label = 'right', closed = 'right').agg({'starttime':'first','symbol':'last','open':'first','high':'max','low':'min','close':'last','volume':'sum'}).reset_index(drop = False) + bardata =bardata.dropna().reset_index(drop = True) + bardata['bartime'] = pd.to_datetime(bardata['bartime'][0]).strftime('%Y-%m-%d %H:%M:%S') + tickdatadict[symbol]=bardata + tickdata['volume']=df['vol'].values + #print(bardata['symbol'].values,bardata['bartime'].values) + orderflow_df_new(tickdata,bardata,symbol) + # time.sleep(0.5) + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def orderflow_df_new(df_tick,df_min,symbol): + startArray = pd.to_datetime(df_min['starttime']).values + voluememin= df_min['volume'].values + highs=df_min['high'].values + lows=df_min['low'].values + opens=df_min['open'].values + closes=df_min['close'].values + #endArray = pd.to_datetime(df_min['bartime']).values + endArray = df_min['bartime'].values + #print(endArray) + deltaArray = np.zeros((len(endArray),)) + tTickArray = pd.to_datetime(df_tick['datetime']).values + bp1TickArray = df_tick['bid_p'].values + ap1TickArray = df_tick['ask_p'].values + lastTickArray = df_tick['lastprice'].values + volumeTickArray = df_tick['volume'].values + symbolarray = df_tick['symbol'].values + indexFinal = 0 + for index,tEnd in enumerate(endArray): + dt=endArray[index] + start = startArray[index] + bidDict = {} + askDict = {} + bar_vol=voluememin[index] + bar_close=closes[index] + bar_open=opens[index] + bar_low=lows[index] + bar_high=highs[index] + bar_symbol=symbolarray[index] + # for indexTick in range(indexFinal,len(df_tick)): + # if tTickArray[indexTick] >= tEnd: + # break + # elif (tTickArray[indexTick] >= start) & (tTickArray[indexTick] < tEnd): + Bp = round(bp1TickArray[0],4) + Ap = round(ap1TickArray[0],4) + LastPrice = round(lastTickArray[0],4) + Volume = volumeTickArray[0] + if LastPrice >= Ap: + if str(LastPrice) in askDict.keys(): + askDict[str(LastPrice)] += Volume + else: + askDict[str(LastPrice)] = Volume + if LastPrice <= Bp: + if str(LastPrice) in bidDict.keys(): + bidDict[str(LastPrice)] += Volume + else: + bidDict[str(LastPrice)] = Volume + # indexFinal = indexTick + bidDictResult,askDictResult = process(bidDict,askDict,symbol) + bidDictResult=dict(sorted(bidDictResult.items(),key=operator.itemgetter(0))) + askDictResult=dict(sorted(askDictResult.items(),key=operator.itemgetter(0))) + prinslist=list(bidDictResult.keys()) + asklist=list(askDictResult.values()) + bidlist=list(bidDictResult.values()) + delta=(sum(askDictResult.values()) - sum(bidDictResult.values())) + #print(prinslist,asklist,bidlist) + #print(len(prinslist),len(bidDictResult),len(askDictResult)) + df=pd.DataFrame({'price':pd.Series([prinslist]),'Ask':pd.Series([asklist]),'Bid':pd.Series([bidlist])}) + #df=pd.DataFrame({'price':pd.Series(bidDictResult.keys()),'Ask':pd.Series(askDictResult.values()),'Bid':pd.Series(bidDictResult.values())}) + df['symbol']=bar_symbol + df['datetime']=dt + df['delta']=str(delta) + df['close']=bar_close + df['open']=bar_open + df['high']=bar_high + df['low']=bar_low + df['volume']=bar_vol + #df['ticktime']=tTickArray[0] + df['dj'] = GetOrderFlow_dj(df) + ofdatadict[symbol]=df + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def GetOrderFlow_dj(kData): + Config = { + 'Value1': 3, + 'Value2': 3, + 'Value3': 3, + 'Value4': True, + } + aryData = kData + djcout = 0 + + # 遍历kData中的每一行,计算djcout指标 + for index, row in aryData.iterrows(): + kItem = aryData.iloc[index] + high = kItem['high'] + low = kItem['low'] + close = kItem['close'] + open = kItem['open'] + dtime = kItem['datetime'] + price_s = kItem['price'] + Ask_s = kItem['Ask'] + Bid_s = kItem['Bid'] + delta = kItem['delta'] + + price_s = price_s + Ask_s = Ask_s + Bid_s = Bid_s + + gj = 0 + xq = 0 + gxx = 0 + xxx = 0 + + # 遍历price_s中的每一个元素,计算相关指标 + for i in np.arange(0, len(price_s), 1): + duiji = { + 'price': 0, + 'time': 0, + 'longshort': 0, + } + + if i == 0: + delta = delta + + order= { + "Price":price_s[i], + "Bid":{ "Value":Bid_s[i]}, + "Ask":{ "Value":Ask_s[i]} + } + #空头堆积 + if i >= 0 and i < len(price_s) - 1: + if (order["Bid"]["Value"] > Ask_s[i + 1] * int(Config['Value1'])): + gxx += 1 + gj += 1 + if gj >= int(Config['Value2']) and Config['Value4'] == True: + duiji['price'] = price_s[i] + duiji['time'] = dtime + duiji['longshort'] = -1 + if float(duiji['price']) > 0: + djcout += -1 + else: + gj = 0 + #多头堆积 + if i >= 1 and i <= len(price_s) - 1: + if (order["Ask"]["Value"] > Bid_s[i - 1] * int(Config['Value1'])): + xq += 1 + xxx += 1 + if xq >= int(Config['Value2']) and Config['Value4'] == True: + duiji['price'] = price_s[i] + duiji['time'] = dtime + duiji['longshort'] = 1 + if float(duiji['price']) > 0: + djcout += 1 + else: + xq = 0 + + # 返回计算得到的djcout值 + return djcout + +#交易程序--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +class MyTrader(TraderApiBase): + def __init__(self, broker_id, td_server, investor_id, password, app_id, auth_code, md_queue=None, page_dir='', private_resume_type=2, public_resume_type=2): + # Cython类不使用super().__init__()方式调用父类初始化方法 + # TraderApiBase.__init__会由Cython自动处理 + + self.py=30 #设置委托价格的偏移,更加容易促成成交。仅螺纹,其他品种根据最小点波动,自己设置 + self.cont_df=0 + self.trailing_stop_percent = 0 #跟踪出场参数 + self.fixed_stop_loss_percent = 0 #固定出场参数 + self.dj_X=1 #开仓的堆积参数 + + self.pos=0 + self.Lots=1 #下单手数 + self.short_trailing_stop_price = 0 + self.long_trailing_stop_price = 0 + self.sl_long_price=0 + self.sl_shor_price=0 + self.out_long=0 + self.out_short=0 + self.clearing_executed=False + self.day_closed = False # 添加日内平仓标志 + self.kgdata = True #历史数据加载一次 + self.holddata=True #持仓数据加载一次 + self.use_ai_model = True # 是否使用AI模型来分析 + self.data_saved_1 = False + self.data_saved_2 = False + self.symbols='au2506' + # 新增止盈止损字典,按合约ID索引 + self.stop_order_dict = {} + + # 新增历史数据加载相关参数 + self.load_history = False # 是否加载历史数据 + self.history_rows = 30 # 默认加载30行历史数据 + self.trader_rows = 10 # 当tader_df里的数据大于10行时开始计算指标及触发AI模型 + + # 创建并启动保存数据的线程 + self.save_data_thread = threading.Thread(target=self.run_save_last_bar_data) + self.save_data_thread.daemon = True # 设置为守护线程,主程序退出时自动结束 + self.save_data_thread.start() + + def run_save_last_bar_data(self): + """ + 在子线程中定期调用save_last_bar_data方法 + """ + while True: + try: + # 调用保存数据的方法 + self.save_last_bar_data() + # 每50秒检查一次 + time.sleep(50) + except Exception as e: + print(f"保存数据线程出现异常: {e}") + import traceback + traceback.print_exc() + # 异常后暂停一会再继续 + time.sleep(30) + + def load_history_data(self, instrument_id): + """ + 加载历史数据 + + Args: + instrument_id: 合约ID + """ + if not self.load_history: + return + + try: + # 不再只提取英文字母,使用完整的合约代码 + symbol = str(instrument_id) + json_file_path = f"traderdata/{symbol}_ofdata.json" + + # 检查traderdata目录是否存在 + if not os.path.exists("traderdata"): + print(f"traderdata目录不存在,创建目录") + os.makedirs("traderdata") + + if os.path.exists(json_file_path): + try: + # 读取JSON文件,使用lines=True确保正确读取每行JSON + df = pd.read_json(json_file_path, lines=True) + + if len(df) == 0: + print(f"历史数据文件为空: {json_file_path}") + print("将使用实时数据开始交易") + return False + + # 如果数据行数超过设定的历史行数,只取最后N行 + if len(df) > self.history_rows: + df = df.tail(self.history_rows) + print(f"历史数据超过设定行数,仅加载最后{self.history_rows}行") + + # 更新全局trader_df + global trader_df + trader_df = df + + print(f"\n===== 历史数据加载成功 =====") + print(f"合约: {instrument_id}") + print(f"数据行数: {len(df)}行") + print(f"数据时间范围: {df['datetime'].iloc[0]} 到 {df['datetime'].iloc[-1]}") + print(f"最新价格: {df['close'].iloc[-1]}") + print(f"最新成交量: {df['volume'].iloc[-1]}") + print("===========================\n") + + # 更新cont_df + self.cont_df = len(df) + + # 计算日均线 + if len(df) > 0: + df['dayma'] = df['close'].mean() + + # 计算累积的delta值 + df['delta'] = df['delta'].astype(float) + df['delta累计'] = df['delta'].cumsum() + + return True + except Exception as e: + print(f"\n===== 历史数据加载错误 =====") + print(f"合约: {instrument_id}") + print(f"读取JSON错误: {e}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + else: + print(f"\n===== 历史数据加载提示 =====") + print(f"合约: {instrument_id}") + print(f"未找到历史数据文件: {json_file_path}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + + except Exception as e: + print(f"\n===== 历史数据加载错误 =====") + print(f"合约: {instrument_id}") + print(f"错误信息: {e}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + + #读取保存的数据 + def read_to_csv(self,symbol): + # 文件夹路径和文件路径 + # 使用完整的合约代码 + symbol = str(symbol) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}traderdata.csv") + # 如果文件夹不存在则创建 + if not os.path.exists(folder_path): + os.makedirs(folder_path, exist_ok=True) + + # 读取保留的模型数据CSV文件 + if os.path.exists(file_path): + try: + # 检查文件是否为空 + if os.path.getsize(file_path) == 0: + print(f"CSV文件为空: {file_path}") + return + + df = pd.read_csv(file_path) + if not df.empty and self.holddata==True: + # 选择最后一行数据 + row = df.iloc[-1] + # 根据CSV文件的列名将数据赋值给相应的属性 + self.pos = int(row['pos']) + self.short_trailing_stop_price = float(row['short_trailing_stop_price']) + self.long_trailing_stop_price = float(row['long_trailing_stop_price']) + self.sl_long_price = float(row['sl_long_price']) + self.sl_shor_price = float(row['sl_shor_price']) + # self.out_long = int(row['out_long']) + # self.out_short = int(row['out_short']) + print("找到历史交易数据文件,已经更新持仓,止损止盈数据", df.iloc[-1]) + self.holddata=False + except pd.errors.EmptyDataError: + print(f"CSV文件格式错误或为空: {file_path}") + except Exception as e: + print(f"读取CSV文件时出错: {e}") + else: + pass + #print("没有找到历史交易数据文件", file_path) + #如果没有找到CSV,则初始化变量 + + pass + + #保存数据 + def save_to_csv(self,symbol): + # 使用完整的合约代码 + symbol = str(symbol) + # 创建DataFrame + data = { + 'datetime': [datetime.now().strftime('%Y-%m-%d %H:%M:%S')], # 使用当前时间 + 'pos': [self.pos], + 'short_trailing_stop_price': [self.short_trailing_stop_price], + 'long_trailing_stop_price': [self.long_trailing_stop_price], + 'sl_long_price': [self.sl_long_price], + 'sl_shor_price': [self.sl_shor_price], + } + + df = pd.DataFrame(data) + + # 确保目录存在 + folder_path = "traderdata" + if not os.path.exists(folder_path): + os.makedirs(folder_path, exist_ok=True) + + file_path = os.path.join(folder_path, f"{symbol}traderdata.csv") + + try: + # 将DataFrame保存到CSV文件 + df.to_csv(file_path, index=False) + print(f"持仓数据已保存到: {file_path}") + except Exception as e: + print(f"保存CSV文件时出错: {e}") + + + def save_last_bar_data(self): + # 获取当前时间 + current_time = datetime.now().time() + + # 第一时间范围 + clearing_time1_start = s_time(14,55) + clearing_time1_end = s_time(15,00) + # 计算clearing_time1_end加5分钟 + clearing_time1_end_plus5 = (datetime.combine(datetime.today(), clearing_time1_end) + timedelta(minutes=5)).time() + + # 第二时间范围 + clearing_time2_start = s_time(2,25) + clearing_time2_end = s_time(2,30) + # 计算clearing_time2_end加5分钟 + clearing_time2_end_plus5 = (datetime.combine(datetime.today(), clearing_time2_end) + timedelta(minutes=5)).time() + + instrument_id = self.symbols + json_file_path = f"traderdata/{instrument_id}_ofdata.json" + + # 检查是否已经有对应收盘时间的数据 + has_closing_data = False + if os.path.exists(json_file_path): + try: + # 读取现有JSON文件 + existing_df = pd.read_json(json_file_path, lines=True) + if not existing_df.empty: + # 获取最后一行数据的datetime + last_datetime = existing_df.iloc[-1]['datetime'] + + # 如果是Timestamp类型,直接获取time() + if isinstance(last_datetime, pd.Timestamp): + last_time = last_datetime.time() + # 如果是字符串类型,先转换为datetime + else: + last_datetime = pd.to_datetime(str(last_datetime)) + last_time = last_datetime.time() + + # 检查是否已经有了收盘时间的数据 + if (last_time == clearing_time1_end): + print(f"已有15:00收盘数据: {last_datetime}, 无需追加") + self.data_saved_1 = True + has_closing_data = True + elif (last_time == clearing_time2_end): + print(f"已有2:30收盘数据: {last_datetime}, 无需追加") + self.data_saved_2 = True + has_closing_data = True + except Exception as e: + print(f"读取JSON文件检查收盘数据时出错: {e}") + import traceback + traceback.print_exc() + + # 保存最后一个bar的数据到JSON文件(当时间在第一个时间段结束后的5分钟内) + if current_time >= clearing_time1_end and current_time < clearing_time1_end_plus5 and not self.data_saved_1 and not has_closing_data: + if len(trader_df) > 0: + print("第一时间段结束,保存最后一个完整bar数据到行情JSON") + + # 确保目录存在 + if not os.path.exists("traderdata"): + os.makedirs("traderdata", exist_ok=True) + + # 确保待保存的新数据中datetime字段是格式化的日期时间字符串 + if 'datetime' in trader_df.columns: + trader_df['datetime'] = trader_df['datetime'].astype(str) + + # 只获取最后一个bar的数据 + last_bar = trader_df.tail(1) + + if os.path.exists(json_file_path): + try: + # 读取现有数据 + existing_df = pd.read_json(json_file_path, lines=True) + + # 确保现有数据中的datetime字段是字符串类型 + if 'datetime' in existing_df.columns: + existing_df['datetime'] = existing_df['datetime'].astype(str) + + # 合并新数据 + combined_df = pd.concat([existing_df, last_bar], ignore_index=True) + # 保存合并后的数据,使用lines=True确保每行是独立的JSON对象 + combined_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + print(f"最后一个bar数据已保存到行情JSON: {json_file_path}") + except Exception as e: + print(f"读取或保存JSON文件时出错: {e}") + # 如果读取出错,直接保存当前数据 + last_bar.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + else: + # 创建新文件并保存最后一个bar数据 + last_bar.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + print(f"创建新的行情JSON并保存最后一个bar: {json_file_path}") + + self.data_saved_1 = True # 设置标志,防止重复保存 + + # 保存最后一个bar的数据到JSON文件(当时间在第二个时间段结束后的5分钟内) + if current_time >= clearing_time2_end and current_time < clearing_time2_end_plus5 and not self.data_saved_2 and not has_closing_data: + if len(trader_df) > 0: + print("第二时间段结束,保存最后一个完整bar数据到行情JSON") + + # 确保目录存在 + if not os.path.exists("traderdata"): + os.makedirs("traderdata", exist_ok=True) + + # 确保待保存的新数据中datetime字段是格式化的日期时间字符串 + if 'datetime' in trader_df.columns: + trader_df['datetime'] = trader_df['datetime'].astype(str) + + # 只获取最后一个bar的数据 + last_bar = trader_df.tail(1) + + if os.path.exists(json_file_path): + try: + # 读取现有数据 + existing_df = pd.read_json(json_file_path, lines=True) + + # 确保现有数据中的datetime字段是字符串类型 + if 'datetime' in existing_df.columns: + existing_df['datetime'] = existing_df['datetime'].astype(str) + + # 合并新数据 + combined_df = pd.concat([existing_df, last_bar], ignore_index=True) + # 保存合并后的数据,使用lines=True确保每行是独立的JSON对象 + combined_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + print(f"最后一个bar数据已保存到行情JSON: {json_file_path}") + except Exception as e: + print(f"读取或保存JSON文件时出错: {e}") + # 如果读取出错,直接保存当前数据 + last_bar.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + else: + # 创建新文件并保存最后一个bar数据 + last_bar.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + print(f"创建新的行情JSON并保存最后一个bar: {json_file_path}") + + self.data_saved_2 = True # 设置标志,防止重复保存 + + + + #每日收盘重置数据 + def day_data_reset(self,data): + # 获取当前时间 + current_time = datetime.now().time() + + # 第一时间范围 + clearing_time1_start = s_time(14,55) + clearing_time1_end = s_time(15,00) + # 第二时间范围 + clearing_time2_start = s_time(2,25) + clearing_time2_end = s_time(2,30) + current_bid = float(data['BidPrice1']) # 当前买价 + current_ask = float(data['AskPrice1']) # 当前卖价 + + + self.clearing_executed = False + # 检查当前时间第一个操作的时间范围内 + if clearing_time1_start <= current_time < clearing_time1_end and not self.clearing_executed: + self.clearing_executed = True # 设置标志变量为已执行 + + # 如果有持仓,强制平仓 + if self.pos != 0: + print("交易日结束,开始强制平仓") + # 遍历所有合约发送平仓指令 + for instrument_id in list(self.stop_order_dict.keys()): + stops = self.stop_order_dict[instrument_id] + + # 平多仓 + if stops['long']['position'] > 0: + print(f"发送平多仓指令: {instrument_id}, 手数: {stops['long']['position']}, 价格: {current_bid}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_bid - self.py, + stops['long']['position'], + b'1', b'3') + # 平空仓 + if stops['short']['position'] > 0: + print(f"发送平空仓指令: {instrument_id}, 手数: {stops['short']['position']}, 价格: {current_ask}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_ask + self.py, + stops['short']['position'], + b'0', b'3') + + # 清空所有合约的持仓信息 + for instrument_id in list(self.stop_order_dict.keys()): + self.clear_position_info(instrument_id, 'all') + self.day_closed = True # 设置日内平仓标志 + print("日内交易已结束,禁止开新仓") + + # 检查当前时间是否在第二个操作的时间范围内 + elif clearing_time2_start <= current_time < clearing_time2_end and not self.clearing_executed: + self.clearing_executed = True # 设置标志变量为已执行 + + # 如果有持仓,强制平仓 + if self.pos != 0: + print("交易日结束,开始强制平仓") + # 遍历所有合约发送平仓指令 + for instrument_id in list(self.stop_order_dict.keys()): + stops = self.stop_order_dict[instrument_id] + + # 平多仓 + if stops['long']['position'] > 0: + print(f"发送平多仓指令: {instrument_id}, 手数: {stops['long']['position']}, 价格: {current_bid}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_bid - self.py, + stops['long']['position'], + b'1', b'3') + # 平空仓 + if stops['short']['position'] > 0: + print(f"发送平空仓指令: {instrument_id}, 手数: {stops['short']['position']}, 价格: {current_ask}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_ask + self.py, + stops['short']['position'], + b'0', b'3') + + # 清空所有合约的持仓信息 + for instrument_id in list(self.stop_order_dict.keys()): + self.clear_position_info(instrument_id, 'all') + self.day_closed = True # 设置日内平仓标志 + print("日内交易已结束,禁止开新仓") + else: + self.clearing_executed = False + self.day_closed = False + return self.clearing_executed + + def OnRtnTrade(self, pTrade): + print("||成交回报||", pTrade) + + # 获取成交信息 + instrument_id = pTrade['InstrumentID'].decode() + direction = pTrade['Direction'].decode() # '0'为买入,'1'为卖出 + offset_flag = pTrade['OffsetFlag'].decode() # '0'为开仓,'1'为平仓,'3'为平今 + volume = pTrade['Volume'] + price = pTrade['Price'] + + # 根据成交类型更新持仓信息 + if offset_flag in ['1', '3']: # 平仓或平今 + # 判断平的是多头还是空头 + if direction == '1': # 卖出,平多头 + print(f"平多头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + else: # 买入,平空头 + print(f"平空头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + + elif offset_flag == '0': # 开仓 + if direction == '0': # 买入,开多头 + print(f"开多头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 如果有空头持仓,先清空 + if instrument_id in self.stop_order_dict and self.stop_order_dict[instrument_id]['short']['position'] > 0: + self.clear_position_info(instrument_id, 'short') + + # # 设置多头持仓信息 + # sl_price = price * (1 - self.fixed_stop_loss_percent) # 默认止损价 + # tp_price = price * (1 + self.trailing_stop_percent) # 默认止盈价 + + # # 设置初始跟踪止损价,与开仓价保持一定距离 + # initial_trailing_stop = price * (1 - self.trailing_stop_percent) + + # log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + # STOPLOSS_LOGGER.info(log_message) + + # # 更新多头持仓信息,设置合理的跟踪止损初始值 + # self.update_stop_order_dict(instrument_id, 'long', volume, price, sl_price, tp_price, initial_trailing_stop) + # self.pos = volume # 更新全局持仓状态 + + # # 兼容旧代码 + # self.long_trailing_stop_price = initial_trailing_stop + # self.sl_long_price = sl_price + # self.save_to_csv(instrument_id) + + else: # 卖出,开空头 + print(f"开空头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 如果有多头持仓,先清空 + if instrument_id in self.stop_order_dict and self.stop_order_dict[instrument_id]['long']['position'] > 0: + self.clear_position_info(instrument_id, 'long') + + # # 设置空头持仓信息 + # sl_price = price * (1 + self.fixed_stop_loss_percent) # 默认止损价 + # tp_price = price * (1 - self.trailing_stop_percent) # 默认止盈价 + + # # 设置初始跟踪止损价,与开仓价保持一定距离 + # initial_trailing_stop = price * (1 + self.trailing_stop_percent) + + # log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + # STOPLOSS_LOGGER.info(log_message) + + # # 更新空头持仓信息,设置合理的跟踪止损初始值 + # self.update_stop_order_dict(instrument_id, 'short', self.Lots, price, sl_price, tp_price, initial_trailing_stop) + # self.pos = -1 # 更新全局持仓状态 + + # # 兼容旧代码 + # self.short_trailing_stop_price = initial_trailing_stop + # self.sl_shor_price = sl_price + # self.save_to_csv(instrument_id) + + def OnRspOrderInsert(self, pInputOrder, pRspInfo, nRequestID, bIsLast): + print("||OnRspOrderInsert||", pInputOrder, pRspInfo, nRequestID, bIsLast) + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + # 订单状态通知 + def OnRtnOrder(self, pOrder): + print("||订单回报||", pOrder) + + def Join(self): + data = None + # 记录上次加载止盈止损信息的时间和合约 + last_load_time = {} + + while True: + if self.status == 0 and not self.md_queue.empty(): + + while not self.md_queue.empty(): + data = self.md_queue.get(block=False) + instrument_id = data['InstrumentID'].decode() # 品种代码 + self.symbols=instrument_id + # 首次运行时加载历史数据 + if self.kgdata: + self.load_history_data(instrument_id) + self.kgdata = False + + # 加载该合约的止盈止损信息,避免频繁加载 + current_time = time.time() + if instrument_id not in last_load_time or current_time - last_load_time.get(instrument_id, 0) > 60: # 每60秒才重新加载一次 + self.load_stop_orders_from_file(instrument_id) + last_load_time[instrument_id] = current_time + + # 检查止盈止损条件 + self.check_stop_conditions(data) + + # 在每个tick都检查和处理AI交易信号 - 移到这里以提高执行速度 + if self.use_ai_model: + self.check_and_process_ai_signals(data) + + # 原有代码... + self.read_to_csv(instrument_id) + self.day_data_reset(data) + tickcome(data) + #新K线开始,启动交易程序 and 保存行情数据 + if len(trader_df)>self.cont_df and len(trader_df)>0: + # 计算日均线 + trader_df['dayma'] = trader_df['close'].mean() + + # 计算累积的delta值 + trader_df['delta'] = trader_df['delta'].astype(float) + trader_df['delta累计'] = trader_df['delta'].cumsum() + + # 检查文件是否存在 + json_file_path = f"traderdata/{instrument_id}_ofdata.json" + + # 确保待保存的新数据中datetime字段是格式化的日期时间字符串 + if 'datetime' in trader_df.columns: + # 无论什么类型,都统一转换为字符串格式 + trader_df['datetime'] = trader_df['datetime'].astype(str) + + if os.path.exists(json_file_path): + try: + # 读取现有数据 + existing_df = pd.read_json(json_file_path, lines=True) + + # 确保现有数据中的datetime字段是字符串类型 + if 'datetime' in existing_df.columns: + existing_df['datetime'] = existing_df['datetime'].astype(str) + + # 合并新数据 + combined_df = pd.concat([existing_df, trader_df.tail(1)], ignore_index=True) + # 保存合并后的数据,使用lines=True确保每行是独立的JSON对象 + combined_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + except Exception as e: + print(f"读取或保存JSON文件时出错: {e}") + # 如果读取出错,直接保存当前数据 + trader_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + else: + # 创建新文件并保存整个DataFrame + trader_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + + # 更新跟踪止损价格 - 兼容旧版本代码 + if self.long_trailing_stop_price >0 and self.pos>0: + self.long_trailing_stop_price = trader_df['low'].iloc[-1] if self.long_trailing_stop_price0 and self.pos<0: + self.short_trailing_stop_price = trader_df['high'].iloc[-1] if trader_df['high'].iloc[-1] self.trader_rows: + AI_THREAD_RUNNING = True + ai_thread = threading.Thread( + target=self.background_model_call, + args=(trader_df, instrument_id) + ) + ai_thread.daemon = True # 设置为守护线程,主程序退出时自动结束 + ai_thread.start() + print("启动AI分析线程...") + + print(trader_df['datetime']) + self.cont_df=len(trader_df) + else: + time.sleep(0.5) + + def background_model_call(self, data_df, instrument_id): + """ + 在后台线程中调用大模型,并将交易信号放入队列 + + Args: + data_df: 包含订单流数据的DataFrame + instrument_id: 合约ID + """ + global AI_THREAD_RUNNING + + start_time = datetime.now() + log_message = f"\n===== 开始AI分析 [{start_time.strftime('%Y-%m-%d %H:%M:%S')}] =====" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = f"正在分析合约: {instrument_id}" + print(log_message) + AI_LOGGER.info(log_message) + + try: + # 复制DataFrame以避免在不同线程间共享数据可能导致的问题 + df_copy = data_df.copy() + + # 输出分析的数据行数 + log_message = f"分析数据行数: {len(df_copy)}" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = f"最新价格: {df_copy['close'].iloc[-1] if len(df_copy) > 0 else 'N/A'}" + print(log_message) + AI_LOGGER.info(log_message) + + # 调用大模型获取交易信号 + trading_signal = call_deepseek_model(df_copy, self) # 传递self参数 + + # 计算分析耗时 + end_time = datetime.now() + elapsed = (end_time - start_time).total_seconds() + + # 将交易信号和合约ID一起放入队列 + signal_data = { + 'signal': trading_signal, + 'instrument_id': instrument_id, + 'timestamp': end_time # 使用结束时间作为时间戳 + } + + AI_SIGNAL_QUEUE.put(signal_data) + + log_message = f"AI模型分析完成,结果已放入队列,耗时: {elapsed:.2f}秒" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = f"分析结果: {trading_signal}" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = "===== AI分析完成 =====" + print(log_message + "\n") + AI_LOGGER.info(log_message) + except Exception as e: + end_time = datetime.now() + elapsed = (end_time - start_time).total_seconds() + + log_message = f"AI模型分析线程出现异常: {e}" + print(log_message) + AI_LOGGER.error(log_message) + + print(f"异常详情:") + import traceback + error_traceback = traceback.format_exc() + AI_LOGGER.error(f"异常详情:\n{error_traceback}") + traceback.print_exc() + + log_message = f"分析失败,耗时: {elapsed:.2f}秒" + print(log_message) + AI_LOGGER.error(log_message) + + log_message = "===== AI分析异常结束 =====" + print(log_message + "\n") + AI_LOGGER.error(log_message) + finally: + # 标记线程已完成 + AI_THREAD_RUNNING = False + + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + def check_and_process_ai_signals(self, data): + """检查并处理AI产生的交易信号""" + if AI_SIGNAL_QUEUE.empty(): + return + + # 从队列中获取信号 + signal_data = AI_SIGNAL_QUEUE.get() + trading_signal = signal_data['signal'] + instrument_id = signal_data['instrument_id'] + signal_time = signal_data['timestamp'] + + # 验证合约ID是否匹配,不匹配则放回队列 + if instrument_id != data['InstrumentID'].decode(): + AI_SIGNAL_QUEUE.put(signal_data) + return + + # 提取交易信号数据 + action = trading_signal.get('action', '不操作') + confidence = trading_signal.get('confidence', 0) + reason = trading_signal.get('reason', '') + stop_loss = trading_signal.get('stop_loss', 0) + take_profit = trading_signal.get('take_profit', 0) + trailing_percent = trading_signal.get('trailing_percent', 0) + + # 记录日志 + log_lines = [ + f"\n===== 执行AI模型交易信号 [{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] =====", + f"信号生成时间: {signal_time.strftime('%Y-%m-%d %H:%M:%S')}", + f"信号类型: {action}", + f"置信度: {confidence}", + f"理由: {reason}" + ] + for line in log_lines: + print(line) + SIGNAL_LOGGER.info(line) + + # 确保合约在止损止盈字典中 + self._ensure_stop_order_dict(instrument_id) + current_stops = self.stop_order_dict[instrument_id] + + # 处理跟踪止损百分比更新 + self._update_trailing_stop_percent(trailing_percent, instrument_id, data) + + # 只有当置信度大于等于6时才执行交易 + if confidence < 6: + print(f"信号置信度{confidence}低于执行阈值(6),不执行交易") + print("===== 交易信号处理完成 =====\n") + return + + print(f"开始执行交易,当前价格: 买一{data['BidPrice1']} / 卖一{data['AskPrice1']}") + + # 根据不同交易行为执行相应操作 + if action == '开多' and current_stops['long']['position'] <= 0: + self._handle_open_long(data, instrument_id, stop_loss, take_profit) + + elif action == '开空' and current_stops['short']['position'] <= 0: + self._handle_open_short(data, instrument_id, stop_loss, take_profit) + + elif action == '平多' and current_stops['long']['position'] > 0: + self._handle_close_long(data, instrument_id) + + elif action == '平空' and current_stops['short']['position'] > 0: + self._handle_close_short(data, instrument_id) + + elif action == '平多开空' and current_stops['long']['position'] > 0: + self._handle_close_long_open_short(data, instrument_id, stop_loss, take_profit) + + elif action == '平空开多' and current_stops['short']['position'] > 0: + self._handle_close_short_open_long(data, instrument_id, stop_loss, take_profit) + + elif action == '不操作': + self._handle_adjust_stop_levels(instrument_id, stop_loss, take_profit) + + print("===== 交易信号执行完成 =====\n") + + def _ensure_stop_order_dict(self, instrument_id): + """确保指定合约在止损止盈字典中存在""" + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + def _update_trailing_stop_percent(self, trailing_percent, instrument_id, data): + """更新跟踪止损百分比""" + if not (0.0001 <= trailing_percent <= 0.001): + return + + old_percent = self.trailing_stop_percent + self.trailing_stop_percent = trailing_percent + log_message = f"更新跟踪止损百分比参数: {old_percent*100:.3f}% -> {trailing_percent*100:.3f}%" + STOPLOSS_LOGGER.info(log_message) + + current_stops = self.stop_order_dict[instrument_id] + + # 更新多头持仓的跟踪止损价 + if current_stops['long']['position'] > 0: + new_trailing_stop = float(data['BidPrice1']) * (1 - self.trailing_stop_percent) + old_trailing_stop = current_stops['long']['trailing_stop'] + + if new_trailing_stop > old_trailing_stop: + self.update_stop_order_dict(instrument_id, 'long', None, None, None, None, new_trailing_stop) + self.long_trailing_stop_price = new_trailing_stop # 兼容旧代码 + self.save_to_csv(instrument_id) + + # 更新空头持仓的跟踪止损价 + elif current_stops['short']['position'] > 0: + new_trailing_stop = float(data['AskPrice1']) * (1 + self.trailing_stop_percent) + old_trailing_stop = current_stops['short']['trailing_stop'] + + if new_trailing_stop < old_trailing_stop or old_trailing_stop == 0: + self.update_stop_order_dict(instrument_id, 'short', None, None, None, None, new_trailing_stop) + self.short_trailing_stop_price = new_trailing_stop # 兼容旧代码 + self.save_to_csv(instrument_id) + + def _handle_open_long(self, data, instrument_id, stop_loss, take_profit): + """处理开多头仓位""" + # 如果持有空头头寸,先平空 + current_stops = self.stop_order_dict[instrument_id] + if current_stops['short']['position'] > 0: + print('执行平空操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['AskPrice1']+self.py, + current_stops['short']['position'], + b'0', b'3') + self.clear_position_info(instrument_id, 'short') + + # 开多 + print('执行开多操作') + entry_price = float(data['AskPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price+self.py, self.Lots, b'0', b'0') + + # 设置止损止盈 + sl_price = stop_loss + tp_price = take_profit + initial_trailing_stop = entry_price * (1 - self.trailing_stop_percent) + + # 记录止损止盈设置 + STOPLOSS_LOGGER.info(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新持仓信息 + self.update_stop_order_dict(instrument_id, 'long', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = 1 # 更新全局持仓状态 + + # 兼容旧代码 + self.long_trailing_stop_price = initial_trailing_stop + self.sl_long_price = sl_price + self.save_to_csv(instrument_id) + + def _handle_open_short(self, data, instrument_id, stop_loss, take_profit): + """处理开空头仓位""" + # 如果持有多头头寸,先平多 + current_stops = self.stop_order_dict[instrument_id] + if current_stops['long']['position'] > 0: + print('执行平多操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['BidPrice1']-self.py, + current_stops['long']['position'], + b'1', b'3') + self.clear_position_info(instrument_id, 'long') + + # 开空 + print('执行开空操作') + entry_price = float(data['BidPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price-self.py, self.Lots, b'1', b'0') + + # 设置止损止盈 + sl_price = stop_loss + tp_price = take_profit + initial_trailing_stop = entry_price * (1 + self.trailing_stop_percent) + + # 记录止损止盈设置 + STOPLOSS_LOGGER.info(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新持仓信息 + self.update_stop_order_dict(instrument_id, 'short', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = -1 # 更新全局持仓状态 + + # 兼容旧代码 + self.short_trailing_stop_price = initial_trailing_stop + self.sl_shor_price = sl_price + self.save_to_csv(instrument_id) + + def _handle_close_long(self, data, instrument_id): + """处理平多头仓位""" + current_stops = self.stop_order_dict[instrument_id] + print('执行平多操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['BidPrice1']-self.py, + current_stops['long']['position'], + b'1', b'3') + self.clear_position_info(instrument_id, 'long') + + def _handle_close_short(self, data, instrument_id): + """处理平空头仓位""" + current_stops = self.stop_order_dict[instrument_id] + print('执行平空操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['AskPrice1']+self.py, + current_stops['short']['position'], + b'0', b'3') + self.clear_position_info(instrument_id, 'short') + + def _handle_close_long_open_short(self, data, instrument_id, stop_loss, take_profit): + """处理平多开空操作""" + print('执行平多开空操作') + + # 第一步:平多 + self._handle_close_long(data, instrument_id) + + # 第二步:开空 + print('2. 执行开空操作') + entry_price = float(data['BidPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price-self.py, self.Lots, b'1', b'0') + + # 设置止损止盈 + sl_price = stop_loss + tp_price = take_profit + initial_trailing_stop = entry_price * (1 + self.trailing_stop_percent) + + # 记录止损止盈设置 + STOPLOSS_LOGGER.info(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新持仓信息 + self.update_stop_order_dict(instrument_id, 'short', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = -1 # 更新全局持仓状态 + + # 兼容旧代码 + self.short_trailing_stop_price = initial_trailing_stop + self.sl_shor_price = sl_price + self.save_to_csv(instrument_id) + + def _handle_close_short_open_long(self, data, instrument_id, stop_loss, take_profit): + """处理平空开多操作""" + print('执行平空开多操作') + + # 第一步:平空 + self._handle_close_short(data, instrument_id) + + # 第二步:开多 + print('2. 执行开多操作') + entry_price = float(data['AskPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price+self.py, self.Lots, b'0', b'0') + + # 设置止损止盈 + sl_price = stop_loss + tp_price = take_profit + initial_trailing_stop = entry_price * (1 - self.trailing_stop_percent) + + # 记录止损止盈设置 + STOPLOSS_LOGGER.info(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新持仓信息 + self.update_stop_order_dict(instrument_id, 'long', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = 1 # 更新全局持仓状态 + + # 兼容旧代码 + self.long_trailing_stop_price = initial_trailing_stop + self.sl_long_price = sl_price + self.save_to_csv(instrument_id) + + def _handle_adjust_stop_levels(self, instrument_id, stop_loss, take_profit): + """调整止损止盈价格""" + current_stops = self.stop_order_dict[instrument_id] + + # 调整止损价 + if stop_loss > 0: + if current_stops['long']['position'] > 0: # 多头持仓 + self.update_stop_order_dict(instrument_id, 'long', None, None, stop_loss, None, None) + print(f'已调整多头止损价: {stop_loss}') + self.sl_long_price = stop_loss # 兼容旧代码 + self.save_to_csv(instrument_id) + elif current_stops['short']['position'] > 0: # 空头持仓 + self.update_stop_order_dict(instrument_id, 'short', None, None, stop_loss, None, None) + print(f'已调整空头止损价: {stop_loss}') + self.sl_shor_price = stop_loss # 兼容旧代码 + self.save_to_csv(instrument_id) + + # 调整止盈价 + if take_profit > 0: + if current_stops['long']['position'] > 0: # 多头持仓 + self.update_stop_order_dict(instrument_id, 'long', None, None, None, take_profit, None) + print(f'已调整多头止盈价: {take_profit}') + self.save_to_csv(instrument_id) + elif current_stops['short']['position'] > 0: # 空头持仓 + self.update_stop_order_dict(instrument_id, 'short', None, None, None, take_profit, None) + print(f'已调整空头止盈价: {take_profit}') + self.save_to_csv(instrument_id) + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + def format_data_for_llm(self, df): + """ + 将DataFrame格式化为适合LLM分析的文本格式,包含历史交易信息 + """ + # 提取最近几条记录 + recent_data = df.tail(self.trader_rows) + + # 构建基本信息 + data_text = "订单流数据分析:\n\n" + + # 提取最新行情数据 + instrument_id = recent_data['symbol'].iloc[-1] + + # 添加最新价格和交易量信息 + data_text += f"当前时间: {recent_data['datetime'].iloc[-1]}\n" + data_text += f"当前价格: {recent_data['close'].iloc[-1]}\n" + data_text += f"开盘价: {recent_data['open'].iloc[-1]}\n" + data_text += f"最高价: {recent_data['high'].iloc[-1]}\n" + data_text += f"最低价: {recent_data['low'].iloc[-1]}\n" + data_text += f"成交量: {recent_data['volume'].iloc[-1]}\n" + + # 计算价格趋势 + if len(recent_data) >= 5: + price_trend = recent_data['close'].pct_change().tail(5).mean() * 100 + data_text += f"价格短期趋势: {'上涨' if price_trend > 0 else '下跌'} ({price_trend:.2f}%)\n" + + # 计算价格波动性 + if len(recent_data) >= 5: + volatility = recent_data['close'].pct_change().tail(5).std() * 100 + data_text += f"价格波动性: {volatility:.2f}%\n" + + # 添加支撑和阻力位分析 + recent_high = recent_data['high'].max() + recent_low = recent_data['low'].min() + data_text += f"近期阻力位: {recent_high}\n" + data_text += f"近期支撑位: {recent_low}\n" + + # 添加均线分析 - 计算5、10、20均线 + if len(df) >= 20: + # 计算均线 + ma5 = df['close'].rolling(5).mean().iloc[-1] + ma10 = df['close'].rolling(10).mean().iloc[-1] + ma20 = df['close'].rolling(20).mean().iloc[-1] + + data_text += f"MA5: {ma5:.2f}\n" + data_text += f"MA10: {ma10:.2f}\n" + data_text += f"MA20: {ma20:.2f}\n" + + # 判断均线形态 + if abs(ma5 - ma10) / ma10 < 0.01 and abs(ma10 - ma20) / ma20 < 0.01: + ma_pattern = "均线粘合" + elif ma5 > ma10 and ma10 > ma20: + ma_pattern = "多头排列" + elif ma5 < ma10 and ma10 < ma20: + ma_pattern = "空头排列" + elif ma5 > ma10 and ma10 < ma20: + ma_pattern = "金叉形态" + elif ma5 < ma10 and ma10 > ma20: + ma_pattern = "死叉形态" + else: + ma_pattern = "无明显形态" + + data_text += f"均线形态: {ma_pattern}\n" + + # 价格与均线关系 + current_price = df['close'].iloc[-1] + data_text += f"价格相对MA5: {'上方' if current_price > ma5 else '下方'} ({(current_price/ma5-1)*100:.2f}%)\n" + data_text += f"价格相对MA10: {'上方' if current_price > ma10 else '下方'} ({(current_price/ma10-1)*100:.2f}%)\n" + data_text += f"价格相对MA20: {'上方' if current_price > ma20 else '下方'} ({(current_price/ma20-1)*100:.2f}%)\n" + + # 日内超涨超跌分析 + if len(df) >= 20: + # 计算日内振幅 + daily_high = df['high'].iloc[-20:].max() + daily_low = df['low'].iloc[-20:].min() + daily_range = (daily_high - daily_low) / daily_low * 100 + + # 当前价格在日内范围的位置 + current_in_range = (df['close'].iloc[-1] - daily_low) / (daily_high - daily_low) * 100 if (daily_high - daily_low) > 0 else 50 + + data_text += f"日内振幅: {daily_range:.2f}%\n" + data_text += f"价格在日内范围的位置: {current_in_range:.2f}% (0%为日低, 100%为日高)\n" + + # 判断超涨超跌 + if current_in_range > 85: + data_text += "日内状态: 可能超涨\n" + elif current_in_range < 15: + data_text += "日内状态: 可能超跌\n" + else: + data_text += "日内状态: 正常区间\n" + + # 形态识别 + if len(df) >= 20: + # 简单K线形态识别 + recent_k = df.tail(5).copy() + + # 计算实体和影线 + recent_k['body'] = abs(recent_k['close'] - recent_k['open']) + recent_k['upper_shadow'] = recent_k.apply(lambda x: x['high'] - max(x['open'], x['close']), axis=1) + recent_k['lower_shadow'] = recent_k.apply(lambda x: min(x['open'], x['close']) - x['low'], axis=1) + + # 最新K线特征 + latest_k = recent_k.iloc[-1] + prev_k = recent_k.iloc[-2] if len(recent_k) > 1 else None + + data_text += "\nK线形态分析:\n" + + # 判断最新K线类型 + if latest_k['body'] == 0: + k_type = "十字星" + elif latest_k['upper_shadow'] > 2 * latest_k['body'] and latest_k['lower_shadow'] < 0.5 * latest_k['body']: + k_type = "上影线长" + elif latest_k['lower_shadow'] > 2 * latest_k['body'] and latest_k['upper_shadow'] < 0.5 * latest_k['body']: + k_type = "下影线长" + elif latest_k['close'] > latest_k['open'] and latest_k['body'] > np.mean(recent_k['body']): + k_type = "大阳线" + elif latest_k['close'] < latest_k['open'] and latest_k['body'] > np.mean(recent_k['body']): + k_type = "大阴线" + elif latest_k['close'] > latest_k['open']: + k_type = "小阳线" + elif latest_k['close'] < latest_k['open']: + k_type = "小阴线" + else: + k_type = "普通K线" + + data_text += f"最新K线类型: {k_type}\n" + + # 判断简单组合形态 + if prev_k is not None: + if prev_k['close'] < prev_k['open'] and latest_k['close'] > latest_k['open'] and latest_k['open'] <= prev_k['close'] and latest_k['close'] > prev_k['open']: + data_text += "组合形态: 可能构成看涨吞没形态\n" + elif prev_k['close'] > prev_k['open'] and latest_k['close'] < latest_k['open'] and latest_k['open'] >= prev_k['close'] and latest_k['close'] < prev_k['open']: + data_text += "组合形态: 可能构成看跌吞没形态\n" + elif prev_k['close'] < prev_k['open'] and latest_k['close'] > latest_k['open'] and latest_k['body'] > 1.5 * prev_k['body']: + data_text += "组合形态: 可能构成看涨势能增强\n" + elif prev_k['close'] > prev_k['open'] and latest_k['close'] < latest_k['open'] and latest_k['body'] > 1.5 * prev_k['body']: + data_text += "组合形态: 可能构成看跌势能增强\n" + + # 添加订单流特定数据 + data_text += f"\n订单流净值: {recent_data['delta'].iloc[-1]}\n" + data_text += f"订单流累计值: {recent_data['delta累计'].iloc[-1] if 'delta累计' in recent_data.columns else '无数据'}\n" + data_text += f"堆积指标: {recent_data['dj'].iloc[-1]}\n" + + # 添加日均线数据 + data_text += f"日均线: {recent_data['dayma'].iloc[-1] if 'dayma' in recent_data.columns else '无数据'}\n" + + # 添加价格与日均线的关系 + if 'dayma' in recent_data.columns: + price_above_ma = recent_data['close'].iloc[-1] > recent_data['dayma'].iloc[-1] + data_text += f"价格位于日均线: {'上方' if price_above_ma else '下方'}\n" + + # 订单流全面分析 + data_text += "\n订单流详细分析:\n" + + # 计算订单流趋势 + if len(recent_data) >= 5: + delta_values = recent_data['delta'].values + delta_trend = np.mean(np.diff(delta_values)) if len(delta_values) > 1 else 0 + data_text += f"订单流趋势: {'增强中' if delta_trend > 0 else '减弱中'} (变化率: {delta_trend:.2f})\n" + + # 计算订单流强度(使用绝对值的平均值) + delta_strength = np.mean(np.abs(recent_data['delta'].values)) + data_text += f"订单流强度: {delta_strength:.2f}\n" + + # 订单流指标超涨超跌分析 + if len(df) >= 20: + delta_values = df['delta'].iloc[-20:].values + delta_mean = np.mean(delta_values) + delta_std = np.std(delta_values) + current_delta = df['delta'].iloc[-1] + + # Z分数计算 + if delta_std > 0: + delta_z = (current_delta - delta_mean) / delta_std + data_text += f"订单流偏离度(Z分数): {delta_z:.2f}\n" + + if delta_z > 2: + data_text += "订单流状态: 可能超买\n" + elif delta_z < -2: + data_text += "订单流状态: 可能超卖\n" + else: + data_text += "订单流状态: 正常区间\n" + + # 买卖力量对比 + if 'bid_v' in recent_data.columns and 'ask_v' in recent_data.columns: + bid_power = recent_data['bid_v'].mean() + ask_power = recent_data['ask_v'].mean() + power_ratio = bid_power / ask_power if ask_power != 0 else float('inf') + data_text += f"买卖比例: {power_ratio:.2f} (>1买方强势,<1卖方强势)\n" + + # 订单流累计趋势 + if 'delta累计' in recent_data.columns and len(recent_data) >= 2: + cumulative_start = recent_data['delta累计'].iloc[0] + cumulative_end = recent_data['delta累计'].iloc[-1] + cumulative_change = cumulative_end - cumulative_start + data_text += f"累计订单流变化: {cumulative_change:.2f} (从 {cumulative_start:.2f} 到 {cumulative_end:.2f})\n" + + # 订单流波动性 + delta_volatility = np.std(recent_data['delta'].values) + data_text += f"订单流波动性: {delta_volatility:.2f}\n" + + # 订单流与价格相关性 + if len(recent_data) >= 10: # 确保有足够数据计算相关性 + price_changes = recent_data['close'].pct_change().dropna() + delta_changes = recent_data['delta'].iloc[1:].reset_index(drop=True) # 对齐索引 + if len(price_changes) > 0 and len(delta_changes) == len(price_changes): + try: + correlation = np.corrcoef(price_changes, delta_changes)[0, 1] if len(price_changes) > 1 else 0 + data_text += f"订单流与价格相关性: {correlation:.2f}\n" + data_text += f"相关性解读: {'强正相关' if correlation > 0.7 else '正相关' if correlation > 0.3 else '弱相关' if correlation > -0.3 else '负相关' if correlation > -0.7 else '强负相关'}\n" + except: + data_text += "订单流与价格相关性: 计算错误\n" + + # 订单流势能分析(最近几分钟的方向) + recent_deltas = recent_data['delta'].tail(5).values + positive_count = sum(1 for x in recent_deltas if x > 0) + negative_count = sum(1 for x in recent_deltas if x < 0) + data_text += f"最近订单流方向: {'多头主导' if positive_count > negative_count else '空头主导' if positive_count < negative_count else '方向不明'} ({positive_count}正/{negative_count}负)\n" + + # 订单流强弱可视化 + delta_last_10 = recent_data['delta'].tail(10).values # 使用更多数据计算标准差 + delta_std = np.std(delta_last_10) + delta_last_5 = recent_data['delta'].tail(5).values + strength_visual = "" + for val in delta_last_5: + if val > 2 * delta_std: # 大于2个标准差 + strength_visual += "↑↑ " + elif val > 0.5 * delta_std: # 大于0.5个标准差 + strength_visual += "↑ " + elif val < -2 * delta_std: # 小于-2个标准差 + strength_visual += "↓↓ " + elif val < -0.5 * delta_std: # 小于-0.5个标准差 + strength_visual += "↓ " + else: + strength_visual += "→ " + data_text += f"订单流强弱可视化 (最近5分钟): {strength_visual}\n" + data_text += f"当前delta标准差: {delta_std:.2f}\n" + + # 添加最近几条记录的趋势 + data_text += "\n最近几条记录的趋势:\n" + + # 添加最近5条记录的关键指标变化 + for i in range(min(5, len(recent_data))): + idx = -(i+1) + data_text += f"记录 {i+1}: 时间={recent_data['datetime'].iloc[idx]}, 价格={recent_data['close'].iloc[idx]}, " + data_text += f"订单流净值={recent_data['delta'].iloc[idx]}, 堆积={recent_data['dj'].iloc[idx]}\n" + + # 添加当前持仓信息,使用新的止盈止损字典 + data_text += "\n当前持仓状态:\n" + + # 获取该合约的止盈止损信息 + stops = self.stop_order_dict.get(instrument_id, { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + }) + + # 获取多头和空头持仓信息 + long_pos = stops.get('long', {}).get('position', 0) + short_pos = stops.get('short', {}).get('position', 0) + + # 判断当前持仓方向 + if long_pos > 0: + data_text += f"持仓方向: 多头\n" + data_text += f"持仓数量: {long_pos}\n" + data_text += f"开仓价格: {stops['long']['entry_price']}\n" + data_text += f"止损价格: {stops['long']['stop_loss']}\n" + data_text += f"止盈价格: {stops['long']['take_profit']}\n" + data_text += f"跟踪止损价: {stops['long']['trailing_stop']}\n" + + # 计算当前盈亏 + current_price = recent_data['close'].iloc[-1] + profit_percent = (current_price - stops['long']['entry_price']) / stops['long']['entry_price'] * 100 + data_text += f"当前盈亏: {profit_percent:.2f}%\n" + elif short_pos > 0: + data_text += f"持仓方向: 空头\n" + data_text += f"持仓数量: {short_pos}\n" + data_text += f"开仓价格: {stops['short']['entry_price']}\n" + data_text += f"止损价格: {stops['short']['stop_loss']}\n" + data_text += f"止盈价格: {stops['short']['take_profit']}\n" + data_text += f"跟踪止损价: {stops['short']['trailing_stop']}\n" + + # 计算当前盈亏 + current_price = recent_data['close'].iloc[-1] + profit_percent = (stops['short']['entry_price'] - current_price) / stops['short']['entry_price'] * 100 + data_text += f"当前盈亏: {profit_percent:.2f}%\n" + else: + data_text += "持仓方向: 空仓\n" + data_text += "持仓数量: 0\n" + + # 添加风险管理参数信息 + data_text += "\n风险管理参数设置:\n" + data_text += f"固定止损百分比: {self.fixed_stop_loss_percent * 100:.2f}%\n" + data_text += f"跟踪止损百分比: {self.trailing_stop_percent * 100:.2f}%\n" + + # 添加交易建议提示 + data_text += "\n请根据以上信息,分析当前市场状态并给出交易建议。需要考虑:\n" + data_text += "1. 当前持仓状态是否合理\n" + data_text += "2. 是否需要调整止损止盈位置\n" + data_text += "3. 是否需要平仓或反手\n" + data_text += "4. 是否适合开新仓\n" + data_text += "5. 是否需要调整跟踪止损百分比参数(范围建议:0.0001-0.001)\n" + data_text += "6. 是否出现抄底摸顶机会\n" + data_text += "7. 是否存在日内波段交易机会\n" + + return data_text + + def update_stop_order_dict(self, instrument_id, direction, position, entry_price=None, stop_loss=None, take_profit=None, trailing_stop=None): + """更新止损止盈信息""" + # 初始化合约的止损止盈字典 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + # 获取当前值 + current_values = self.stop_order_dict[instrument_id][direction].copy() + + # 更新值 + if position is not None: + self.stop_order_dict[instrument_id][direction]['position'] = position + if entry_price is not None: + self.stop_order_dict[instrument_id][direction]['entry_price'] = entry_price + if stop_loss is not None: + self.stop_order_dict[instrument_id][direction]['stop_loss'] = stop_loss + if take_profit is not None: + self.stop_order_dict[instrument_id][direction]['take_profit'] = take_profit + if trailing_stop is not None: + self.stop_order_dict[instrument_id][direction]['trailing_stop'] = trailing_stop + + # 记录变化值 + updated_values = self.stop_order_dict[instrument_id][direction] + change_log = f"更新{instrument_id} {direction}头寸止损止盈: " + changes = [] + + if position is not None and position != current_values['position']: + changes.append(f"仓位: {current_values['position']} -> {position}") + if entry_price is not None and entry_price != current_values['entry_price']: + changes.append(f"入场价: {current_values['entry_price']} -> {entry_price}") + if stop_loss is not None and stop_loss != current_values['stop_loss']: + changes.append(f"止损价: {current_values['stop_loss']} -> {stop_loss}") + if take_profit is not None and take_profit != current_values['take_profit']: + changes.append(f"止盈价: {current_values['take_profit']} -> {take_profit}") + if trailing_stop is not None and trailing_stop != current_values['trailing_stop']: + changes.append(f"跟踪止损价: {current_values['trailing_stop']} -> {trailing_stop}") + + if changes: + change_log += ", ".join(changes) + STOPLOSS_LOGGER.info(change_log) + + # 保存到文件 + self.save_stop_orders_to_file(instrument_id) + + def save_stop_orders_to_file(self, instrument_id): + """将止盈止损信息保存到文件""" + # 使用完整的合约代码 + symbol = str(instrument_id) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}_stops.json") + + # 如果文件夹不存在则创建 + if not os.path.exists(folder_path): + os.makedirs(folder_path, exist_ok=True) + + # 保存字典到JSON文件 + with open(file_path, 'w') as f: + json.dump(self.stop_order_dict.get(instrument_id, {}), f, indent=4) + + # 获取该合约的止盈止损信息 + stops = self.stop_order_dict.get(instrument_id, { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + }) + + # 打印详细信息 + print(f"\n===== 已更新止盈止损信息: {instrument_id} =====") + print(f"多头持仓: {stops['long']['position']} 手") + print(f"多头入场价: {stops['long']['entry_price']}") + print(f"多头止损价: {stops['long']['stop_loss']}") + print(f"多头止盈价: {stops['long']['take_profit']}") + print(f"多头跟踪止损: {stops['long']['trailing_stop']}") + print(f"空头持仓: {stops['short']['position']} 手") + print(f"空头入场价: {stops['short']['entry_price']}") + print(f"空头止损价: {stops['short']['stop_loss']}") + print(f"空头止盈价: {stops['short']['take_profit']}") + print(f"空头跟踪止损: {stops['short']['trailing_stop']}") + print("======================================\n") + + def load_stop_orders_from_file(self, instrument_id): + """从文件加载止盈止损信息""" + # 如果合约ID已经在字典中,直接返回,避免重复加载 + if instrument_id in self.stop_order_dict: + return True + + # 使用完整的合约代码 + symbol = str(instrument_id) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}_stops.json") + + if os.path.exists(file_path): + try: + with open(file_path, 'r') as f: + stops_data = json.load(f) + + # 更新字典 + self.stop_order_dict[instrument_id] = stops_data + print(f"首次加载止盈止损信息: {instrument_id}") + return True + except Exception as e: + print(f"加载止盈止损信息失败: {e}") + + # 如果文件不存在,初始化空字典结构 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + print(f"初始化止盈止损结构: {instrument_id}") + + return False + + def check_stop_conditions(self, data): + """检查是否满足止盈止损条件""" + instrument_id = data['InstrumentID'].decode() + + # 如果该合约不在止盈止损字典中,直接返回 + if instrument_id not in self.stop_order_dict: + return + + current_bid = float(data['BidPrice1']) # 当前买价 + current_ask = float(data['AskPrice1']) # 当前卖价 + + stops = self.stop_order_dict[instrument_id] + + # 检查多头止盈止损 + if stops['long']['position'] > 0: + entry_price = stops['long']['entry_price'] # 获取开仓价 + + # 检查止损 + if stops['long']['stop_loss'] > 0 and current_bid <= stops['long']['stop_loss']: + print(f"触发多头止损: {instrument_id}, 价格: {current_bid}, 止损价: {stops['long']['stop_loss']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 检查跟踪止损 - 确保只在价格高于开仓价且低于跟踪止损价时触发 + elif stops['long']['trailing_stop'] > 0 and current_bid < stops['long']['trailing_stop'] and current_bid > entry_price: + print(f"触发多头跟踪止损: {instrument_id}, 价格: {current_bid}, 跟踪止损价: {stops['long']['trailing_stop']}, 开仓价: {entry_price}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 检查止盈 + elif stops['long']['take_profit'] > 0 and current_bid >= stops['long']['take_profit']: + print(f"触发多头止盈: {instrument_id}, 价格: {current_bid}, 止盈价: {stops['long']['take_profit']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 更新跟踪止损价 - 严格限制只在价格高于开仓价时更新 + elif current_bid > entry_price and stops['long']['trailing_stop'] > 0: + # 只有当前价格比之前设置的跟踪止损价高一定幅度时才更新 + new_trailing_stop = current_bid * (1 - self.trailing_stop_percent) + + # 判断是否应该更新跟踪止损价 + should_update = False + + # 条件1: 新的跟踪止损价必须高于当前的跟踪止损价(跟踪止损上移) + if new_trailing_stop > stops['long']['trailing_stop']: + # 条件2: 如果存在止损价(非0),则新的跟踪止损价不应该触及人工设置的止损价 + if stops['long']['stop_loss'] == 0 or new_trailing_stop < stops['long']['stop_loss']: + should_update = True + + if should_update: + self.update_stop_order_dict(instrument_id, 'long', None, None, None, None, new_trailing_stop) + print(f"更新多头跟踪止损: {instrument_id}, 新跟踪止损价: {new_trailing_stop}, 开仓价: {entry_price}") + + # 检查空头止盈止损 + if stops['short']['position'] > 0: + entry_price = stops['short']['entry_price'] # 获取开仓价 + + # 检查止损 + if stops['short']['stop_loss'] > 0 and current_ask >= stops['short']['stop_loss']: + print(f"触发空头止损: {instrument_id}, 价格: {current_ask}, 止损价: {stops['short']['stop_loss']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + self.pos = 0 # 更新全局持仓状态 + + # 检查跟踪止损 - 确保只在价格低于开仓价且高于跟踪止损价时触发 + elif stops['short']['trailing_stop'] > 0 and current_ask > stops['short']['trailing_stop'] and current_ask < entry_price: + print(f"触发空头跟踪止损: {instrument_id}, 价格: {current_ask}, 跟踪止损价: {stops['short']['trailing_stop']}, 开仓价: {entry_price}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + self.pos = 0 # 更新全局持仓状态 + + # 检查止盈 + elif stops['short']['take_profit'] > 0 and current_ask <= stops['short']['take_profit']: + print(f"触发空头止盈: {instrument_id}, 价格: {current_ask}, 止盈价: {stops['short']['take_profit']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + self.pos = 0 # 更新全局持仓状态 + + # 更新跟踪止损价 - 严格限制只在价格低于开仓价时更新 + elif current_ask < entry_price and stops['short']['trailing_stop'] > 0: + # 只有当前价格比之前设置的跟踪止损价低一定幅度时才更新 + new_trailing_stop = current_ask * (1 + self.trailing_stop_percent) + + # 判断是否应该更新跟踪止损价 + should_update = False + + # 条件1: 新的跟踪止损价必须低于当前的跟踪止损价(跟踪止损下移)或当前跟踪止损价为0 + if new_trailing_stop < stops['short']['trailing_stop'] or stops['short']['trailing_stop'] == 0: + # 条件2: 如果存在止损价(非0),则新的跟踪止损价不应该触及人工设置的止损价 + if stops['short']['stop_loss'] == 0 or new_trailing_stop > stops['short']['stop_loss']: + should_update = True + + if should_update: + self.update_stop_order_dict(instrument_id, 'short', None, None, None, None, new_trailing_stop) + print(f"更新空头跟踪止损: {instrument_id}, 新跟踪止损价: {new_trailing_stop}, 开仓价: {entry_price}") + + #保存数据 + + def clear_position_info(self, instrument_id, direction): + """ + 清空指定合约和方向的持仓信息 + + Args: + instrument_id: 合约ID + direction: 方向 'long' 或 'short' 或 'all' + """ + # 确保合约ID在字典中存在 + if instrument_id not in self.stop_order_dict: + return + + print(f"开始清空{instrument_id}的{direction}持仓信息") + if direction == 'long' or direction == 'all': + # 清空多头持仓信息 + self.stop_order_dict[instrument_id]['long'] = { + 'position': 0, + 'entry_price': 0, + 'stop_loss': 0, + 'take_profit': 0, + 'trailing_stop': 0 + } + # 兼容旧代码 + if direction == 'long': + self.long_trailing_stop_price = 0 + self.sl_long_price = 0 + + if direction == 'short' or direction == 'all': + # 清空空头持仓信息 + self.stop_order_dict[instrument_id]['short'] = { + 'position': 0, + 'entry_price': 0, + 'stop_loss': 0, + 'take_profit': 0, + 'trailing_stop': 0 + } + # 兼容旧代码 + if direction == 'short': + self.short_trailing_stop_price = 0 + self.sl_shor_price = 0 + + # 同步全局持仓状态 + if direction == 'all': + self.pos = 0 + self.long_trailing_stop_price = 0 + self.short_trailing_stop_price = 0 + self.sl_long_price = 0 + self.sl_shor_price = 0 + + # 保存到文件 + try: + self.save_stop_orders_to_file(instrument_id) + self.save_to_csv(instrument_id) + print(f"已成功清空{instrument_id}的{direction}持仓信息并保存") + except Exception as e: + print(f"清空持仓信息时出错: {e}") + +# 修改call_deepseek_model函数,移除JSON格式输出的要求,改为从普通文本响应中提取交易信号。 +def call_deepseek_model(data_df, trader_instance, max_retries=2): + """ + 调用qwq-32b大模型分析订单流数据 + + Args: + data_df: 包含订单流数据的DataFrame + trader_instance: MyTrader实例,用于访问持仓信息 + max_retries: 最大重试次数 + + Returns: + dict: 包含交易信号的字典 + """ + # 直接从环境变量获取API密钥 + api_key = GLOBAL_LLM_CONFIG.get('api_key') + base_url = GLOBAL_LLM_CONFIG.get('base_url') + model_name = GLOBAL_LLM_CONFIG.get('model_name') + + # 检查API密钥是否为空 + if not api_key: + print("错误: API密钥未设置,请在main函数中配置GLOBAL_LLM_CONFIG['api_key']") + return {"action": "不操作", "reason": "API密钥未设置", "confidence": 0, "stop_loss": 0, "take_profit": 0} + + # 将DataFrame转换为可读性好的文本,传递trader_instance + data_text = trader_instance.format_data_for_llm(data_df) + + # 构建提示词 + prompt = f""" + 作为专注于趋势交易的期货交易员,基于以下市场数据做出交易决策: + + {data_text} + + 请重点考虑以下关键因素: + 1. 均线系统(5、10、20均线)的排列状态和金叉死叉信号 + 2. 价格是否处于明确的上升或下降通道中 + 3. 关键阻力位和支撑位的突破情况及其确认 + 4. 成交量是否配合价格趋势(上涨时放量,下跌时同样放量) + 5. 动量指标(MACD、KDJ等)的走势和信号 + 6. 订单流趋势与主力资金方向的一致性 + 7. 市场多空力量对比的持续性变化 + 8. 当前趋势的强度与持续时间评估 + + 【风险控制原则】: + - 严格控制每笔交易亏损不超过本金的1% + - 趋势交易的止损位应设置在次级回调位或关键技术位之下,通常为开仓价的0.5%-0.1% + - 使用移动止损机制跟踪趋势发展,锁定利润 + - 避免在盘整区间内频繁交易,等待明确的突破信号 + + 请根据市场状态和持仓情况,给出明确的交易指令: + 1. 交易方向: 不操作/开多/开空/平多/平空/平多开空/平空开多 + 2. 执行理由: 详细说明趋势特征、突破信号、动量变化和持续性评估 + 3. 置信度: 1-10的数字,反映趋势信号的清晰度,必须是整数 + 4. 止损价: 明确的止损价格(必须是数字),设置在关键支撑/阻力位附近 + 5. 止盈价: 明确的首个止盈目标(必须是数字),应至少是止损距离的1.5倍 + 6. 跟踪止损百分比: 0.0001-0.001之间的数字,用于设置移动止损追踪趋势 + + 请按以下格式返回交易决策,格式必须严格匹配: + action: 不操作/开多/开空/平多/平空/平多开空/平空开多 + reason: 交易理由 + confidence: 置信度(1-10) + stop_loss: 止损价 + take_profit: 止盈价 + trailing_percent: 跟踪止损百分比(0.0001-0.001) + """ + + system_prompt = {"role": "system", + "content": "你是一位专注于趋势交易的期货交易员,擅长识别和追踪强势趋势。你的交易风格注重动量和突破信号,善于在确认趋势后顺势而为,合理管理风险的同时最大化捕捉趋势利润。你特别关注均线系统、趋势线、成交量确认和动量指标,能精准判断趋势的强度和持续性。你擅长使用移动止损保护利润,在趋势延续时持有头寸,在趋势减弱时及时退出。请根据指定格式返回交易决策。"} + + # 添加重试机制 + retries = 0 + while retries <= max_retries: + try: + # 如果不是第一次尝试,输出重试信息 + if retries > 0: + print(f"正在进行第 {retries} 次重试...") + + # 调试信息 + print(f"使用API参数: base_url={base_url}, model={model_name}") + + # 添加明显的提示信息,表示正在调用大模型API + print("\n============================================") + print("【正在调用大模型API进行交易分析,请稍候...】") + print("============================================\n") + + # 记录开始时间 + api_start_time = time.time() + + # 使用OpenAI客户端格式调用API + client = OpenAI(api_key=api_key, base_url=base_url) + + # 发起流式请求 + response = client.chat.completions.create( + model=model_name, + messages=[ + system_prompt, + {"role": "user", "content": prompt} + ], + temperature=0.1, + stream=False, # 不启用流式模式 + max_tokens=8192, + timeout=60 + ) + + # 提取模型响应内容 + model_response = response.choices[0].message.content + + # 计算耗时 + api_elapsed = time.time() - api_start_time + print(f"\n\n模型响应总耗时: {api_elapsed:.2f}秒") + print("完整响应前100字符: " + model_response[:100] + "...") + + # 添加明显的提示信息,表示API调用已完成 + print("\n============================================") + print("【大模型API调用完成】") + print("============================================\n") + + # 从文本中解析出交易信号 + try: + trading_signal = parse_trading_signal(model_response) + return trading_signal + except Exception as parse_err: + print(f"解析模型响应出错: {parse_err}") + # 尝试从自由文本中提取关键信息 + return extract_trading_signal_from_text(model_response) + + except Exception as e: + retries += 1 + if retries <= max_retries: + print(f"调用大模型API出错: {e}") + print(f"将在3秒后重试...") + time.sleep(3) # 等待3秒后重试 + else: + print(f"已达到最大重试次数 ({max_retries}),调用大模型API失败") + print(f"错误详情: {e}") + print("\n请检查以下几点:") + print("1. API密钥格式是否正确,应以'sk-'开头") + print("2. 确认已安装最新版本的openai库: pip install --upgrade openai") + print("3. 确认您的API密钥对应的模型是否为deepseek-reasoner") + # 返回默认的不操作信号 + return {"action": "不操作", "reason": f"API调用失败: {str(e)[:100]}", "confidence": 0, "stop_loss": 0, "take_profit": 0} + + # 如果所有重试都失败了,返回默认值 + return {"action": "不操作", "reason": "API调用重试耗尽", "confidence": 0, "stop_loss": 0, "take_profit": 0} + +def parse_trading_signal(text): + """ + 从文本格式的模型响应中解析出交易信号 + + Args: + text: 模型响应文本 + + Returns: + dict: 包含交易信号的字典 + """ + lines = text.strip().split('\n') + trading_signal = {} + + for line in lines: + if ':' in line: + key, value = line.split(':', 1) + key = key.strip().lower() + value = value.strip() + + if key == 'action': + trading_signal['action'] = value + elif key == 'reason': + trading_signal['reason'] = value + elif key == 'confidence': + try: + trading_signal['confidence'] = int(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+', value) + if match: + trading_signal['confidence'] = int(match.group()) + else: + trading_signal['confidence'] = 0 + elif key == 'stop_loss': + try: + trading_signal['stop_loss'] = float(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + trading_signal['stop_loss'] = float(match.group()) + else: + trading_signal['stop_loss'] = 0 + elif key == 'take_profit': + try: + trading_signal['take_profit'] = float(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + trading_signal['take_profit'] = float(match.group()) + else: + trading_signal['take_profit'] = 0 + elif key == 'trailing_percent': + try: + value_float = float(value) + # 确保值在合理范围内 0.0001-0.001 + if 0.0001<= value_float <= 0.001: + trading_signal['trailing_percent'] = value_float + else: + # 设置为默认值 + trading_signal['trailing_percent'] = 0.0005 + except ValueError: + trading_signal['trailing_percent'] = 0.0005 + + # 检查是否有缺失的字段,如果有,设置默认值 + if 'action' not in trading_signal: + trading_signal['action'] = '不操作' + if 'reason' not in trading_signal: + trading_signal['reason'] = '未提供理由' + if 'confidence' not in trading_signal: + trading_signal['confidence'] = 0 + if 'stop_loss' not in trading_signal: + trading_signal['stop_loss'] = 0 + if 'take_profit' not in trading_signal: + trading_signal['take_profit'] = 0 + if 'trailing_percent' not in trading_signal: + trading_signal['trailing_percent'] = 0.0005 # 修改默认值 + + return trading_signal + +def extract_trading_signal_from_text(text): + """ + 从自由格式文本中尝试提取交易信号 + + Args: + text: 模型响应文本 + + Returns: + dict: 包含交易信号的字典 + """ + # 默认交易信号 + trading_signal = { + "action": "不操作", + "reason": "无法解析模型响应", + "confidence": 0, + "stop_loss": 0, + "take_profit": 0, + "trailing_percent": 0 # 更新默认的跟踪止损百分比 + } + + # 尝试判断交易方向 + text_lower = text.lower() + if "平多开空" in text_lower: + trading_signal["action"] = "平多开空" + elif "平空开多" in text_lower: + trading_signal["action"] = "平空开多" + elif "开多" in text_lower: + trading_signal["action"] = "开多" + elif "开空" in text_lower: + trading_signal["action"] = "开空" + elif "平多" in text_lower: + trading_signal["action"] = "平多" + elif "平空" in text_lower: + trading_signal["action"] = "平空" + elif "不操作" in text_lower or "观望" in text_lower: + trading_signal["action"] = "不操作" + + # 尝试从文本中提取置信度 + import re + confidence_matches = re.findall(r'置信度[::]\s*(\d+)', text_lower) + if confidence_matches: + try: + trading_signal["confidence"] = int(confidence_matches[0]) + except ValueError: + pass + + # 尝试提取止损价 + stop_loss_matches = re.findall(r'止损价[::]\s*(\d+(\.\d+)?)', text_lower) + if stop_loss_matches: + try: + trading_signal["stop_loss"] = float(stop_loss_matches[0][0]) + except ValueError: + pass + + # 尝试提取止盈价 + take_profit_matches = re.findall(r'止盈价[::]\s*(\d+(\.\d+)?)', text_lower) + if take_profit_matches: + try: + trading_signal["take_profit"] = float(take_profit_matches[0][0]) + except ValueError: + pass + + # 尝试提取跟踪止损百分比 + trailing_matches = re.findall(r'跟踪止损百分比[::]\s*(\d+(\.\d+)?)', text_lower) + if not trailing_matches: + trailing_matches = re.findall(r'跟踪百分比[::]\s*(\d+(\.\d+)?)', text_lower) + + if trailing_matches: + try: + trailing_value = float(trailing_matches[0][0]) + # 判断是否为百分比格式 + if trailing_value >= 0.5 and trailing_value <= 10: + trading_signal["trailing_percent"] = trailing_value / 100 + else: + trading_signal["trailing_percent"] = trailing_value + except ValueError: + pass + + # 提取理由 + reason_matches = re.findall(r'理由[::]\s*(.*?)(?=\n|$)', text_lower) + if reason_matches: + trading_signal["reason"] = reason_matches[0] + + return trading_signal + +# 修改run_trader函数,改为接收统一的配置字典 +def run_trader(broker_id, td_server, investor_id, password, app_id, auth_code, md_queue=None, page_dir='', private_resume_type=2, public_resume_type=2, config=None): + # 设置全局变量 + global GLOBAL_LLM_CONFIG + + # 如果传入了配置字典,直接使用 + if config: + # 使用deepcopy避免潜在的引用问题 + import copy + GLOBAL_LLM_CONFIG = copy.deepcopy(config) + else: + # 确保有默认值 + if 'bar_resample_rule' not in GLOBAL_LLM_CONFIG: + GLOBAL_LLM_CONFIG['bar_resample_rule'] = '1T' + if 'load_history' not in GLOBAL_LLM_CONFIG: + GLOBAL_LLM_CONFIG['load_history'] = False + if 'history_rows' not in GLOBAL_LLM_CONFIG: + GLOBAL_LLM_CONFIG['history_rows'] = 1000 + if 'trader_rows' not in GLOBAL_LLM_CONFIG: + GLOBAL_LLM_CONFIG['trader_rows'] = 10 + + # # 创建合适的日志目录,使用os.path.join确保路径分隔符正确 + # log_dir = os.path.join('.', 'log') + # if not os.path.exists(log_dir): + # os.makedirs(log_dir, exist_ok=True) + + # 使用位置参数调用MyTrader初始化,因为Cython类不支持关键字参数 + my_trader = MyTrader( + broker_id, + td_server, + investor_id, + password, + app_id, + auth_code, + md_queue, + page_dir, # 使用修复后的日志目录路径 + private_resume_type, + public_resume_type + ) + + # 设置历史数据加载参数 + my_trader.load_history = GLOBAL_LLM_CONFIG['load_history'] + my_trader.history_rows = GLOBAL_LLM_CONFIG['history_rows'] + my_trader.trader_rows = GLOBAL_LLM_CONFIG['trader_rows'] + my_trader.Join() + +def ceshiapi(api_key): + # 测试API连接 + print(f"测试API连接,使用密钥: {api_key[:5]}...{api_key[-5:]}") + try: + client = OpenAI(api_key=api_key, base_url=GLOBAL_LLM_CONFIG['base_url'] ) + response = client.chat.completions.create( + model=GLOBAL_LLM_CONFIG['model_name'], + messages=[ + {"role": "system", "content": "你是一个助手"}, + {"role": "user", "content": "测试"} + ], + stream=False, # 新增此行 + max_tokens=10 + ) + print(f"API连接测试成功") + except Exception as e: + print(f"API连接测试失败: {e}") + import traceback + traceback.print_exc() + +def clean_log_directory(log_dir="./log", timeout_seconds=5): + """ + 清理日志目录内的所有文件和子目录,具有超时机制和健壮的异常处理 + + 参数: + log_dir (str): 日志目录路径,默认为"./log" + timeout_seconds (int): 清理操作的最大等待时间(秒),默认为5秒 + + 返回: + bool: 清理操作是否成功完成(未超时且无严重错误) + """ + + print(f"开始清理日志目录: {log_dir}") + success = True + + if os.path.exists(log_dir): + # 设置超时机制,避免长时间阻塞 + start_time = time.time() + + try: + # 遍历并删除log目录下的所有文件和子目录 + for item in os.listdir(log_dir): + # 检查是否超时 + if time.time() - start_time > timeout_seconds: + print(f"清理操作超过{timeout_seconds}秒,中断清理") + success = False + break + + item_path = os.path.join(log_dir, item) + try: + if os.path.isfile(item_path): + os.unlink(item_path) + elif os.path.isdir(item_path): + shutil.rmtree(item_path, ignore_errors=True) + print(f"已清理: {item_path}") + except Exception as e: + print(f"清理 {item_path} 时出错: {e}") + # 记录错误但继续处理其他文件 + except Exception as e: + print(f"清理log目录时出现意外错误: {e}") + success = False + else: + # 如果log目录不存在,则创建它 + try: + os.makedirs(log_dir) + print(f"创建日志目录: {log_dir}") + except Exception as e: + print(f"创建日志目录失败: {e}") + success = False + + if success: + print(f"日志目录清理完成: {log_dir}") + else: + print(f"日志目录清理未完全完成: {log_dir}") + + return success + +if __name__ == '__main__': + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + # 清理日志目录 + clean_log_directory(log_dir="./log", timeout_seconds=10) # 可以调整超时时间 + + + #============================================================个人填写信息区============================================================# + + # 配置大模型参数 o3 代理地址: https://2233.ai/i/9ONWNBDK + api_key = "" + GLOBAL_LLM_CONFIG['api_key'] = api_key + GLOBAL_LLM_CONFIG['base_url'] = "https://api.gptsapi.net/v1" + GLOBAL_LLM_CONFIG['model_name'] = "o3-mini-2025-01-31" + ceshiapi(api_key) # 测试API连接 + + # 历史数据加载配置 + GLOBAL_LLM_CONFIG['load_history'] = True + GLOBAL_LLM_CONFIG['history_rows'] = 50 + GLOBAL_LLM_CONFIG['trader_rows'] = 10 + GLOBAL_LLM_CONFIG['bar_resample_rule'] = '3T' # 3分钟K线 + + # 模拟账户信息 + investor_id = '' # simnow账户,注意是登录账户的ID,SIMNOW个人首页查看 + password = '' # simnow密码 + server_name = '电信1' # 电信1、电信2、移动、TEST、N视界 + subscribe_list = [b'au2506'] # 合约列表 目前只支持单品种 + + #============================================================个人填写信息区============================================================# + + # 创建临时工作目录(在log文件夹内) + timestamp = int(time.time()) + temp_md_dir = f"./log/{investor_id}_md_{timestamp}" + temp_td_dir = f"./log/{investor_id}_td_{timestamp}" + + #用simnow模拟,不要忘记屏蔽下方实盘的future_account字典 + future_account = get_simulate_account( + investor_id=investor_id, + password=password, + server_name=server_name, + subscribe_list=subscribe_list, + md_flow_path=temp_md_dir, + td_flow_path=temp_td_dir, + ) + + # #实盘用这个,不要忘记屏蔽上方simnow的future_account字典 + # future_account = FutureAccount( + # broker_id='', # 期货公司BrokerID + # server_dict={'TDServer': "ip:port", 'MDServer': 'ip:port'}, # TDServer为交易服务器,MDServer为行情服务器。服务器地址格式为"ip:port。" + # reserve_server_dict={}, # 备用服务器地址 + # investor_id='', # 账户 + # password='', # 密码 + # app_id='simnow_client_test', # 认证使用AppID + # auth_code='0000000000000000', # 认证使用授权码 + # subscribe_list=[b'au2506'], # 订阅合约列表 + # md_flow_path=temp_md_dir, # MdApi流文件存储地址,默认MD_LOCATION + # td_flow_path=temp_td_dir, # TraderApi流文件存储地址,默认TD_LOCATION + # ) + + print('开始', len(future_account.subscribe_list)) + # 共享队列 + share_queue = Queue(maxsize=200) + + # 行情进程 + md_process = Process(target=run_tick_engine, args=(future_account, [share_queue])) + + # 使用深拷贝创建一个完全独立的配置副本 + import copy + config_copy = copy.deepcopy(GLOBAL_LLM_CONFIG) + + # 交易进程 + trader_process = Process(target=run_trader, args=( + future_account.broker_id, + future_account.server_dict['TDServer'], + future_account.investor_id, + future_account.password, + future_account.app_id, + future_account.auth_code, + share_queue, + temp_td_dir, + 2, # private_resume_type + 2, # public_resume_type + config_copy, + )) + + md_process.start() + trader_process.start() + + md_process.join() + trader_process.join() diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/定时启动.py b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/定时启动.py new file mode 100644 index 0000000..02f2c14 --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.02版本_new/定时启动.py @@ -0,0 +1,53 @@ +import subprocess +import schedule +import time +from datetime import datetime + +# 定义要启动的文件 +files_to_run = ['专享策略20_o3mini.py'] + + +def run_scripts(): + print("启动程序...") + for file in files_to_run: + time.sleep(1) + # 使用subprocess模块运行命令 + subprocess.Popen(['start', 'cmd', '/k', 'python', file], shell=True) + print(file) + print(datetime.now(),'程序重新启动完成,等待明天关闭重启') + + +def close_scripts(): + print("关闭程序...") + # 通过创建一个包含关闭指定窗口命令的批处理文件来关闭CMD窗口 + def close_specific_cmd_window(cmd_window_title): + with open("close_cmd_window.bat", "w") as batch_file: + batch_file.write(f'@echo off\nfor /f "tokens=2 delims=," %%a in (\'tasklist /v /fo csv ^| findstr /i "{cmd_window_title}"\') do taskkill /pid %%~a') + + # 运行批处理文件 + subprocess.run("close_cmd_window.bat", shell=True) + + + # 循环关闭所有脚本对应的CMD窗口 + for title in files_to_run: + close_specific_cmd_window(title) + print(datetime.now(),'已关闭程序,等待重新运行程序') + + + +# 设置定时任务,关闭程序 +schedule.every().day.at("15:20").do(close_scripts) +schedule.every().day.at("02:45").do(close_scripts) + +# 设置定时任务,启动程序 +schedule.every().day.at("08:55").do(run_scripts) +schedule.every().day.at("20:55").do(run_scripts) + + + +# 保持脚本运行,等待定时任务触发 + #zzg_quant +while True: + schedule.run_pending() + time.sleep(1) + #zzg_quant diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/4.14更新日志.txt b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/4.14更新日志.txt new file mode 100644 index 0000000..9900a0b --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/4.14更新日志.txt @@ -0,0 +1,5 @@ +4.14更新: +1.修复收盘清仓时间段开仓问题。 +2.策略参数填写区增加下单手数变量。 +3.增加实盘代码的个人信息字典。 +4.取消置信度的判断。 \ No newline at end of file diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/vip20_orderflow.py b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/vip20_orderflow.py new file mode 100644 index 0000000..395d462 --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/vip20_orderflow.py @@ -0,0 +1,2596 @@ +''' +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +该代码的主要目的是处理Tick数据并生成交易信号。代码中定义了一个tickcome函数,它接收到Tick数据后会进行一系列的处理,包括构建Tick字典、更新上一个Tick的成交量、保存Tick数据、生成K线数据等。其中涉及到的一些函数有: + +on_tick(tick): 处理单个Tick数据,根据Tick数据生成K线数据。 +tickdata(df, symbol): 处理Tick数据,生成K线数据。 +orderflow_df_new(df_tick, df_min, symbol): 处理Tick和K线数据,生成订单流数据。 +GetOrderFlow_dj(kData): 计算订单流的信号指标。 +除此之外,代码中还定义了一个MyTrader类,继承自TraderApiBase,用于实现交易相关的功能。 +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 +''' +from multiprocessing import Process, Queue +from AlgoPlus.CTP.MdApi import run_tick_engine +from AlgoPlus.CTP.FutureAccount import get_simulate_account +from AlgoPlus.CTP.FutureAccount import FutureAccount +from AlgoPlus.CTP.TraderApiBase import TraderApiBase +from AlgoPlus.ta.time_bar import tick_to_bar +import pandas as pd +from datetime import datetime, timedelta +from datetime import time as s_time +import operator +import time +import numpy as np +import os +import re +import json +import requests # 添加requests库用于API调用 +from openai import OpenAI # 导入OpenAI客户端 +import threading +from queue import Queue as ThreadQueue +import warnings +warnings.filterwarnings("ignore", category=FutureWarning) +import copy +import math +import shutil +import re # 新增 +import logging # 新增 +from logging.handlers import RotatingFileHandler # 新增 + + +# 在文件顶部定义全局变量 +tickdatadict = {} # 存储Tick数据的字典 +quotedict = {} # 存储行情数据的字典 +ofdatadict = {} # 存储K线数据的字典 +trader_df = pd.DataFrame({}) # 存储交易数据的DataFrame对象 +previous_volume = {} # 上一个Tick的成交量 +tsymbollist={} +# 全局LLM配置变量 +GLOBAL_LLM_CONFIG = {} # 全局大模型配置参数 +# 全局交易信号队列,用于存储AI模型生成的交易信号 +AI_SIGNAL_QUEUE = ThreadQueue() +# 标记是否有AI线程正在运行 +AI_THREAD_RUNNING = False +# 不再需要单独的K线时间粒度全局变量,它已经被整合到GLOBAL_LLM_CONFIG中 + +def setup_logging(log_folder='logs'): + # 确保日志文件夹存在 + if not os.path.exists(log_folder): + os.makedirs(log_folder) + + # 创建日志格式 + formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') + + # ==== 修复点:所有FileHandler显式设置encoding='utf-8' ==== + + # AI分析日志 + ai_logger = logging.getLogger('ai_analysis') + ai_logger.setLevel(logging.INFO) + ai_file_handler = RotatingFileHandler( + os.path.join(log_folder, 'ai_analysis.log'), + maxBytes=10 * 1024 * 1024, # 10MB + backupCount=5, + encoding='utf-8' # 关键修复:强制UTF-8编码 + ) + ai_file_handler.setFormatter(formatter) + ai_logger.addHandler(ai_file_handler) + + # 交易信号日志 + signal_logger = logging.getLogger('trading_signals') + signal_logger.setLevel(logging.INFO) + signal_file_handler = RotatingFileHandler( + os.path.join(log_folder, 'trading_signals.log'), + maxBytes=10 * 1024 * 1024, + backupCount=5, + encoding='utf-8' # 关键修复 + ) + signal_file_handler.setFormatter(formatter) + signal_logger.addHandler(signal_file_handler) + + # 止损止盈日志 + stoploss_logger = logging.getLogger('stoploss') + stoploss_logger.setLevel(logging.INFO) + stoploss_file_handler = RotatingFileHandler( + os.path.join(log_folder, 'stoploss.log'), + maxBytes=10 * 1024 * 1024, + backupCount=5, + encoding='utf-8' # 关键修复 + ) + stoploss_file_handler.setFormatter(formatter) + stoploss_logger.addHandler(stoploss_file_handler) + + return ai_logger, signal_logger, stoploss_logger + +# 全局日志记录器 +AI_LOGGER, SIGNAL_LOGGER, STOPLOSS_LOGGER = setup_logging() + +def tickcome(md_queue): + global previous_volume + + data=md_queue + instrument_id = data['InstrumentID'].decode() # 品种代码 + ActionDay = data['ActionDay'].decode() # 交易日日期 + update_time = data['UpdateTime'].decode() # 更新时间 + #zzg_quant + update_millisec = str(data['UpdateMillisec']) # 更新毫秒数 + created_at = ActionDay[:4] + '-' + ActionDay[4:6] + '-' + ActionDay[6:] + ' ' + update_time + '.' + update_millisec #创建时间 + # 构建tick字典 + tick = { + 'symbol': instrument_id, # 品种代码和交易所ID + 'created_at':datetime.strptime(created_at, "%Y-%m-%d %H:%M:%S.%f"), + #'created_at': created_at, # 创建时间 + 'price': float(data['LastPrice']), # 最新价 + 'last_volume': int(data['Volume']) - previous_volume.get(instrument_id, 0) if previous_volume.get(instrument_id, 0) != 0 else 0, # 瞬时成交量 + 'bid_p': float(data['BidPrice1']), # 买价 + 'bid_v': int(data['BidVolume1']), # 买量 + 'ask_p': float(data['AskPrice1']), # 卖价 + 'ask_v': int(data['AskVolume1']), # 卖量 + 'UpperLimitPrice': float(data['UpperLimitPrice']), # 涨停价 + 'LowerLimitPrice': float(data['LowerLimitPrice']), # 跌停价 + 'TradingDay': data['TradingDay'].decode(), # 交易日日期 + 'cum_volume': int(data['Volume']), # 最新总成交量 + 'cum_amount': float(data['Turnover']), # 最新总成交额 + 'cum_position': int(data['OpenInterest']), # 合约持仓量 + } + # 更新上一个Tick的成交量 + previous_volume[instrument_id] = int(data['Volume']) + if tick['last_volume']>0: + #print(tick['created_at'],'vol:',tick['last_volume']) + # 处理Tick数据 + on_tick(tick) + + +def can_time(hour, minute): + hour = str(hour) + minute = str(minute) + if len(minute) == 1: + minute = "0" + minute + return int(hour + minute) + +def on_tick(tick): + + tm=can_time(tick['created_at'].hour,tick['created_at'].minute) + #print(tick['symbol']) + #print(1) + #if tm>1500 and tm<2100 : + # return + if tick['last_volume']==0: + return + quotes = tick + timetick=str(tick['created_at']).replace('+08:00', '') + tsymbol=tick['symbol'] + if tsymbol not in tsymbollist.keys(): + # 获取tick的买卖价和买卖量 + #zzg_quant + tsymbollist[tsymbol]=tick + bid_p=quotes['bid_p'] + ask_p=quotes['ask_p'] + bid_v=quotes['bid_v'] + ask_v=quotes['ask_v'] + else: + # 获取上一个tick的买卖价和买卖量 + rquotes =tsymbollist[tsymbol] + bid_p=rquotes['bid_p'] + ask_p=rquotes['ask_p'] + bid_v=rquotes['bid_v'] + ask_v=rquotes['ask_v'] + tsymbollist[tsymbol]=tick + tick_dt=pd.DataFrame({'datetime':timetick,'symbol':tick['symbol'],'mainsym':tick['symbol'].rstrip('0123456789').upper(),'lastprice':tick['price'], + 'vol':tick['last_volume'], + 'bid_p':bid_p,'ask_p':ask_p,'bid_v':bid_v,'ask_v':ask_v},index=[0]) + sym = tick_dt['symbol'][0] + #print(tick_dt) + + # 直接调用tickdata,不传递resample_rule参数,让其自行从全局配置获取 + tickdata(tick_dt, sym) + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def data_of(df): + global trader_df + # 将df数据合并到trader_df中 + trader_df = pd.concat([trader_df, df], ignore_index=True) + #print('trader_df: ', len(trader_df)) + #print(trader_df) + +def process(bidDict, askDict, symbol): + try: + # 尝试从quotedict中获取对应品种的报价数据 + dic = quotedict[symbol] + bidDictResult = dic['bidDictResult'] + askDictResult = dic['askDictResult'] + except: + # 如果获取失败,则初始化bidDictResult和askDictResult为空字典 + bidDictResult, askDictResult = {}, {} + + # 将所有买盘字典和卖盘字典的key合并,并按升序排序 + sList = sorted(set(list(bidDict.keys()) + list(askDict.keys()))) + + # 遍历所有的key,将相同key的值进行累加 + for s in sList: + if s in bidDict: + if s in bidDictResult: + bidDictResult[s] = int(bidDict[s]) + bidDictResult[s] + else: + bidDictResult[s] = int(bidDict[s]) + if s not in askDictResult: + askDictResult[s] = 0 + else: + if s in askDictResult: + askDictResult[s] = int(askDict[s]) + askDictResult[s] + else: + askDictResult[s] = int(askDict[s]) + if s not in bidDictResult: + bidDictResult[s] = 0 + + # 构建包含bidDictResult和askDictResult的字典,并存入quotedict中 + df = {'bidDictResult': bidDictResult, 'askDictResult': askDictResult} + quotedict[symbol] = df + + return bidDictResult, askDictResult +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + +def tickdata(df, symbol): + tickdata =pd.DataFrame({'datetime':df['datetime'],'symbol':df['symbol'],'lastprice':df['lastprice'], + 'volume':df['vol'],'bid_p':df['bid_p'],'bid_v':df['bid_v'],'ask_p':df['ask_p'],'ask_v':df['ask_v']}) + try: + if symbol in tickdatadict.keys(): + rdf=tickdatadict[symbol] + rdftm=pd.to_datetime(rdf['bartime'][0]).strftime('%Y-%m-%d %H:%M:%S') + now=str(tickdata['datetime'][0]) + if now>rdftm: + try: + oo=ofdatadict[symbol] + data_of(oo) + #print('oo',oo) + if symbol in quotedict.keys(): + quotedict.pop(symbol) + if symbol in tickdatadict.keys(): + tickdatadict.pop(symbol) + if symbol in ofdatadict.keys(): + ofdatadict.pop(symbol) + except IOError as e: + print('rdftm捕获到异常',e) + tickdata['bartime'] = pd.to_datetime(tickdata['datetime']) + tickdata['open'] = tickdata['lastprice'] + tickdata['high'] = tickdata['lastprice'] + tickdata['low'] = tickdata['lastprice'] + tickdata['close'] = tickdata['lastprice'] + tickdata['starttime'] = tickdata['datetime'] + else: + tickdata['bartime'] = rdf['bartime'] + tickdata['open'] = rdf['open'] + tickdata['high'] = max(tickdata['lastprice'].values,rdf['high'].values) + tickdata['low'] = min(tickdata['lastprice'].values,rdf['low'].values) + tickdata['close'] = tickdata['lastprice'] + tickdata['volume']=df['vol']+rdf['volume'].values + tickdata['starttime'] = rdf['starttime'] + else : + print('新bar的第一个tick进入') + tickdata['bartime'] = pd.to_datetime(tickdata['datetime']) + tickdata['open'] = tickdata['lastprice'] + tickdata['high'] = tickdata['lastprice'] + tickdata['low'] = tickdata['lastprice'] + tickdata['close'] = tickdata['lastprice'] + tickdata['starttime'] = tickdata['datetime'] + except IOError as e: + print('捕获到异常',e) + + + tickdata['bartime'] = pd.to_datetime(tickdata['bartime']) + # 直接从全局配置获取resample_rule + resample_rule = GLOBAL_LLM_CONFIG.get('bar_resample_rule') + + # 使用resample_rule生成K线 + bardata = tickdata.resample(on = 'bartime', rule = resample_rule, label = 'right', closed = 'right').agg({'starttime':'first','symbol':'last','open':'first','high':'max','low':'min','close':'last','volume':'sum'}).reset_index(drop = False) + bardata =bardata.dropna().reset_index(drop = True) + bardata['bartime'] = pd.to_datetime(bardata['bartime'][0]).strftime('%Y-%m-%d %H:%M:%S') + tickdatadict[symbol]=bardata + tickdata['volume']=df['vol'].values + #print(bardata['symbol'].values,bardata['bartime'].values) + orderflow_df_new(tickdata,bardata,symbol) + # time.sleep(0.5) + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def orderflow_df_new(df_tick,df_min,symbol): + startArray = pd.to_datetime(df_min['starttime']).values + voluememin= df_min['volume'].values + highs=df_min['high'].values + lows=df_min['low'].values + opens=df_min['open'].values + closes=df_min['close'].values + #endArray = pd.to_datetime(df_min['bartime']).values + endArray = df_min['bartime'].values + #print(endArray) + deltaArray = np.zeros((len(endArray),)) + tTickArray = pd.to_datetime(df_tick['datetime']).values + bp1TickArray = df_tick['bid_p'].values + ap1TickArray = df_tick['ask_p'].values + lastTickArray = df_tick['lastprice'].values + volumeTickArray = df_tick['volume'].values + symbolarray = df_tick['symbol'].values + indexFinal = 0 + for index,tEnd in enumerate(endArray): + dt=endArray[index] + start = startArray[index] + bidDict = {} + askDict = {} + bar_vol=voluememin[index] + bar_close=closes[index] + bar_open=opens[index] + bar_low=lows[index] + bar_high=highs[index] + bar_symbol=symbolarray[index] + # for indexTick in range(indexFinal,len(df_tick)): + # if tTickArray[indexTick] >= tEnd: + # break + # elif (tTickArray[indexTick] >= start) & (tTickArray[indexTick] < tEnd): + Bp = round(bp1TickArray[0],4) + Ap = round(ap1TickArray[0],4) + LastPrice = round(lastTickArray[0],4) + Volume = volumeTickArray[0] + if LastPrice >= Ap: + if str(LastPrice) in askDict.keys(): + askDict[str(LastPrice)] += Volume + else: + askDict[str(LastPrice)] = Volume + if LastPrice <= Bp: + if str(LastPrice) in bidDict.keys(): + bidDict[str(LastPrice)] += Volume + else: + bidDict[str(LastPrice)] = Volume + # indexFinal = indexTick + bidDictResult,askDictResult = process(bidDict,askDict,symbol) + bidDictResult=dict(sorted(bidDictResult.items(),key=operator.itemgetter(0))) + askDictResult=dict(sorted(askDictResult.items(),key=operator.itemgetter(0))) + prinslist=list(bidDictResult.keys()) + asklist=list(askDictResult.values()) + bidlist=list(bidDictResult.values()) + delta=(sum(askDictResult.values()) - sum(bidDictResult.values())) + #print(prinslist,asklist,bidlist) + #print(len(prinslist),len(bidDictResult),len(askDictResult)) + df=pd.DataFrame({'price':pd.Series([prinslist]),'Ask':pd.Series([asklist]),'Bid':pd.Series([bidlist])}) + #df=pd.DataFrame({'price':pd.Series(bidDictResult.keys()),'Ask':pd.Series(askDictResult.values()),'Bid':pd.Series(bidDictResult.values())}) + df['symbol']=bar_symbol + df['datetime']=dt + df['delta']=str(delta) + df['close']=bar_close + df['open']=bar_open + df['high']=bar_high + df['low']=bar_low + df['volume']=bar_vol + #df['ticktime']=tTickArray[0] + df['dj'] = GetOrderFlow_dj(df) + ofdatadict[symbol]=df + +#公众号:松鼠Quant +#主页:www.quant789.com +#本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! +#版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + +def GetOrderFlow_dj(kData): + Config = { + 'Value1': 3, + 'Value2': 3, + 'Value3': 3, + 'Value4': True, + } + aryData = kData + djcout = 0 + + # 遍历kData中的每一行,计算djcout指标 + for index, row in aryData.iterrows(): + kItem = aryData.iloc[index] + high = kItem['high'] + low = kItem['low'] + close = kItem['close'] + open = kItem['open'] + dtime = kItem['datetime'] + price_s = kItem['price'] + Ask_s = kItem['Ask'] + Bid_s = kItem['Bid'] + delta = kItem['delta'] + + price_s = price_s + Ask_s = Ask_s + Bid_s = Bid_s + + gj = 0 + xq = 0 + gxx = 0 + xxx = 0 + + # 遍历price_s中的每一个元素,计算相关指标 + for i in np.arange(0, len(price_s), 1): + duiji = { + 'price': 0, + 'time': 0, + 'longshort': 0, + } + + if i == 0: + delta = delta + + order= { + "Price":price_s[i], + "Bid":{ "Value":Bid_s[i]}, + "Ask":{ "Value":Ask_s[i]} + } + #空头堆积 + if i >= 0 and i < len(price_s) - 1: + if (order["Bid"]["Value"] > Ask_s[i + 1] * int(Config['Value1'])): + gxx += 1 + gj += 1 + if gj >= int(Config['Value2']) and Config['Value4'] == True: + duiji['price'] = price_s[i] + duiji['time'] = dtime + duiji['longshort'] = -1 + if float(duiji['price']) > 0: + djcout += -1 + else: + gj = 0 + #多头堆积 + if i >= 1 and i <= len(price_s) - 1: + if (order["Ask"]["Value"] > Bid_s[i - 1] * int(Config['Value1'])): + xq += 1 + xxx += 1 + if xq >= int(Config['Value2']) and Config['Value4'] == True: + duiji['price'] = price_s[i] + duiji['time'] = dtime + duiji['longshort'] = 1 + if float(duiji['price']) > 0: + djcout += 1 + else: + xq = 0 + + # 返回计算得到的djcout值 + return djcout + +#交易程序--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +class MyTrader(TraderApiBase): + def __init__(self, broker_id, td_server, investor_id, password, app_id, auth_code, md_queue=None, page_dir='', private_resume_type=2, public_resume_type=2): + # Cython类不使用super().__init__()方式调用父类初始化方法 + # TraderApiBase.__init__会由Cython自动处理 + + self.py=30 #设置委托价格的偏移,更加容易促成成交。仅螺纹,其他品种根据最小点波动,自己设置 + self.cont_df=0 + self.trailing_stop_percent = 0 #跟踪出场参数 + self.fixed_stop_loss_percent = 0 #固定出场参数 + self.dj_X=1 #开仓的堆积参数 + + self.pos=0 + self.Lots=1 #下单手数 + self.short_trailing_stop_price = 0 + self.long_trailing_stop_price = 0 + self.sl_long_price=0 + self.sl_shor_price=0 + self.out_long=0 + self.out_short=0 + self.clearing_executed=False + self.day_closed = False # 添加日内平仓标志 + self.kgdata = True #历史数据加载一次 + self.holddata=True #持仓数据加载一次 + self.use_ai_model = True # 是否使用AI模型来分析 + self.data_saved_1 = False + self.data_saved_2 = False + self.symbols='' + # 新增止盈止损字典,按合约ID索引 + self.stop_order_dict = {} + + # 新增历史数据加载相关参数 + self.load_history = False # 是否加载历史数据 + self.history_rows = 30 # 默认加载30行历史数据 + self.trader_rows = 10 # 当tader_df里的数据大于10行时开始计算指标及触发AI模型 + + # 创建并启动保存数据的线程 + self.save_data_thread = threading.Thread(target=self.run_save_last_bar_data) + self.save_data_thread.daemon = True # 设置为守护线程,主程序退出时自动结束 + self.save_data_thread.start() + + def run_save_last_bar_data(self): + """ + 在子线程中定期调用save_last_bar_data方法 + """ + while True: + try: + # 调用保存数据的方法 + self.save_last_bar_data() + # 每50秒检查一次 + time.sleep(50) + except Exception as e: + print(f"保存数据线程出现异常: {e}") + import traceback + traceback.print_exc() + # 异常后暂停一会再继续 + time.sleep(30) + + def load_history_data(self, instrument_id): + """ + 加载历史数据 + + Args: + instrument_id: 合约ID + """ + if not self.load_history: + return + + try: + # 不再只提取英文字母,使用完整的合约代码 + symbol = str(instrument_id) + json_file_path = f"traderdata/{symbol}_ofdata.json" + + # 检查traderdata目录是否存在 + if not os.path.exists("traderdata"): + print(f"traderdata目录不存在,创建目录") + os.makedirs("traderdata") + + if os.path.exists(json_file_path): + try: + # 读取JSON文件,使用lines=True确保正确读取每行JSON + df = pd.read_json(json_file_path, lines=True) + + if len(df) == 0: + print(f"历史数据文件为空: {json_file_path}") + print("将使用实时数据开始交易") + return False + + # 如果数据行数超过设定的历史行数,只取最后N行 + if len(df) > self.history_rows: + df = df.tail(self.history_rows) + print(f"历史数据超过设定行数,仅加载最后{self.history_rows}行") + + # 更新全局trader_df + global trader_df + trader_df = df + + print(f"\n===== 历史数据加载成功 =====") + print(f"合约: {instrument_id}") + print(f"数据行数: {len(df)}行") + print(f"数据时间范围: {df['datetime'].iloc[0]} 到 {df['datetime'].iloc[-1]}") + print(f"最新价格: {df['close'].iloc[-1]}") + print(f"最新成交量: {df['volume'].iloc[-1]}") + print("===========================\n") + + # 更新cont_df + self.cont_df = len(df) + + # 计算日均线 + if len(df) > 0: + df['dayma'] = df['close'].mean() + + # 计算累积的delta值 + df['delta'] = df['delta'].astype(float) + df['delta累计'] = df['delta'].cumsum() + + return True + except Exception as e: + print(f"\n===== 历史数据加载错误 =====") + print(f"合约: {instrument_id}") + print(f"读取JSON错误: {e}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + else: + print(f"\n===== 历史数据加载提示 =====") + print(f"合约: {instrument_id}") + print(f"未找到历史数据文件: {json_file_path}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + + except Exception as e: + print(f"\n===== 历史数据加载错误 =====") + print(f"合约: {instrument_id}") + print(f"错误信息: {e}") + print("将使用实时数据开始交易") + print("===========================\n") + return False + + #读取保存的数据 + def read_to_csv(self,symbol): + # 文件夹路径和文件路径 + # 使用完整的合约代码 + symbol = str(symbol) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}traderdata.csv") + # 如果文件夹不存在则创建 + if not os.path.exists(folder_path): + os.makedirs(folder_path, exist_ok=True) + + # 读取保留的模型数据CSV文件 + if os.path.exists(file_path): + try: + # 检查文件是否为空 + if os.path.getsize(file_path) == 0: + print(f"CSV文件为空: {file_path}") + return + + df = pd.read_csv(file_path) + if not df.empty and self.holddata==True: + # 选择最后一行数据 + row = df.iloc[-1] + # 根据CSV文件的列名将数据赋值给相应的属性 + self.pos = int(row['pos']) + self.short_trailing_stop_price = float(row['short_trailing_stop_price']) + self.long_trailing_stop_price = float(row['long_trailing_stop_price']) + self.sl_long_price = float(row['sl_long_price']) + self.sl_shor_price = float(row['sl_shor_price']) + # self.out_long = int(row['out_long']) + # self.out_short = int(row['out_short']) + print("找到历史交易数据文件,已经更新持仓,止损止盈数据", df.iloc[-1]) + self.holddata=False + except pd.errors.EmptyDataError: + print(f"CSV文件格式错误或为空: {file_path}") + except Exception as e: + print(f"读取CSV文件时出错: {e}") + else: + pass + #print("没有找到历史交易数据文件", file_path) + #如果没有找到CSV,则初始化变量 + + pass + + #保存数据 + def save_to_csv(self,symbol): + # 使用完整的合约代码 + symbol = str(symbol) + # 创建DataFrame + data = { + 'datetime': [datetime.now().strftime('%Y-%m-%d %H:%M:%S')], # 使用当前时间 + 'pos': [self.pos], + 'short_trailing_stop_price': [self.short_trailing_stop_price], + 'long_trailing_stop_price': [self.long_trailing_stop_price], + 'sl_long_price': [self.sl_long_price], + 'sl_shor_price': [self.sl_shor_price], + } + + df = pd.DataFrame(data) + + # 确保目录存在 + folder_path = "traderdata" + if not os.path.exists(folder_path): + os.makedirs(folder_path, exist_ok=True) + + file_path = os.path.join(folder_path, f"{symbol}traderdata.csv") + + try: + # 将DataFrame保存到CSV文件 + df.to_csv(file_path, index=False) + print(f"持仓数据已保存到: {file_path}") + except Exception as e: + print(f"保存CSV文件时出错: {e}") + + + def save_last_bar_data(self): + # 获取当前时间 + current_time = datetime.now().time() + + # 第一时间范围 + clearing_time1_start = s_time(14,55) + clearing_time1_end = s_time(15,00) + # 计算clearing_time1_end加5分钟 + clearing_time1_end_plus5 = (datetime.combine(datetime.today(), clearing_time1_end) + timedelta(minutes=5)).time() + + # 第二时间范围 + clearing_time2_start = s_time(2,25) + clearing_time2_end = s_time(2,30) + # 计算clearing_time2_end加5分钟 + clearing_time2_end_plus5 = (datetime.combine(datetime.today(), clearing_time2_end) + timedelta(minutes=5)).time() + + instrument_id = self.symbols + json_file_path = f"traderdata/{instrument_id}_ofdata.json" + + # 检查是否已经有对应收盘时间的数据 + has_closing_data = False + if os.path.exists(json_file_path): + try: + # 读取现有JSON文件 + existing_df = pd.read_json(json_file_path, lines=True) + if not existing_df.empty: + # 获取最后一行数据的datetime + last_datetime = existing_df.iloc[-1]['datetime'] + + # 如果是Timestamp类型,直接获取time() + if isinstance(last_datetime, pd.Timestamp): + last_time = last_datetime.time() + # 如果是字符串类型,先转换为datetime + else: + last_datetime = pd.to_datetime(str(last_datetime)) + last_time = last_datetime.time() + + # 检查是否已经有了收盘时间的数据 + if (last_time == clearing_time1_end): + print(f"已有15:00收盘数据: {last_datetime}, 无需追加") + self.data_saved_1 = True + has_closing_data = True + elif (last_time == clearing_time2_end): + print(f"已有2:30收盘数据: {last_datetime}, 无需追加") + self.data_saved_2 = True + has_closing_data = True + except Exception as e: + print(f"读取JSON文件检查收盘数据时出错: {e}") + import traceback + traceback.print_exc() + + # 保存最后一个bar的数据到JSON文件(当时间在第一个时间段结束后的5分钟内) + if current_time >= clearing_time1_end and current_time < clearing_time1_end_plus5 and not self.data_saved_1 and not has_closing_data: + if len(trader_df) > 0: + print("第一时间段结束,保存最后一个完整bar数据到行情JSON") + + # 确保目录存在 + if not os.path.exists("traderdata"): + os.makedirs("traderdata", exist_ok=True) + + # 确保待保存的新数据中datetime字段是格式化的日期时间字符串 + if 'datetime' in trader_df.columns: + trader_df['datetime'] = trader_df['datetime'].astype(str) + + # 只获取最后一个bar的数据 + last_bar = trader_df.tail(1) + + if os.path.exists(json_file_path): + try: + # 读取现有数据 + existing_df = pd.read_json(json_file_path, lines=True) + + # 确保现有数据中的datetime字段是字符串类型 + if 'datetime' in existing_df.columns: + existing_df['datetime'] = existing_df['datetime'].astype(str) + + # 合并新数据 + combined_df = pd.concat([existing_df, last_bar], ignore_index=True) + # 保存合并后的数据,使用lines=True确保每行是独立的JSON对象 + combined_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + print(f"最后一个bar数据已保存到行情JSON: {json_file_path}") + except Exception as e: + print(f"读取或保存JSON文件时出错: {e}") + # 如果读取出错,直接保存当前数据 + last_bar.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + else: + # 创建新文件并保存最后一个bar数据 + last_bar.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + print(f"创建新的行情JSON并保存最后一个bar: {json_file_path}") + + self.data_saved_1 = True # 设置标志,防止重复保存 + + # 保存最后一个bar的数据到JSON文件(当时间在第二个时间段结束后的5分钟内) + if current_time >= clearing_time2_end and current_time < clearing_time2_end_plus5 and not self.data_saved_2 and not has_closing_data: + if len(trader_df) > 0: + print("第二时间段结束,保存最后一个完整bar数据到行情JSON") + + # 确保目录存在 + if not os.path.exists("traderdata"): + os.makedirs("traderdata", exist_ok=True) + + # 确保待保存的新数据中datetime字段是格式化的日期时间字符串 + if 'datetime' in trader_df.columns: + trader_df['datetime'] = trader_df['datetime'].astype(str) + + # 只获取最后一个bar的数据 + last_bar = trader_df.tail(1) + + if os.path.exists(json_file_path): + try: + # 读取现有数据 + existing_df = pd.read_json(json_file_path, lines=True) + + # 确保现有数据中的datetime字段是字符串类型 + if 'datetime' in existing_df.columns: + existing_df['datetime'] = existing_df['datetime'].astype(str) + + # 合并新数据 + combined_df = pd.concat([existing_df, last_bar], ignore_index=True) + # 保存合并后的数据,使用lines=True确保每行是独立的JSON对象 + combined_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + print(f"最后一个bar数据已保存到行情JSON: {json_file_path}") + except Exception as e: + print(f"读取或保存JSON文件时出错: {e}") + # 如果读取出错,直接保存当前数据 + last_bar.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + else: + # 创建新文件并保存最后一个bar数据 + last_bar.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + print(f"创建新的行情JSON并保存最后一个bar: {json_file_path}") + + self.data_saved_2 = True # 设置标志,防止重复保存 + + + + #每日收盘重置数据 + def day_data_reset(self,data): + # 获取当前时间 + current_time = datetime.now().time() + + # 第一时间范围 + clearing_time1_start = s_time(14,55) + clearing_time1_end = s_time(15,00) + # 第二时间范围 + clearing_time2_start = s_time(2,25) + clearing_time2_end = s_time(2,30) + current_bid = float(data['BidPrice1']) # 当前买价 + current_ask = float(data['AskPrice1']) # 当前卖价 + + + self.clearing_executed = False + # 检查当前时间第一个操作的时间范围内 + if clearing_time1_start <= current_time < clearing_time1_end and not self.clearing_executed: + self.clearing_executed = True # 设置标志变量为已执行 + self.day_closed = True # 设置日内平仓标志 + # 如果有持仓,强制平仓 + if self.pos != 0: + print("交易日结束,开始强制平仓") + # 遍历所有合约发送平仓指令 + for instrument_id in list(self.stop_order_dict.keys()): + stops = self.stop_order_dict[instrument_id] + + # 平多仓 + if stops['long']['position'] > 0: + print(f"发送平多仓指令: {instrument_id}, 手数: {stops['long']['position']}, 价格: {current_bid}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_bid - self.py, + stops['long']['position'], + b'1', b'3') + # 平空仓 + if stops['short']['position'] > 0: + print(f"发送平空仓指令: {instrument_id}, 手数: {stops['short']['position']}, 价格: {current_ask}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_ask + self.py, + stops['short']['position'], + b'0', b'3') + + # 清空所有合约的持仓信息 + for instrument_id in list(self.stop_order_dict.keys()): + self.clear_position_info(instrument_id, 'all') + + print("日内交易已结束,禁止开新仓") + + # 检查当前时间是否在第二个操作的时间范围内 + elif clearing_time2_start <= current_time < clearing_time2_end and not self.clearing_executed: + self.clearing_executed = True # 设置标志变量为已执行 + self.day_closed = True # 设置日内平仓标志 + # 如果有持仓,强制平仓 + if self.pos != 0: + print("交易日结束,开始强制平仓") + # 遍历所有合约发送平仓指令 + for instrument_id in list(self.stop_order_dict.keys()): + stops = self.stop_order_dict[instrument_id] + + # 平多仓 + if stops['long']['position'] > 0: + print(f"发送平多仓指令: {instrument_id}, 手数: {stops['long']['position']}, 价格: {current_bid}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_bid - self.py, + stops['long']['position'], + b'1', b'3') + # 平空仓 + if stops['short']['position'] > 0: + print(f"发送平空仓指令: {instrument_id}, 手数: {stops['short']['position']}, 价格: {current_ask}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], + current_ask + self.py, + stops['short']['position'], + b'0', b'3') + # 清空所有合约的持仓信息 + for instrument_id in list(self.stop_order_dict.keys()): + self.clear_position_info(instrument_id, 'all') + + print("日内交易已结束,禁止开新仓") + else: + self.clearing_executed = False + self.day_closed = False + return self.clearing_executed + + def OnRtnTrade(self, pTrade): + print("||成交回报||", pTrade) + + # 获取成交信息 + instrument_id = pTrade['InstrumentID'].decode() + direction = pTrade['Direction'].decode() # '0'为买入,'1'为卖出 + offset_flag = pTrade['OffsetFlag'].decode() # '0'为开仓,'1'为平仓,'3'为平今 + volume = pTrade['Volume'] + price = pTrade['Price'] + + # 根据成交类型更新持仓信息 + if offset_flag in ['1', '3']: # 平仓或平今 + # 判断平的是多头还是空头 + if direction == '1': # 卖出,平多头 + print(f"平多头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + else: # 买入,平空头 + print(f"平空头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + + elif offset_flag == '0': # 开仓 + if direction == '0': # 买入,开多头 + print(f"开多头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 如果有空头持仓,先清空 + if instrument_id in self.stop_order_dict and self.stop_order_dict[instrument_id]['short']['position'] > 0: + self.clear_position_info(instrument_id, 'short') + + # # 设置多头持仓信息 + # sl_price = price * (1 - self.fixed_stop_loss_percent) # 默认止损价 + # tp_price = price * (1 + self.trailing_stop_percent) # 默认止盈价 + + # # 设置初始跟踪止损价,与开仓价保持一定距离 + # initial_trailing_stop = price * (1 - self.trailing_stop_percent) + + # log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + # STOPLOSS_LOGGER.info(log_message) + + # # 更新多头持仓信息,设置合理的跟踪止损初始值 + # self.update_stop_order_dict(instrument_id, 'long', volume, price, sl_price, tp_price, initial_trailing_stop) + # self.pos = volume # 更新全局持仓状态 + + # # 兼容旧代码 + # self.long_trailing_stop_price = initial_trailing_stop + # self.sl_long_price = sl_price + # self.save_to_csv(instrument_id) + + else: # 卖出,开空头 + print(f"开空头成交: {instrument_id}, 价格: {price}, 数量: {volume}") + # 如果有多头持仓,先清空 + if instrument_id in self.stop_order_dict and self.stop_order_dict[instrument_id]['long']['position'] > 0: + self.clear_position_info(instrument_id, 'long') + + # # 设置空头持仓信息 + # sl_price = price * (1 + self.fixed_stop_loss_percent) # 默认止损价 + # tp_price = price * (1 - self.trailing_stop_percent) # 默认止盈价 + + # # 设置初始跟踪止损价,与开仓价保持一定距离 + # initial_trailing_stop = price * (1 + self.trailing_stop_percent) + + # log_message = f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%" + # STOPLOSS_LOGGER.info(log_message) + + # # 更新空头持仓信息,设置合理的跟踪止损初始值 + # self.update_stop_order_dict(instrument_id, 'short', self.Lots, price, sl_price, tp_price, initial_trailing_stop) + # self.pos = -1 # 更新全局持仓状态 + + # # 兼容旧代码 + # self.short_trailing_stop_price = initial_trailing_stop + # self.sl_shor_price = sl_price + # self.save_to_csv(instrument_id) + + def OnRspOrderInsert(self, pInputOrder, pRspInfo, nRequestID, bIsLast): + print("||OnRspOrderInsert||", pInputOrder, pRspInfo, nRequestID, bIsLast) + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + # 订单状态通知 + def OnRtnOrder(self, pOrder): + print("||订单回报||", pOrder) + + def Join(self): + data = None + # 记录上次加载止盈止损信息的时间和合约 + last_load_time = {} + + while True: + if self.status == 0 and not self.md_queue.empty(): + + while not self.md_queue.empty(): + data = self.md_queue.get(block=False) + instrument_id = data['InstrumentID'].decode() # 品种代码 + self.symbols=instrument_id + # 首次运行时加载历史数据 + if self.kgdata: + self.load_history_data(instrument_id) + self.kgdata = False + + # 加载该合约的止盈止损信息,避免频繁加载 + current_time = time.time() + if instrument_id not in last_load_time or current_time - last_load_time.get(instrument_id, 0) > 60: # 每60秒才重新加载一次 + self.load_stop_orders_from_file(instrument_id) + last_load_time[instrument_id] = current_time + + # 检查止盈止损条件 + self.check_stop_conditions(data) + + # 在每个tick都检查和处理AI交易信号 - 移到这里以提高执行速度 + if self.use_ai_model: + self.check_and_process_ai_signals(data) + + # 原有代码... + self.read_to_csv(instrument_id) + self.day_data_reset(data) + tickcome(data) + #新K线开始,启动交易程序 and 保存行情数据 + if len(trader_df)>self.cont_df and len(trader_df)>0: + # 计算日均线 + trader_df['dayma'] = trader_df['close'].mean() + + # 计算累积的delta值 + trader_df['delta'] = trader_df['delta'].astype(float) + trader_df['delta累计'] = trader_df['delta'].cumsum() + + # 检查文件是否存在 + json_file_path = f"traderdata/{instrument_id}_ofdata.json" + + # 确保待保存的新数据中datetime字段是格式化的日期时间字符串 + if 'datetime' in trader_df.columns: + # 无论什么类型,都统一转换为字符串格式 + trader_df['datetime'] = trader_df['datetime'].astype(str) + + if os.path.exists(json_file_path): + try: + # 读取现有数据 + existing_df = pd.read_json(json_file_path, lines=True) + + # 确保现有数据中的datetime字段是字符串类型 + if 'datetime' in existing_df.columns: + existing_df['datetime'] = existing_df['datetime'].astype(str) + + # 合并新数据 + combined_df = pd.concat([existing_df, trader_df.tail(1)], ignore_index=True) + # 保存合并后的数据,使用lines=True确保每行是独立的JSON对象 + combined_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + except Exception as e: + print(f"读取或保存JSON文件时出错: {e}") + # 如果读取出错,直接保存当前数据 + trader_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + else: + # 创建新文件并保存整个DataFrame + trader_df.to_json(json_file_path, orient='records', force_ascii=False, lines=True) + + # 更新跟踪止损价格 - 兼容旧版本代码 + if self.long_trailing_stop_price >0 and self.pos>0: + self.long_trailing_stop_price = trader_df['low'].iloc[-1] if self.long_trailing_stop_price0 and self.pos<0: + self.short_trailing_stop_price = trader_df['high'].iloc[-1] if trader_df['high'].iloc[-1] self.trader_rows: + AI_THREAD_RUNNING = True + ai_thread = threading.Thread( + target=self.background_model_call, + args=(trader_df, instrument_id) + ) + ai_thread.daemon = True # 设置为守护线程,主程序退出时自动结束 + ai_thread.start() + print("启动AI分析线程...") + + print(trader_df['datetime']) + self.cont_df=len(trader_df) + else: + time.sleep(0.5) + + def background_model_call(self, data_df, instrument_id): + """ + 在后台线程中调用大模型,并将交易信号放入队列 + + Args: + data_df: 包含订单流数据的DataFrame + instrument_id: 合约ID + """ + global AI_THREAD_RUNNING + + start_time = datetime.now() + log_message = f"\n===== 开始AI分析 [{start_time.strftime('%Y-%m-%d %H:%M:%S')}] =====" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = f"正在分析合约: {instrument_id}" + print(log_message) + AI_LOGGER.info(log_message) + + try: + # 复制DataFrame以避免在不同线程间共享数据可能导致的问题 + df_copy = data_df.copy() + + # 输出分析的数据行数 + log_message = f"分析数据行数: {len(df_copy)}" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = f"最新价格: {df_copy['close'].iloc[-1] if len(df_copy) > 0 else 'N/A'}" + print(log_message) + AI_LOGGER.info(log_message) + + # 调用大模型获取交易信号 + trading_signal = call_deepseek_model(df_copy, self) # 传递self参数 + + # 计算分析耗时 + end_time = datetime.now() + elapsed = (end_time - start_time).total_seconds() + + # 将交易信号和合约ID一起放入队列 + signal_data = { + 'signal': trading_signal, + 'instrument_id': instrument_id, + 'timestamp': end_time # 使用结束时间作为时间戳 + } + + AI_SIGNAL_QUEUE.put(signal_data) + + log_message = f"AI模型分析完成,结果已放入队列,耗时: {elapsed:.2f}秒" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = f"分析结果: {trading_signal}" + print(log_message) + AI_LOGGER.info(log_message) + + log_message = "===== AI分析完成 =====" + print(log_message + "\n") + AI_LOGGER.info(log_message) + except Exception as e: + end_time = datetime.now() + elapsed = (end_time - start_time).total_seconds() + + log_message = f"AI模型分析线程出现异常: {e}" + print(log_message) + AI_LOGGER.error(log_message) + + print(f"异常详情:") + import traceback + error_traceback = traceback.format_exc() + AI_LOGGER.error(f"异常详情:\n{error_traceback}") + traceback.print_exc() + + log_message = f"分析失败,耗时: {elapsed:.2f}秒" + print(log_message) + AI_LOGGER.error(log_message) + + log_message = "===== AI分析异常结束 =====" + print(log_message + "\n") + AI_LOGGER.error(log_message) + finally: + # 标记线程已完成 + AI_THREAD_RUNNING = False + + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + def check_and_process_ai_signals(self, data): + """检查并处理AI产生的交易信号""" + if AI_SIGNAL_QUEUE.empty(): + return + + # 从队列中获取信号 + signal_data = AI_SIGNAL_QUEUE.get() + trading_signal = signal_data['signal'] + instrument_id = signal_data['instrument_id'] + signal_time = signal_data['timestamp'] + + # 验证合约ID是否匹配,不匹配则放回队列 + if instrument_id != data['InstrumentID'].decode(): + AI_SIGNAL_QUEUE.put(signal_data) + return + + # 提取交易信号数据 + action = trading_signal.get('action', '不操作') + confidence = trading_signal.get('confidence', 0) + reason = trading_signal.get('reason', '') + stop_loss = trading_signal.get('stop_loss', 0) + take_profit = trading_signal.get('take_profit', 0) + trailing_percent = trading_signal.get('trailing_percent', 0) + + # 记录日志 + log_lines = [ + f"\n===== 执行AI模型交易信号 [{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] =====", + f"信号生成时间: {signal_time.strftime('%Y-%m-%d %H:%M:%S')}", + f"信号类型: {action}", + #f"置信度: {confidence}", + f"理由: {reason}" + ] + for line in log_lines: + print(line) + SIGNAL_LOGGER.info(line) + + # 确保合约在止损止盈字典中 + self._ensure_stop_order_dict(instrument_id) + current_stops = self.stop_order_dict[instrument_id] + + # 处理跟踪止损百分比更新 + self._update_trailing_stop_percent(trailing_percent, instrument_id, data) + + # # 只有当置信度大于等于6时才执行交易(已经弃用,不再根据置信度执行交易) + # if confidence < 6: + # print(f"信号置信度{confidence}低于执行阈值(6),不执行交易") + # print("===== 交易信号处理完成 =====\n") + # return + + print(f"开始执行交易,当前价格: 买一{data['BidPrice1']} / 卖一{data['AskPrice1']}") + + # 根据不同交易行为执行相应操作 + if action == '开多' and current_stops['long']['position'] <= 0: + self._handle_open_long(data, instrument_id, stop_loss, take_profit) + + elif action == '开空' and current_stops['short']['position'] <= 0: + self._handle_open_short(data, instrument_id, stop_loss, take_profit) + + elif action == '平多' and current_stops['long']['position'] > 0: + self._handle_close_long(data, instrument_id) + + elif action == '平空' and current_stops['short']['position'] > 0: + self._handle_close_short(data, instrument_id) + + elif action == '平多开空' and current_stops['long']['position'] > 0: + self._handle_close_long_open_short(data, instrument_id, stop_loss, take_profit) + + elif action == '平空开多' and current_stops['short']['position'] > 0: + self._handle_close_short_open_long(data, instrument_id, stop_loss, take_profit) + + elif action == '不操作': + self._handle_adjust_stop_levels(instrument_id, stop_loss, take_profit) + + print("===== 交易信号执行完成 =====\n") + + def _ensure_stop_order_dict(self, instrument_id): + """确保指定合约在止损止盈字典中存在""" + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + def _update_trailing_stop_percent(self, trailing_percent, instrument_id, data): + """更新跟踪止损百分比""" + if not (0.0001 <= trailing_percent <= 0.001): + return + + old_percent = self.trailing_stop_percent + self.trailing_stop_percent = trailing_percent + log_message = f"更新跟踪止损百分比参数: {old_percent*100:.3f}% -> {trailing_percent*100:.3f}%" + STOPLOSS_LOGGER.info(log_message) + + current_stops = self.stop_order_dict[instrument_id] + + # 更新多头持仓的跟踪止损价 + if current_stops['long']['position'] > 0: + new_trailing_stop = float(data['BidPrice1']) * (1 - self.trailing_stop_percent) + old_trailing_stop = current_stops['long']['trailing_stop'] + + if new_trailing_stop > old_trailing_stop: + self.update_stop_order_dict(instrument_id, 'long', None, None, None, None, new_trailing_stop) + self.long_trailing_stop_price = new_trailing_stop # 兼容旧代码 + self.save_to_csv(instrument_id) + + # 更新空头持仓的跟踪止损价 + elif current_stops['short']['position'] > 0: + new_trailing_stop = float(data['AskPrice1']) * (1 + self.trailing_stop_percent) + old_trailing_stop = current_stops['short']['trailing_stop'] + + if new_trailing_stop < old_trailing_stop or old_trailing_stop == 0: + self.update_stop_order_dict(instrument_id, 'short', None, None, None, None, new_trailing_stop) + self.short_trailing_stop_price = new_trailing_stop # 兼容旧代码 + self.save_to_csv(instrument_id) + + def _handle_open_long(self, data, instrument_id, stop_loss, take_profit): + """处理开多头仓位""" + # 如果持有空头头寸,先平空 + current_stops = self.stop_order_dict[instrument_id] + if current_stops['short']['position'] > 0: + print('执行平空操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['AskPrice1']+self.py, + current_stops['short']['position'], + b'0', b'3') + self.clear_position_info(instrument_id, 'short') + + # 开多 + print('执行开多操作') + entry_price = float(data['AskPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price+self.py, self.Lots, b'0', b'0') + + # 设置止损止盈 + sl_price = stop_loss + tp_price = take_profit + initial_trailing_stop = entry_price * (1 - self.trailing_stop_percent) + + # 记录止损止盈设置 + STOPLOSS_LOGGER.info(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新持仓信息 + self.update_stop_order_dict(instrument_id, 'long', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = 1 # 更新全局持仓状态 + + # 兼容旧代码 + self.long_trailing_stop_price = initial_trailing_stop + self.sl_long_price = sl_price + self.save_to_csv(instrument_id) + + def _handle_open_short(self, data, instrument_id, stop_loss, take_profit): + """处理开空头仓位""" + # 如果持有多头头寸,先平多 + current_stops = self.stop_order_dict[instrument_id] + if current_stops['long']['position'] > 0: + print('执行平多操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['BidPrice1']-self.py, + current_stops['long']['position'], + b'1', b'3') + self.clear_position_info(instrument_id, 'long') + + # 开空 + print('执行开空操作') + entry_price = float(data['BidPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price-self.py, self.Lots, b'1', b'0') + + # 设置止损止盈 + sl_price = stop_loss + tp_price = take_profit + initial_trailing_stop = entry_price * (1 + self.trailing_stop_percent) + + # 记录止损止盈设置 + STOPLOSS_LOGGER.info(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新持仓信息 + self.update_stop_order_dict(instrument_id, 'short', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = -1 # 更新全局持仓状态 + + # 兼容旧代码 + self.short_trailing_stop_price = initial_trailing_stop + self.sl_shor_price = sl_price + self.save_to_csv(instrument_id) + + def _handle_close_long(self, data, instrument_id): + """处理平多头仓位""" + current_stops = self.stop_order_dict[instrument_id] + print('执行平多操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['BidPrice1']-self.py, + current_stops['long']['position'], + b'1', b'3') + self.clear_position_info(instrument_id, 'long') + + def _handle_close_short(self, data, instrument_id): + """处理平空头仓位""" + current_stops = self.stop_order_dict[instrument_id] + print('执行平空操作') + self.insert_order(data['ExchangeID'], data['InstrumentID'], + data['AskPrice1']+self.py, + current_stops['short']['position'], + b'0', b'3') + self.clear_position_info(instrument_id, 'short') + + def _handle_close_long_open_short(self, data, instrument_id, stop_loss, take_profit): + """处理平多开空操作""" + print('执行平多开空操作') + + # 第一步:平多 + self._handle_close_long(data, instrument_id) + + # 第二步:开空 + print('2. 执行开空操作') + entry_price = float(data['BidPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price-self.py, self.Lots, b'1', b'0') + + # 设置止损止盈 + sl_price = stop_loss + tp_price = take_profit + initial_trailing_stop = entry_price * (1 + self.trailing_stop_percent) + + # 记录止损止盈设置 + STOPLOSS_LOGGER.info(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新持仓信息 + self.update_stop_order_dict(instrument_id, 'short', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = -1 # 更新全局持仓状态 + + # 兼容旧代码 + self.short_trailing_stop_price = initial_trailing_stop + self.sl_shor_price = sl_price + self.save_to_csv(instrument_id) + + def _handle_close_short_open_long(self, data, instrument_id, stop_loss, take_profit): + """处理平空开多操作""" + print('执行平空开多操作') + + # 第一步:平空 + self._handle_close_short(data, instrument_id) + + # 第二步:开多 + print('2. 执行开多操作') + entry_price = float(data['AskPrice1']) + self.insert_order(data['ExchangeID'], data['InstrumentID'], + entry_price+self.py, self.Lots, b'0', b'0') + + # 设置止损止盈 + sl_price = stop_loss + tp_price = take_profit + initial_trailing_stop = entry_price * (1 - self.trailing_stop_percent) + + # 记录止损止盈设置 + STOPLOSS_LOGGER.info(f"设置止损价: {sl_price}, 止盈价: {tp_price}, 跟踪止损价: {initial_trailing_stop}, 跟踪百分比: {self.trailing_stop_percent*100:.3f}%") + + # 更新持仓信息 + self.update_stop_order_dict(instrument_id, 'long', self.Lots, entry_price, sl_price, tp_price, initial_trailing_stop) + self.pos = 1 # 更新全局持仓状态 + + # 兼容旧代码 + self.long_trailing_stop_price = initial_trailing_stop + self.sl_long_price = sl_price + self.save_to_csv(instrument_id) + + def _handle_adjust_stop_levels(self, instrument_id, stop_loss, take_profit): + """调整止损止盈价格""" + current_stops = self.stop_order_dict[instrument_id] + + # 调整止损价 + if stop_loss > 0: + if current_stops['long']['position'] > 0: # 多头持仓 + self.update_stop_order_dict(instrument_id, 'long', None, None, stop_loss, None, None) + print(f'已调整多头止损价: {stop_loss}') + self.sl_long_price = stop_loss # 兼容旧代码 + self.save_to_csv(instrument_id) + elif current_stops['short']['position'] > 0: # 空头持仓 + self.update_stop_order_dict(instrument_id, 'short', None, None, stop_loss, None, None) + print(f'已调整空头止损价: {stop_loss}') + self.sl_shor_price = stop_loss # 兼容旧代码 + self.save_to_csv(instrument_id) + + # 调整止盈价 + if take_profit > 0: + if current_stops['long']['position'] > 0: # 多头持仓 + self.update_stop_order_dict(instrument_id, 'long', None, None, None, take_profit, None) + print(f'已调整多头止盈价: {take_profit}') + self.save_to_csv(instrument_id) + elif current_stops['short']['position'] > 0: # 空头持仓 + self.update_stop_order_dict(instrument_id, 'short', None, None, None, take_profit, None) + print(f'已调整空头止盈价: {take_profit}') + self.save_to_csv(instrument_id) + + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + #注意:运行前请先安装好algoplus, + # pip install AlgoPlus + #http://www.algo.plus/ctp/python/0103001.html + + def format_data_for_llm(self, df): + """ + 将DataFrame格式化为适合LLM分析的文本格式,包含历史交易信息 + """ + # 提取最近几条记录 + recent_data = df.tail(self.trader_rows) + + # 构建基本信息 + data_text = "订单流数据分析:\n\n" + + # 提取最新行情数据 + instrument_id = recent_data['symbol'].iloc[-1] + + # 添加最新价格和交易量信息 + data_text += f"当前时间: {recent_data['datetime'].iloc[-1]}\n" + data_text += f"当前价格: {recent_data['close'].iloc[-1]}\n" + data_text += f"开盘价: {recent_data['open'].iloc[-1]}\n" + data_text += f"最高价: {recent_data['high'].iloc[-1]}\n" + data_text += f"最低价: {recent_data['low'].iloc[-1]}\n" + data_text += f"成交量: {recent_data['volume'].iloc[-1]}\n" + + # 计算价格趋势 + if len(recent_data) >= 5: + price_trend = recent_data['close'].pct_change().tail(5).mean() * 100 + data_text += f"价格短期趋势: {'上涨' if price_trend > 0 else '下跌'} ({price_trend:.2f}%)\n" + + # 计算价格波动性 + if len(recent_data) >= 5: + volatility = recent_data['close'].pct_change().tail(5).std() * 100 + data_text += f"价格波动性: {volatility:.2f}%\n" + + # 添加支撑和阻力位分析 + recent_high = recent_data['high'].max() + recent_low = recent_data['low'].min() + data_text += f"近期阻力位: {recent_high}\n" + data_text += f"近期支撑位: {recent_low}\n" + + # 添加均线分析 - 计算5、10、20均线 + if len(df) >= 20: + # 计算均线 + ma5 = df['close'].rolling(5).mean().iloc[-1] + ma10 = df['close'].rolling(10).mean().iloc[-1] + ma20 = df['close'].rolling(20).mean().iloc[-1] + + data_text += f"MA5: {ma5:.2f}\n" + data_text += f"MA10: {ma10:.2f}\n" + data_text += f"MA20: {ma20:.2f}\n" + + # 判断均线形态 + if abs(ma5 - ma10) / ma10 < 0.01 and abs(ma10 - ma20) / ma20 < 0.01: + ma_pattern = "均线粘合" + elif ma5 > ma10 and ma10 > ma20: + ma_pattern = "多头排列" + elif ma5 < ma10 and ma10 < ma20: + ma_pattern = "空头排列" + elif ma5 > ma10 and ma10 < ma20: + ma_pattern = "金叉形态" + elif ma5 < ma10 and ma10 > ma20: + ma_pattern = "死叉形态" + else: + ma_pattern = "无明显形态" + + data_text += f"均线形态: {ma_pattern}\n" + + # 价格与均线关系 + current_price = df['close'].iloc[-1] + data_text += f"价格相对MA5: {'上方' if current_price > ma5 else '下方'} ({(current_price/ma5-1)*100:.2f}%)\n" + data_text += f"价格相对MA10: {'上方' if current_price > ma10 else '下方'} ({(current_price/ma10-1)*100:.2f}%)\n" + data_text += f"价格相对MA20: {'上方' if current_price > ma20 else '下方'} ({(current_price/ma20-1)*100:.2f}%)\n" + + # 日内超涨超跌分析 + if len(df) >= 20: + # 计算日内振幅 + daily_high = df['high'].iloc[-20:].max() + daily_low = df['low'].iloc[-20:].min() + daily_range = (daily_high - daily_low) / daily_low * 100 + + # 当前价格在日内范围的位置 + current_in_range = (df['close'].iloc[-1] - daily_low) / (daily_high - daily_low) * 100 if (daily_high - daily_low) > 0 else 50 + + data_text += f"日内振幅: {daily_range:.2f}%\n" + data_text += f"价格在日内范围的位置: {current_in_range:.2f}% (0%为日低, 100%为日高)\n" + + # 判断超涨超跌 + if current_in_range > 85: + data_text += "日内状态: 可能超涨\n" + elif current_in_range < 15: + data_text += "日内状态: 可能超跌\n" + else: + data_text += "日内状态: 正常区间\n" + + # 形态识别 + if len(df) >= 20: + # 简单K线形态识别 + recent_k = df.tail(5).copy() + + # 计算实体和影线 + recent_k['body'] = abs(recent_k['close'] - recent_k['open']) + recent_k['upper_shadow'] = recent_k.apply(lambda x: x['high'] - max(x['open'], x['close']), axis=1) + recent_k['lower_shadow'] = recent_k.apply(lambda x: min(x['open'], x['close']) - x['low'], axis=1) + + # 最新K线特征 + latest_k = recent_k.iloc[-1] + prev_k = recent_k.iloc[-2] if len(recent_k) > 1 else None + + data_text += "\nK线形态分析:\n" + + # 判断最新K线类型 + if latest_k['body'] == 0: + k_type = "十字星" + elif latest_k['upper_shadow'] > 2 * latest_k['body'] and latest_k['lower_shadow'] < 0.5 * latest_k['body']: + k_type = "上影线长" + elif latest_k['lower_shadow'] > 2 * latest_k['body'] and latest_k['upper_shadow'] < 0.5 * latest_k['body']: + k_type = "下影线长" + elif latest_k['close'] > latest_k['open'] and latest_k['body'] > np.mean(recent_k['body']): + k_type = "大阳线" + elif latest_k['close'] < latest_k['open'] and latest_k['body'] > np.mean(recent_k['body']): + k_type = "大阴线" + elif latest_k['close'] > latest_k['open']: + k_type = "小阳线" + elif latest_k['close'] < latest_k['open']: + k_type = "小阴线" + else: + k_type = "普通K线" + + data_text += f"最新K线类型: {k_type}\n" + + # 判断简单组合形态 + if prev_k is not None: + if prev_k['close'] < prev_k['open'] and latest_k['close'] > latest_k['open'] and latest_k['open'] <= prev_k['close'] and latest_k['close'] > prev_k['open']: + data_text += "组合形态: 可能构成看涨吞没形态\n" + elif prev_k['close'] > prev_k['open'] and latest_k['close'] < latest_k['open'] and latest_k['open'] >= prev_k['close'] and latest_k['close'] < prev_k['open']: + data_text += "组合形态: 可能构成看跌吞没形态\n" + elif prev_k['close'] < prev_k['open'] and latest_k['close'] > latest_k['open'] and latest_k['body'] > 1.5 * prev_k['body']: + data_text += "组合形态: 可能构成看涨势能增强\n" + elif prev_k['close'] > prev_k['open'] and latest_k['close'] < latest_k['open'] and latest_k['body'] > 1.5 * prev_k['body']: + data_text += "组合形态: 可能构成看跌势能增强\n" + + # 添加订单流特定数据 + data_text += f"\n订单流净值: {recent_data['delta'].iloc[-1]}\n" + data_text += f"订单流累计值: {recent_data['delta累计'].iloc[-1] if 'delta累计' in recent_data.columns else '无数据'}\n" + data_text += f"堆积指标: {recent_data['dj'].iloc[-1]}\n" + + # 添加日均线数据 + data_text += f"日均线: {recent_data['dayma'].iloc[-1] if 'dayma' in recent_data.columns else '无数据'}\n" + + # 添加价格与日均线的关系 + if 'dayma' in recent_data.columns: + price_above_ma = recent_data['close'].iloc[-1] > recent_data['dayma'].iloc[-1] + data_text += f"价格位于日均线: {'上方' if price_above_ma else '下方'}\n" + + # 订单流全面分析 + data_text += "\n订单流详细分析:\n" + + # 计算订单流趋势 + if len(recent_data) >= 5: + delta_values = recent_data['delta'].values + delta_trend = np.mean(np.diff(delta_values)) if len(delta_values) > 1 else 0 + data_text += f"订单流趋势: {'增强中' if delta_trend > 0 else '减弱中'} (变化率: {delta_trend:.2f})\n" + + # 计算订单流强度(使用绝对值的平均值) + delta_strength = np.mean(np.abs(recent_data['delta'].values)) + data_text += f"订单流强度: {delta_strength:.2f}\n" + + # 订单流指标超涨超跌分析 + if len(df) >= 20: + delta_values = df['delta'].iloc[-20:].values + delta_mean = np.mean(delta_values) + delta_std = np.std(delta_values) + current_delta = df['delta'].iloc[-1] + + # Z分数计算 + if delta_std > 0: + delta_z = (current_delta - delta_mean) / delta_std + data_text += f"订单流偏离度(Z分数): {delta_z:.2f}\n" + + if delta_z > 2: + data_text += "订单流状态: 可能超买\n" + elif delta_z < -2: + data_text += "订单流状态: 可能超卖\n" + else: + data_text += "订单流状态: 正常区间\n" + + # 买卖力量对比 + if 'bid_v' in recent_data.columns and 'ask_v' in recent_data.columns: + bid_power = recent_data['bid_v'].mean() + ask_power = recent_data['ask_v'].mean() + power_ratio = bid_power / ask_power if ask_power != 0 else float('inf') + data_text += f"买卖比例: {power_ratio:.2f} (>1买方强势,<1卖方强势)\n" + + # 订单流累计趋势 + if 'delta累计' in recent_data.columns and len(recent_data) >= 2: + cumulative_start = recent_data['delta累计'].iloc[0] + cumulative_end = recent_data['delta累计'].iloc[-1] + cumulative_change = cumulative_end - cumulative_start + data_text += f"累计订单流变化: {cumulative_change:.2f} (从 {cumulative_start:.2f} 到 {cumulative_end:.2f})\n" + + # 订单流波动性 + delta_volatility = np.std(recent_data['delta'].values) + data_text += f"订单流波动性: {delta_volatility:.2f}\n" + + # 订单流与价格相关性 + if len(recent_data) >= 10: # 确保有足够数据计算相关性 + price_changes = recent_data['close'].pct_change().dropna() + delta_changes = recent_data['delta'].iloc[1:].reset_index(drop=True) # 对齐索引 + if len(price_changes) > 0 and len(delta_changes) == len(price_changes): + try: + correlation = np.corrcoef(price_changes, delta_changes)[0, 1] if len(price_changes) > 1 else 0 + data_text += f"订单流与价格相关性: {correlation:.2f}\n" + data_text += f"相关性解读: {'强正相关' if correlation > 0.7 else '正相关' if correlation > 0.3 else '弱相关' if correlation > -0.3 else '负相关' if correlation > -0.7 else '强负相关'}\n" + except: + data_text += "订单流与价格相关性: 计算错误\n" + + # 订单流势能分析(最近几分钟的方向) + recent_deltas = recent_data['delta'].tail(5).values + positive_count = sum(1 for x in recent_deltas if x > 0) + negative_count = sum(1 for x in recent_deltas if x < 0) + data_text += f"最近订单流方向: {'多头主导' if positive_count > negative_count else '空头主导' if positive_count < negative_count else '方向不明'} ({positive_count}正/{negative_count}负)\n" + + # 订单流强弱可视化 + delta_last_10 = recent_data['delta'].tail(10).values # 使用更多数据计算标准差 + delta_std = np.std(delta_last_10) + delta_last_5 = recent_data['delta'].tail(5).values + strength_visual = "" + for val in delta_last_5: + if val > 2 * delta_std: # 大于2个标准差 + strength_visual += "↑↑ " + elif val > 0.5 * delta_std: # 大于0.5个标准差 + strength_visual += "↑ " + elif val < -2 * delta_std: # 小于-2个标准差 + strength_visual += "↓↓ " + elif val < -0.5 * delta_std: # 小于-0.5个标准差 + strength_visual += "↓ " + else: + strength_visual += "→ " + data_text += f"订单流强弱可视化 (最近5分钟): {strength_visual}\n" + data_text += f"当前delta标准差: {delta_std:.2f}\n" + + # 添加最近几条记录的趋势 + data_text += "\n最近几条记录的趋势:\n" + + # 添加最近5条记录的关键指标变化 + for i in range(min(5, len(recent_data))): + idx = -(i+1) + data_text += f"记录 {i+1}: 时间={recent_data['datetime'].iloc[idx]}, 价格={recent_data['close'].iloc[idx]}, " + data_text += f"订单流净值={recent_data['delta'].iloc[idx]}, 堆积={recent_data['dj'].iloc[idx]}\n" + + # 添加当前持仓信息,使用新的止盈止损字典 + data_text += "\n当前持仓状态:\n" + + # 获取该合约的止盈止损信息 + stops = self.stop_order_dict.get(instrument_id, { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + }) + + # 获取多头和空头持仓信息 + long_pos = stops.get('long', {}).get('position', 0) + short_pos = stops.get('short', {}).get('position', 0) + + # 判断当前持仓方向 + if long_pos > 0: + data_text += f"持仓方向: 多头\n" + data_text += f"持仓数量: {long_pos}\n" + data_text += f"开仓价格: {stops['long']['entry_price']}\n" + data_text += f"止损价格: {stops['long']['stop_loss']}\n" + data_text += f"止盈价格: {stops['long']['take_profit']}\n" + data_text += f"跟踪止损价: {stops['long']['trailing_stop']}\n" + + # 计算当前盈亏 + current_price = recent_data['close'].iloc[-1] + profit_percent = (current_price - stops['long']['entry_price']) / stops['long']['entry_price'] * 100 + data_text += f"当前盈亏: {profit_percent:.2f}%\n" + elif short_pos > 0: + data_text += f"持仓方向: 空头\n" + data_text += f"持仓数量: {short_pos}\n" + data_text += f"开仓价格: {stops['short']['entry_price']}\n" + data_text += f"止损价格: {stops['short']['stop_loss']}\n" + data_text += f"止盈价格: {stops['short']['take_profit']}\n" + data_text += f"跟踪止损价: {stops['short']['trailing_stop']}\n" + + # 计算当前盈亏 + current_price = recent_data['close'].iloc[-1] + profit_percent = (stops['short']['entry_price'] - current_price) / stops['short']['entry_price'] * 100 + data_text += f"当前盈亏: {profit_percent:.2f}%\n" + else: + data_text += "持仓方向: 空仓\n" + data_text += "持仓数量: 0\n" + + # 添加风险管理参数信息 + data_text += "\n风险管理参数设置:\n" + data_text += f"固定止损百分比: {self.fixed_stop_loss_percent * 100:.2f}%\n" + data_text += f"跟踪止损百分比: {self.trailing_stop_percent * 100:.2f}%\n" + + # 添加交易建议提示 + data_text += "\n请根据以上信息,分析当前市场状态并给出交易建议。需要考虑:\n" + data_text += "1. 当前持仓状态是否合理\n" + data_text += "2. 是否需要调整止损止盈位置\n" + data_text += "3. 是否需要平仓或反手\n" + data_text += "4. 是否适合开新仓\n" + data_text += "5. 是否需要调整跟踪止损百分比参数(范围建议:0.0001-0.001)\n" + data_text += "6. 是否出现抄底摸顶机会\n" + data_text += "7. 是否存在日内波段交易机会\n" + + return data_text + + def update_stop_order_dict(self, instrument_id, direction, position, entry_price=None, stop_loss=None, take_profit=None, trailing_stop=None): + """更新止损止盈信息""" + # 初始化合约的止损止盈字典 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + + # 获取当前值 + current_values = self.stop_order_dict[instrument_id][direction].copy() + + # 更新值 + if position is not None: + self.stop_order_dict[instrument_id][direction]['position'] = position + if entry_price is not None: + self.stop_order_dict[instrument_id][direction]['entry_price'] = entry_price + if stop_loss is not None: + self.stop_order_dict[instrument_id][direction]['stop_loss'] = stop_loss + if take_profit is not None: + self.stop_order_dict[instrument_id][direction]['take_profit'] = take_profit + if trailing_stop is not None: + self.stop_order_dict[instrument_id][direction]['trailing_stop'] = trailing_stop + + # 记录变化值 + updated_values = self.stop_order_dict[instrument_id][direction] + change_log = f"更新{instrument_id} {direction}头寸止损止盈: " + changes = [] + + if position is not None and position != current_values['position']: + changes.append(f"仓位: {current_values['position']} -> {position}") + if entry_price is not None and entry_price != current_values['entry_price']: + changes.append(f"入场价: {current_values['entry_price']} -> {entry_price}") + if stop_loss is not None and stop_loss != current_values['stop_loss']: + changes.append(f"止损价: {current_values['stop_loss']} -> {stop_loss}") + if take_profit is not None and take_profit != current_values['take_profit']: + changes.append(f"止盈价: {current_values['take_profit']} -> {take_profit}") + if trailing_stop is not None and trailing_stop != current_values['trailing_stop']: + changes.append(f"跟踪止损价: {current_values['trailing_stop']} -> {trailing_stop}") + + if changes: + change_log += ", ".join(changes) + STOPLOSS_LOGGER.info(change_log) + + # 保存到文件 + self.save_stop_orders_to_file(instrument_id) + + def save_stop_orders_to_file(self, instrument_id): + """将止盈止损信息保存到文件""" + # 使用完整的合约代码 + symbol = str(instrument_id) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}_stops.json") + + # 如果文件夹不存在则创建 + if not os.path.exists(folder_path): + os.makedirs(folder_path, exist_ok=True) + + # 保存字典到JSON文件 + with open(file_path, 'w') as f: + json.dump(self.stop_order_dict.get(instrument_id, {}), f, indent=4) + + # 获取该合约的止盈止损信息 + stops = self.stop_order_dict.get(instrument_id, { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + }) + + # 打印详细信息 + print(f"\n===== 已更新止盈止损信息: {instrument_id} =====") + print(f"多头持仓: {stops['long']['position']} 手") + print(f"多头入场价: {stops['long']['entry_price']}") + print(f"多头止损价: {stops['long']['stop_loss']}") + print(f"多头止盈价: {stops['long']['take_profit']}") + print(f"多头跟踪止损: {stops['long']['trailing_stop']}") + print(f"空头持仓: {stops['short']['position']} 手") + print(f"空头入场价: {stops['short']['entry_price']}") + print(f"空头止损价: {stops['short']['stop_loss']}") + print(f"空头止盈价: {stops['short']['take_profit']}") + print(f"空头跟踪止损: {stops['short']['trailing_stop']}") + print("======================================\n") + + def load_stop_orders_from_file(self, instrument_id): + """从文件加载止盈止损信息""" + # 如果合约ID已经在字典中,直接返回,避免重复加载 + if instrument_id in self.stop_order_dict: + return True + + # 使用完整的合约代码 + symbol = str(instrument_id) + folder_path = "traderdata" + file_path = os.path.join(folder_path, f"{symbol}_stops.json") + + if os.path.exists(file_path): + try: + with open(file_path, 'r') as f: + stops_data = json.load(f) + + # 更新字典 + self.stop_order_dict[instrument_id] = stops_data + print(f"首次加载止盈止损信息: {instrument_id}") + return True + except Exception as e: + print(f"加载止盈止损信息失败: {e}") + + # 如果文件不存在,初始化空字典结构 + if instrument_id not in self.stop_order_dict: + self.stop_order_dict[instrument_id] = { + 'long': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0}, + 'short': {'position': 0, 'entry_price': 0, 'stop_loss': 0, 'take_profit': 0, 'trailing_stop': 0} + } + print(f"初始化止盈止损结构: {instrument_id}") + + return False + + def check_stop_conditions(self, data): + """检查是否满足止盈止损条件""" + instrument_id = data['InstrumentID'].decode() + + # 如果该合约不在止盈止损字典中,直接返回 + if instrument_id not in self.stop_order_dict: + return + + current_bid = float(data['BidPrice1']) # 当前买价 + current_ask = float(data['AskPrice1']) # 当前卖价 + + stops = self.stop_order_dict[instrument_id] + + # 检查多头止盈止损 + if stops['long']['position'] > 0: + entry_price = stops['long']['entry_price'] # 获取开仓价 + + # 检查止损 + if stops['long']['stop_loss'] > 0 and current_bid <= stops['long']['stop_loss']: + print(f"触发多头止损: {instrument_id}, 价格: {current_bid}, 止损价: {stops['long']['stop_loss']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 检查跟踪止损 - 确保只在价格高于开仓价且低于跟踪止损价时触发 + elif stops['long']['trailing_stop'] > 0 and current_bid < stops['long']['trailing_stop'] and current_bid > entry_price: + print(f"触发多头跟踪止损: {instrument_id}, 价格: {current_bid}, 跟踪止损价: {stops['long']['trailing_stop']}, 开仓价: {entry_price}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 检查止盈 + elif stops['long']['take_profit'] > 0 and current_bid >= stops['long']['take_profit']: + print(f"触发多头止盈: {instrument_id}, 价格: {current_bid}, 止盈价: {stops['long']['take_profit']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_bid-self.py, + stops['long']['position'], b'1', b'3') + # 清空多头持仓信息 + self.clear_position_info(instrument_id, 'long') + self.pos = 0 # 更新全局持仓状态 + + # 更新跟踪止损价 - 严格限制只在价格高于开仓价时更新 + elif current_bid > entry_price and stops['long']['trailing_stop'] > 0: + # 只有当前价格比之前设置的跟踪止损价高一定幅度时才更新 + new_trailing_stop = current_bid * (1 - self.trailing_stop_percent) + + # 判断是否应该更新跟踪止损价 + should_update = False + + # 条件1: 新的跟踪止损价必须高于当前的跟踪止损价(跟踪止损上移) + if new_trailing_stop > stops['long']['trailing_stop']: + # 条件2: 如果存在止损价(非0),则新的跟踪止损价不应该触及人工设置的止损价 + if stops['long']['stop_loss'] == 0 or new_trailing_stop < stops['long']['stop_loss']: + should_update = True + + if should_update: + self.update_stop_order_dict(instrument_id, 'long', None, None, None, None, new_trailing_stop) + print(f"更新多头跟踪止损: {instrument_id}, 新跟踪止损价: {new_trailing_stop}, 开仓价: {entry_price}") + + # 检查空头止盈止损 + if stops['short']['position'] > 0: + entry_price = stops['short']['entry_price'] # 获取开仓价 + + # 检查止损 + if stops['short']['stop_loss'] > 0 and current_ask >= stops['short']['stop_loss']: + print(f"触发空头止损: {instrument_id}, 价格: {current_ask}, 止损价: {stops['short']['stop_loss']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + self.pos = 0 # 更新全局持仓状态 + + # 检查跟踪止损 - 确保只在价格低于开仓价且高于跟踪止损价时触发 + elif stops['short']['trailing_stop'] > 0 and current_ask > stops['short']['trailing_stop'] and current_ask < entry_price: + print(f"触发空头跟踪止损: {instrument_id}, 价格: {current_ask}, 跟踪止损价: {stops['short']['trailing_stop']}, 开仓价: {entry_price}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + self.pos = 0 # 更新全局持仓状态 + + # 检查止盈 + elif stops['short']['take_profit'] > 0 and current_ask <= stops['short']['take_profit']: + print(f"触发空头止盈: {instrument_id}, 价格: {current_ask}, 止盈价: {stops['short']['take_profit']}") + self.insert_order(data['ExchangeID'], data['InstrumentID'], current_ask+self.py, + stops['short']['position'], b'0', b'3') + # 清空空头持仓信息 + self.clear_position_info(instrument_id, 'short') + self.pos = 0 # 更新全局持仓状态 + + # 更新跟踪止损价 - 严格限制只在价格低于开仓价时更新 + elif current_ask < entry_price and stops['short']['trailing_stop'] > 0: + # 只有当前价格比之前设置的跟踪止损价低一定幅度时才更新 + new_trailing_stop = current_ask * (1 + self.trailing_stop_percent) + + # 判断是否应该更新跟踪止损价 + should_update = False + + # 条件1: 新的跟踪止损价必须低于当前的跟踪止损价(跟踪止损下移)或当前跟踪止损价为0 + if new_trailing_stop < stops['short']['trailing_stop'] or stops['short']['trailing_stop'] == 0: + # 条件2: 如果存在止损价(非0),则新的跟踪止损价不应该触及人工设置的止损价 + if stops['short']['stop_loss'] == 0 or new_trailing_stop > stops['short']['stop_loss']: + should_update = True + + if should_update: + self.update_stop_order_dict(instrument_id, 'short', None, None, None, None, new_trailing_stop) + print(f"更新空头跟踪止损: {instrument_id}, 新跟踪止损价: {new_trailing_stop}, 开仓价: {entry_price}") + + #保存数据 + + def clear_position_info(self, instrument_id, direction): + """ + 清空指定合约和方向的持仓信息 + + Args: + instrument_id: 合约ID + direction: 方向 'long' 或 'short' 或 'all' + """ + # 确保合约ID在字典中存在 + if instrument_id not in self.stop_order_dict: + return + + print(f"开始清空{instrument_id}的{direction}持仓信息") + if direction == 'long' or direction == 'all': + # 清空多头持仓信息 + self.stop_order_dict[instrument_id]['long'] = { + 'position': 0, + 'entry_price': 0, + 'stop_loss': 0, + 'take_profit': 0, + 'trailing_stop': 0 + } + # 兼容旧代码 + if direction == 'long': + self.long_trailing_stop_price = 0 + self.sl_long_price = 0 + + if direction == 'short' or direction == 'all': + # 清空空头持仓信息 + self.stop_order_dict[instrument_id]['short'] = { + 'position': 0, + 'entry_price': 0, + 'stop_loss': 0, + 'take_profit': 0, + 'trailing_stop': 0 + } + # 兼容旧代码 + if direction == 'short': + self.short_trailing_stop_price = 0 + self.sl_shor_price = 0 + + # 同步全局持仓状态 + if direction == 'all': + self.pos = 0 + self.long_trailing_stop_price = 0 + self.short_trailing_stop_price = 0 + self.sl_long_price = 0 + self.sl_shor_price = 0 + + # 保存到文件 + try: + self.save_stop_orders_to_file(instrument_id) + self.save_to_csv(instrument_id) + print(f"已成功清空{instrument_id}的{direction}持仓信息并保存") + except Exception as e: + print(f"清空持仓信息时出错: {e}") + +# 修改call_deepseek_model函数,移除JSON格式输出的要求,改为从普通文本响应中提取交易信号。 +def call_deepseek_model(data_df, trader_instance, max_retries=2): + """ + 调用qwq-32b大模型分析订单流数据 + + Args: + data_df: 包含订单流数据的DataFrame + trader_instance: MyTrader实例,用于访问持仓信息 + max_retries: 最大重试次数 + + Returns: + dict: 包含交易信号的字典 + """ + # 直接从环境变量获取API密钥 + api_key = GLOBAL_LLM_CONFIG.get('api_key') + base_url = GLOBAL_LLM_CONFIG.get('base_url') + model_name = GLOBAL_LLM_CONFIG.get('model_name') + + # 检查API密钥是否为空 + if not api_key: + print("错误: API密钥未设置,请在main函数中配置GLOBAL_LLM_CONFIG['api_key']") + return {"action": "不操作", "reason": "API密钥未设置", "confidence": 0, "stop_loss": 0, "take_profit": 0} + + # 将DataFrame转换为可读性好的文本,传递trader_instance + data_text = trader_instance.format_data_for_llm(data_df) + + # 构建提示词 + prompt = f""" + 作为专注于趋势交易的期货交易员,基于以下市场数据做出交易决策: + + {data_text} + + 请重点考虑以下关键因素: + 1. 均线系统(5、10、20均线)的排列状态和金叉死叉信号 + 2. 价格是否处于明确的上升或下降通道中 + 3. 关键阻力位和支撑位的突破情况及其确认 + 4. 成交量是否配合价格趋势(上涨时放量,下跌时同样放量) + 5. 动量指标(MACD、KDJ等)的走势和信号 + 6. 订单流趋势与主力资金方向的一致性 + 7. 市场多空力量对比的持续性变化 + 8. 当前趋势的强度与持续时间评估 + + 【风险控制原则】: + - 严格控制每笔交易亏损不超过本金的1% + - 趋势交易的止损位应设置在次级回调位或关键技术位之下,通常为开仓价的0.5%-0.1% + - 使用移动止损机制跟踪趋势发展,锁定利润 + - 避免在盘整区间内频繁交易,等待明确的突破信号 + + 请根据市场状态和持仓情况,给出明确的交易指令: + 1. 交易方向: 不操作/开多/开空/平多/平空/平多开空/平空开多 + 2. 执行理由: 详细说明趋势特征、突破信号、动量变化和持续性评估 + 3. 置信度: 1-10的数字,反映趋势信号的清晰度,必须是整数 + 4. 止损价: 明确的止损价格(必须是数字),设置在关键支撑/阻力位附近 + 5. 止盈价: 明确的首个止盈目标(必须是数字),应至少是止损距离的1.5倍 + 6. 跟踪止损百分比: 0.0001-0.001之间的数字,用于设置移动止损追踪趋势 + + 请按以下格式返回交易决策,格式必须严格匹配: + action: 不操作/开多/开空/平多/平空/平多开空/平空开多 + reason: 交易理由 + confidence: 置信度(1-10) + stop_loss: 止损价 + take_profit: 止盈价 + trailing_percent: 跟踪止损百分比(0.0001-0.001) + """ + + system_prompt = {"role": "system", + "content": "你是一位专注于趋势交易的期货交易员,擅长识别和追踪强势趋势。你的交易风格注重动量和突破信号,善于在确认趋势后顺势而为,合理管理风险的同时最大化捕捉趋势利润。你特别关注均线系统、趋势线、成交量确认和动量指标,能精准判断趋势的强度和持续性。你擅长使用移动止损保护利润,在趋势延续时持有头寸,在趋势减弱时及时退出。请根据指定格式返回交易决策。"} + + # 添加重试机制 + retries = 0 + while retries <= max_retries: + try: + # 如果不是第一次尝试,输出重试信息 + if retries > 0: + print(f"正在进行第 {retries} 次重试...") + + # 调试信息 + print(f"使用API参数: base_url={base_url}, model={model_name}") + + # 添加明显的提示信息,表示正在调用大模型API + print("\n============================================") + print("【正在调用大模型API进行交易分析,请稍候...】") + print("============================================\n") + + # 记录开始时间 + api_start_time = time.time() + + # 使用OpenAI客户端格式调用API + client = OpenAI(api_key=api_key, base_url=base_url) + + # 发起流式请求 + response = client.chat.completions.create( + model=model_name, + messages=[ + system_prompt, + {"role": "user", "content": prompt} + ], + temperature=0.1, + stream=False, # 不启用流式模式 + max_tokens=8192, + timeout=60 + ) + + # 提取模型响应内容 + model_response = response.choices[0].message.content + + # 计算耗时 + api_elapsed = time.time() - api_start_time + print(f"\n\n模型响应总耗时: {api_elapsed:.2f}秒") + print("完整响应前100字符: " + model_response[:100] + "...") + + # 添加明显的提示信息,表示API调用已完成 + print("\n============================================") + print("【大模型API调用完成】") + print("============================================\n") + + # 从文本中解析出交易信号 + try: + trading_signal = parse_trading_signal(model_response) + return trading_signal + except Exception as parse_err: + print(f"解析模型响应出错: {parse_err}") + # 尝试从自由文本中提取关键信息 + return extract_trading_signal_from_text(model_response) + + except Exception as e: + retries += 1 + if retries <= max_retries: + print(f"调用大模型API出错: {e}") + print(f"将在3秒后重试...") + time.sleep(3) # 等待3秒后重试 + else: + print(f"已达到最大重试次数 ({max_retries}),调用大模型API失败") + print(f"错误详情: {e}") + print("\n请检查以下几点:") + print("1. API密钥格式是否正确,应以'sk-'开头") + print("2. 确认已安装最新版本的openai库: pip install --upgrade openai") + print("3. 确认您的API密钥对应的模型是否为deepseek-reasoner") + # 返回默认的不操作信号 + return {"action": "不操作", "reason": f"API调用失败: {str(e)[:100]}", "confidence": 0, "stop_loss": 0, "take_profit": 0} + + # 如果所有重试都失败了,返回默认值 + return {"action": "不操作", "reason": "API调用重试耗尽", "confidence": 0, "stop_loss": 0, "take_profit": 0} + +def parse_trading_signal(text): + """ + 从文本格式的模型响应中解析出交易信号 + + Args: + text: 模型响应文本 + + Returns: + dict: 包含交易信号的字典 + """ + lines = text.strip().split('\n') + trading_signal = {} + + for line in lines: + if ':' in line: + key, value = line.split(':', 1) + key = key.strip().lower() + value = value.strip() + + if key == 'action': + trading_signal['action'] = value + elif key == 'reason': + trading_signal['reason'] = value + elif key == 'confidence': + try: + trading_signal['confidence'] = int(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+', value) + if match: + trading_signal['confidence'] = int(match.group()) + else: + trading_signal['confidence'] = 0 + elif key == 'stop_loss': + try: + trading_signal['stop_loss'] = float(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + trading_signal['stop_loss'] = float(match.group()) + else: + trading_signal['stop_loss'] = 0 + elif key == 'take_profit': + try: + trading_signal['take_profit'] = float(value) + except ValueError: + # 尝试从文本中提取数字 + import re + match = re.search(r'\d+(\.\d+)?', value) + if match: + trading_signal['take_profit'] = float(match.group()) + else: + trading_signal['take_profit'] = 0 + elif key == 'trailing_percent': + try: + value_float = float(value) + # 确保值在合理范围内 0.0001-0.001 + if 0.0001<= value_float <= 0.001: + trading_signal['trailing_percent'] = value_float + else: + # 设置为默认值 + trading_signal['trailing_percent'] = 0.0005 + except ValueError: + trading_signal['trailing_percent'] = 0.0005 + + # 检查是否有缺失的字段,如果有,设置默认值 + if 'action' not in trading_signal: + trading_signal['action'] = '不操作' + if 'reason' not in trading_signal: + trading_signal['reason'] = '未提供理由' + if 'confidence' not in trading_signal: + trading_signal['confidence'] = 0 + if 'stop_loss' not in trading_signal: + trading_signal['stop_loss'] = 0 + if 'take_profit' not in trading_signal: + trading_signal['take_profit'] = 0 + if 'trailing_percent' not in trading_signal: + trading_signal['trailing_percent'] = 0.0005 # 修改默认值 + + return trading_signal + +def extract_trading_signal_from_text(text): + """ + 从自由格式文本中尝试提取交易信号 + + Args: + text: 模型响应文本 + + Returns: + dict: 包含交易信号的字典 + """ + # 默认交易信号 + trading_signal = { + "action": "不操作", + "reason": "无法解析模型响应", + "confidence": 0, + "stop_loss": 0, + "take_profit": 0, + "trailing_percent": 0 # 更新默认的跟踪止损百分比 + } + + # 尝试判断交易方向 + text_lower = text.lower() + if "平多开空" in text_lower: + trading_signal["action"] = "平多开空" + elif "平空开多" in text_lower: + trading_signal["action"] = "平空开多" + elif "开多" in text_lower: + trading_signal["action"] = "开多" + elif "开空" in text_lower: + trading_signal["action"] = "开空" + elif "平多" in text_lower: + trading_signal["action"] = "平多" + elif "平空" in text_lower: + trading_signal["action"] = "平空" + elif "不操作" in text_lower or "观望" in text_lower: + trading_signal["action"] = "不操作" + + # 尝试从文本中提取置信度 + import re + confidence_matches = re.findall(r'置信度[::]\s*(\d+)', text_lower) + if confidence_matches: + try: + trading_signal["confidence"] = int(confidence_matches[0]) + except ValueError: + pass + + # 尝试提取止损价 + stop_loss_matches = re.findall(r'止损价[::]\s*(\d+(\.\d+)?)', text_lower) + if stop_loss_matches: + try: + trading_signal["stop_loss"] = float(stop_loss_matches[0][0]) + except ValueError: + pass + + # 尝试提取止盈价 + take_profit_matches = re.findall(r'止盈价[::]\s*(\d+(\.\d+)?)', text_lower) + if take_profit_matches: + try: + trading_signal["take_profit"] = float(take_profit_matches[0][0]) + except ValueError: + pass + + # 尝试提取跟踪止损百分比 + trailing_matches = re.findall(r'跟踪止损百分比[::]\s*(\d+(\.\d+)?)', text_lower) + if not trailing_matches: + trailing_matches = re.findall(r'跟踪百分比[::]\s*(\d+(\.\d+)?)', text_lower) + + if trailing_matches: + try: + trailing_value = float(trailing_matches[0][0]) + # 判断是否为百分比格式 + if trailing_value >= 0.5 and trailing_value <= 10: + trading_signal["trailing_percent"] = trailing_value / 100 + else: + trading_signal["trailing_percent"] = trailing_value + except ValueError: + pass + + # 提取理由 + reason_matches = re.findall(r'理由[::]\s*(.*?)(?=\n|$)', text_lower) + if reason_matches: + trading_signal["reason"] = reason_matches[0] + + return trading_signal + +# 修改run_trader函数,改为接收统一的配置字典 +def run_trader(broker_id, td_server, investor_id, password, app_id, auth_code, md_queue=None, page_dir='', private_resume_type=2, public_resume_type=2, config=None): + # 设置全局变量 + global GLOBAL_LLM_CONFIG + + # 如果传入了配置字典,直接使用 + if config: + # 使用deepcopy避免潜在的引用问题 + import copy + GLOBAL_LLM_CONFIG = copy.deepcopy(config) + + # 使用位置参数调用MyTrader初始化,因为Cython类不支持关键字参数 + my_trader = MyTrader( + broker_id, + td_server, + investor_id, + password, + app_id, + auth_code, + md_queue, + page_dir, # 使用修复后的日志目录路径 + private_resume_type, + public_resume_type + ) + + # 设置历史数据加载参数 + my_trader.load_history = GLOBAL_LLM_CONFIG['load_history'] + my_trader.history_rows = GLOBAL_LLM_CONFIG['history_rows'] + my_trader.trader_rows = GLOBAL_LLM_CONFIG['trader_rows'] + my_trader.Lots = GLOBAL_LLM_CONFIG['Lots'] + my_trader.Join() + +def ceshiapi(api_key): + # 测试API连接 + print(f"测试API连接,使用密钥: {api_key[:5]}...{api_key[-5:]}") + try: + client = OpenAI(api_key=api_key, base_url=GLOBAL_LLM_CONFIG['base_url'] ) + response = client.chat.completions.create( + model=GLOBAL_LLM_CONFIG['model_name'], + messages=[ + {"role": "system", "content": "你是一个助手"}, + {"role": "user", "content": "测试"} + ], + stream=False, # 新增此行 + max_tokens=10 + ) + print(f"API连接测试成功") + except Exception as e: + print(f"API连接测试失败: {e}") + import traceback + traceback.print_exc() + +def clean_log_directory(log_dir="./log", timeout_seconds=5): + """ + 清理日志目录内的所有文件和子目录,具有超时机制和健壮的异常处理 + + 参数: + log_dir (str): 日志目录路径,默认为"./log" + timeout_seconds (int): 清理操作的最大等待时间(秒),默认为5秒 + + 返回: + bool: 清理操作是否成功完成(未超时且无严重错误) + """ + + print(f"开始清理日志目录: {log_dir}") + success = True + + if os.path.exists(log_dir): + # 设置超时机制,避免长时间阻塞 + start_time = time.time() + + try: + # 遍历并删除log目录下的所有文件和子目录 + for item in os.listdir(log_dir): + # 检查是否超时 + if time.time() - start_time > timeout_seconds: + print(f"清理操作超过{timeout_seconds}秒,中断清理") + success = False + break + + item_path = os.path.join(log_dir, item) + try: + if os.path.isfile(item_path): + os.unlink(item_path) + elif os.path.isdir(item_path): + shutil.rmtree(item_path, ignore_errors=True) + print(f"已清理: {item_path}") + except Exception as e: + print(f"清理 {item_path} 时出错: {e}") + # 记录错误但继续处理其他文件 + except Exception as e: + print(f"清理log目录时出现意外错误: {e}") + success = False + else: + # 如果log目录不存在,则创建它 + try: + os.makedirs(log_dir) + print(f"创建日志目录: {log_dir}") + except Exception as e: + print(f"创建日志目录失败: {e}") + success = False + + if success: + print(f"日志目录清理完成: {log_dir}") + else: + print(f"日志目录清理未完全完成: {log_dir}") + + return success + +if __name__ == '__main__': + #公众号:松鼠Quant + #主页:www.quant789.com + #本策略仅作学习交流使用,实盘交易盈亏投资者个人负责!!! + #版权归松鼠Quant所有,禁止转发、转卖源码违者必究。 + + # 清理日志目录 + clean_log_directory(log_dir="./log", timeout_seconds=10) # 可以调整超时时间 + # 创建临时工作目录(在log文件夹内) + timestamp = int(time.time()) + temp_md_dir = f"./log/user_md_{timestamp}" + temp_td_dir = f"./log/user_td_{timestamp}" + + '''============================================================策略参数填写区============================================================''' + + # 配置大模型参数 o3 代理地址: https://2233.ai/i/9ONWNBDK + # deepseek模型地址:https://www.deepseek.com/ 右上角进入API开放平台创建APIKEY + + api_key = "" #配置大模型API密钥 + api_url = "https://api.deepseek.com" #配置大模型API地址 + api_model = "deepseek-chat" # 大模型名称 + + GLOBAL_LLM_CONFIG['api_key'] = api_key + GLOBAL_LLM_CONFIG['base_url'] = api_url + GLOBAL_LLM_CONFIG['model_name'] = api_model + ceshiapi(api_key) # 测试API连接 + + # 历史数据加载配置 + GLOBAL_LLM_CONFIG['load_history'] = True # 是否加载历史数据 + GLOBAL_LLM_CONFIG['history_rows'] = 50 # 用于分析的历史数据行数 + GLOBAL_LLM_CONFIG['trader_rows'] = 10 # 用于分析的订单流数据最少数量 + GLOBAL_LLM_CONFIG['bar_resample_rule'] = '3T' # 3分钟K线 + GLOBAL_LLM_CONFIG['Lots'] = 1 # 手数 + + '''============================================================个人填写信息区============================================================''' + + # simnow的future_account字典,如果实盘请注释掉simnow的future_account字典 + future_account = get_simulate_account( + investor_id='', #Simnow的账号,注意不是注册账号,是网站登录SIMNOW后,显示的投资者ID + password='', #Simnow的密码,你注册时填写的密码 + server_name='电信1',# 电信1、电信2、移动、TEST、N视界 + subscribe_list= [b'au2506'], # 订阅合约列表,注意是bytes类型,例如b'au2506' + md_flow_path=temp_md_dir, + td_flow_path=temp_td_dir, + ) + + + #实盘用这个,切记注释掉上方simnow的future_account字典 + # future_account = FutureAccount( + # broker_id='', # 期货公司BrokerID + # server_dict={'TDServer': "ip:port", 'MDServer': 'ip:port'}, # TDServer为交易服务器,MDServer为行情服务器。服务器地址格式为"ip:port。" + # reserve_server_dict={}, # 备用服务器地址 + # investor_id='', # 账户 + # password='', # 密码 + # app_id='simnow_client_test', # 认证使用AppID + # auth_code='0000000000000000', # 认证使用授权码 + # subscribe_list=[b'au2506'], # 订阅合约列表 + # md_flow_path=temp_md_dir, # MdApi流文件存储地址,默认MD_LOCATION + # td_flow_path=temp_td_dir, # TraderApi流文件存储地址,默认TD_LOCATION + # ) + + '''============================================================个人填写信息区============================================================''' + + print('开始', len(future_account.subscribe_list)) + # 共享队列 + share_queue = Queue(maxsize=200) + + # 行情进程 + md_process = Process(target=run_tick_engine, args=(future_account, [share_queue])) + + # 使用深拷贝创建一个完全独立的配置副本 + import copy + config_copy = copy.deepcopy(GLOBAL_LLM_CONFIG) + + # 交易进程 + trader_process = Process(target=run_trader, args=( + future_account.broker_id, + future_account.server_dict['TDServer'], + future_account.investor_id, + future_account.password, + future_account.app_id, + future_account.auth_code, + share_queue, + temp_td_dir, + 2, # private_resume_type + 2, # public_resume_type + config_copy, + )) + + md_process.start() + trader_process.start() + + md_process.join() + trader_process.join() diff --git a/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/定时启动.py b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/定时启动.py new file mode 100644 index 0000000..6925896 --- /dev/null +++ b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/使用文档/4.14版本_new/定时启动.py @@ -0,0 +1,53 @@ +import subprocess +import schedule +import time +from datetime import datetime + +# 定义要启动的文件 +files_to_run = ['vip20_orderflow.py'] + + +def run_scripts(): + print("启动程序...") + for file in files_to_run: + time.sleep(1) + # 使用subprocess模块运行命令 + subprocess.Popen(['start', 'cmd', '/k', 'python', file], shell=True) + print(file) + print(datetime.now(),'程序重新启动完成,等待明天关闭重启') + + +def close_scripts(): + print("关闭程序...") + # 通过创建一个包含关闭指定窗口命令的批处理文件来关闭CMD窗口 + def close_specific_cmd_window(cmd_window_title): + with open("close_cmd_window.bat", "w") as batch_file: + batch_file.write(f'@echo off\nfor /f "tokens=2 delims=," %%a in (\'tasklist /v /fo csv ^| findstr /i "{cmd_window_title}"\') do taskkill /pid %%~a') + + # 运行批处理文件 + subprocess.run("close_cmd_window.bat", shell=True) + + + # 循环关闭所有脚本对应的CMD窗口 + for title in files_to_run: + close_specific_cmd_window(title) + print(datetime.now(),'已关闭程序,等待重新运行程序') + + + +# 设置定时任务,关闭程序 +schedule.every().day.at("15:20").do(close_scripts) +schedule.every().day.at("02:45").do(close_scripts) + +# 设置定时任务,启动程序 +schedule.every().day.at("08:55").do(run_scripts) +schedule.every().day.at("20:55").do(run_scripts) + + + +# 保持脚本运行,等待定时任务触发 + #zzg_quant +while True: + schedule.run_pending() + time.sleep(1) + #zzg_quant diff --git a/temp/2025年松鼠策略/专享策略20_基于LLM的订单流日内交易策略.zip b/1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/原始文档/专享策略20_基于LLM的订单流日内交易策略.zip similarity index 100% rename from temp/2025年松鼠策略/专享策略20_基于LLM的订单流日内交易策略.zip rename to 1.交易策略/999.其他策略/4.松鼠SF20_基于LLM的订单流日内交易策略/原始文档/专享策略20_基于LLM的订单流日内交易策略.zip