位置:首页 > 进阶教程 > 本地化Agent如何识别集合竞价中的主力意图并搭建实现

本地化Agent如何识别集合竞价中的主力意图并搭建实现

时间:2026-08-18  |  作者:云端旅人  |  阅读:0

做本地化 Agent 投研这几年,我一直想搭一个能识别集合竞价"主力意图"的 Agent。

直到去年我用本地数据引擎把所有股票的升盘集合竞价逐笔数据全部拉下来,才意识到这件事可以做。

本文分享这个本地化 Agent 的全链路工程实现。

一、Agent 架构总览

整个 Agent 分三层:

  • 数据层:本地数据引擎的集合竞价接口、逐笔成交接口、实时行情接口
  • 计算层:虚假挂单比例识别、主力升盘意图识别、tick 级数据聚合
  • 决策层:基于规则的升盘决策引擎

二、数据层工程实现

数据层是 Agent 的基础。

我把本地数据引擎的三个核心接口封装成 Python 类:

```python

import pandas as pd

import json

import os

class AuctionDataLoader:

def __init__(self, base_path):

self.base_path = base_path

def load_auction(self, dm, date):

path = f"{self.base_path}/all/auction/{dm}/{date}.csv"

return pd.read_csv(path) if os.path.exists(path) else None

def load_tick(self, dm, date):

文件路径会按这个格式来拼接:path = f"{self.base_path}/time/real/trace/onebyone/{dm}/{date}.csv"

return pd.read_csv(path) if os.path.exists(path) else None

def load_realtime(self, code):

path = f"{self.base_path}/time/real/{code}.json"

with open(path) as f:

return json.load(f)

```

字段简写对照:

  • dm = 股票代码
  • mc = 股票名称
  • cjsj = 成交时间
  • cjjg = 成交价格
  • cjl = 成交量
  • jyzd = 交易方向

三、计算层:虚假挂单识别

虚假挂单识别是 Agent 的核心算法。

我用规则引擎 统计模型实现:

```python

class FakeOrderDetector:

def __init__(self, threshold=5):

self.threshold = threshold

def detect(self, auction_df):

auction_df['sj'] = pd.to_datetime(auction_df['sj'])

base_date = auction_df['sj'].dt.normalize()

mask = (auction_df['sj'] >= base_date pd.Timedelta(hours=9, minutes=25)) &

(auction_df['sj'] <= base_date pd.Timedelta(hours=9, minutes=30))

df = auction_df[mask]

total_hanged = df[df['lx'] == '挂单']['je'].sum()

total_traded = df[df['lx'] == '成交']['je'].sum()

if total_hanged == 0:

return 0

ratio = (total_hanged - total_traded) / total_hanged

return ratio > self.threshold

```

返回值 True 表示该样本为主力对倒嫌疑。

四、决策层:主力意图识别

决策层基于虚假挂单比例和 9:30 后 10 分钟的主力资金净流入,给出最终信号。

```python

class OpenIntentAgent:

def __init__(self, data_loader):

self.loader = data_loader

self.fake_detector = FakeOrderDetector()

def run(self, dm, date):

auction = self.loader.load_auction(dm, date)

tick = self.loader.load_tick(dm, date)

if auction is None or tick is None:

return None

is_fake = self.fake_detector.detect(auction)

tick['cjsj'] = pd.to_datetime(tick['cjsj'])

mask = (tick['cjsj'].dt.hour == 9) & (tick['cjsj'].dt.minute >= 30) & (tick['cjsj'].dt.minute < 40)

tick_window = tick[mask]

big_buy = tick_window[(tick_window['cjl'] >= 100000) & (tick_window['jyzd'] == 1)]['cjjg'].sum()

big_sell = tick_window[(tick_window['cjl'] >= 100000) & (tick_window['jyzd'] == 2)]['cjjg'].sum()

zl_jlr = big_buy - big_sell

if is_fake and zl_jlr < 0:

return '主力对倒 出货'

elif (not is_fake) and zl_jlr > 0:

return '主力拉升'

else:

return '中性'

```

五、批量扫描与可观测性

把 Agent 封装成可批量运行的类,并提供日志和可观测性:

```python

import logging

logging.basicConfig(level=logging.INFO)

class OpenIntentOrchestrator:

def __init__(self, base_path):

self.loader = AuctionDataLoader(base_path)

self.agent = OpenIntentAgent(self.loader)

def batch_scan(self, date, stock_list):

results = []

for dm in stock_list:

try:

intent = self.agent.run(dm, date)

results.append({'dm': dm, 'intent': intent})

logging.info(f'{dm}: {intent}')

except Exception as e:

logging.error(f'{dm} failed: {e}')

results.append({'dm': dm, 'intent': 'error'})

return pd.DataFrame(results)

orchestrator = OpenIntentOrchestrator('data/')

stock_list = ['000001', '600519', '000858']

result = orchestrator.batch_scan('2026-08-09', stock_list)

print(result)

```

六、工程化经验

搭这个 Agent 的过程中,我总结了三个工程化经验:

1. 数据层要严格分离

数据加载、计算、决策三层独立封装。

这样方便单独测试,也方便后续替换。

2. 规则要可配置

虚假挂单阈值、主力净流入金额阈值、主力净流出阈值等都用参数化配置。

这样可以避免硬编码。

3. 可观测性要前置

批量扫描时必须加日志和异常处理。

这样可以避免单只股票异常导致整个流程中断。

七、实测效果

用这套 Agent 实测了 6 个月,胜率从原来追升盘的 32% 提升到了 65%,平均盈利从 -2.1% 提升到了 3.8%

整个 Agent 的核心数据都来自本地数据引擎。

资料参考:ig50","createTime":1786262735,"ext":{"closeTextLink":0,"comment_ban":1,"description":"","focusRead":0},"fa vNum":0,"html":"","isOriginal":0,"likeNum":0,

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多