AI选股核心设计思路

AI选股核心设计思路

一、总体架构

策略拆分为「筛选条件」+「AI提示词」,通过目标日期实现实盘选股与回测选股的统一,回测结果驱动AI自我优化策略。
🔄 策略优化引擎
🎯 目标日期决定模式
🔍 选股引擎
📋 策略(Strategy)
更新策略
更新策略
筛选条件

condition_expr
AI提示词

analysis_prompt
条件初筛

EnhancedStockScreener
数据获取

StockDataService
AI深度分析

OpenClawGateway
结果持久化

PersistenceService
实盘选股

targetDate = 今天
回测选股

targetDate = 历史日期
回测统计

BacktestResultService
AI优化策略

OpenClawGateway
条件验证

StrategyParseService


二、选股流程(实盘 & 回测统一)

实盘选股与回测选股走的是同一条链路,唯一区别是 targetDate 不同:实盘填今天,回测填历史日期。
REALTIME
BACKTEST


REALTIME
BACKTEST


🚀 开始选股
输入:策略ID + 目标日期
创建 SelectionTask

状态 = PENDING
获取策略信息

condition_expr + analysis_prompt
selectionType?
targetTime = 当前时间

expectedBuyTime = 今日收盘前
targetTime = 目标日期 15:00

expectedBuyTime = 次日开盘
🔍 条件初筛

EnhancedStockScreener.screen()
解析条件表达式

支持 OR/AND 组合
拼接SQL

JOIN daily_quote + technical_indicator + stock_basic

WHERE 目标日期之前的数据
执行SQL

返回初筛股票列表
初筛结果

是否为空?
任务结束

无符合条件的股票
📊 获取全维度数据

StockDataService.batchGetStockData()
保存候选股票数据

data/stock_selection/{batchNo}/
🤖 请求AI分析

OpenClawGatewayService
场景类型?
generateRealtimeSelectionJson()
generateBacktestSelectionJson()
异步HTTP POST → OpenClaw Gateway

携带:result_dir, strategy_name, target_time
⏳ 等待AI返回结果

轮询结果文件

文件存在 + 大小稳定3次 + JSON合法
结果有效?
任务失败
📝 解析AI结果

StockSelectionPersistenceService
创建 SelectionBatch

screenStockCount / stockCount
遍历股票 → stock_pick 表

prediction / trade_plan / analysis_basis

buyTime / sellTime
发送通知
✅ 选股完成


三、回测流程

回测 = 遍历时间区间内每个交易日,对每个交易日执行一次完整的选股流程,最终汇总统计。


所有日期完成
循环
🚀 开始回测
输入:策略 + startDate + endDate

entryHour + entryMinute
创建 SelectionTask

taskType = BACKTEST
创建 BacktestProgress

跟踪进度
🗑️ 清除该策略旧回测数据

删除 stock_pick + selection_batch + backtest_result
📅 遍历 startDate → endDate
是交易日?

TradeCalendarService
跳过,下一个日期
Semaphore(2)

控制并发数
创建子任务

batchNo = BT_{yyyyMMdd}_{随机4位}
执行选股

executeRealtimeSelection()

selectionType = BACKTEST
🔍 复用完整选股8步流程

唯一区别:targetTime = 当日15:00

expectedBuyTime = 次日开盘
该日期完成

更新 BacktestProgress
等待所有异步任务完成

CompletableFuture.allOf().join()
📊 计算回测统计

BacktestResultService.calculateAndSaveResult()
查询所有 BACKTEST 类型 stock_pick

计算 winRate / avgChange / maxChange / minChange / totalReturn
写入 backtest_result 表
更新 BacktestProgress

status = COMPLETED
✅ 回测完成

回测并发模型

Semaphore(2) 限制
回测时间线
完成后
完成后
4月1日
4月2日
4月3日
4月4日
4月5日
4月6日
4月7日
Worker 1
Worker 2
等待队列


四、策略优化流程(核心闭环)

策略优化是一个迭代循环:回测 → 统计 → AI优化 → 验证 → 更新策略 → 再回测,直到胜率达标或达到最大迭代次数。
是 ✅
否 ❌


< 30
> 200


30 ~ 200 ✅
iteration >= maxIterations
🚀 开始策略优化
输入:策略 + targetWinRate=0.75

maxIterations=10 + 回测时间区间
Semaphore(2)

限制并发优化数
创建 OptimizationSession

跟踪迭代状态
iteration = 0
① 执行回测

triggerBacktest(strategy, startDate, endDate)
② 等待回测完成

每3秒轮询,最长7200秒
③ 统计回测结果

getStrategyBacktestViewResultInternal()
计算:winRate / avgChange / totalReturn

总选股数 / 各批次数据
④ 是否达标?

winRate >= targetWinRate

且 totalPicks >= 10
优化成功!退出循环
⑤ 保存回测数据到迭代目录
batches/*.json → AI精选数据+统计

screen_data/screen_overview.json → 初筛统计

overview.json → 汇总

conditions.json → 当前条件

parameters.json → 优化参数
⑥ 请求AI优化策略

OpenClawGatewayService.sendAsync()
构建优化Prompt

action: 优化策略

read_order: conditions → overview → screen_data → batches
⑦ 等待AI优化结果

watchForResultFileStable()
⑧ 结果校验

condition_expr 存在且长度 >= 10?
跳过本轮迭代

iteration++
⑨ 条件验证与修复

StrategyParseService.validateAndFixCondition()
实际执行条件初筛

enhancedStockScreener.screen()
初筛数量范围?

30 ~ 200 只
条件过严,拒绝
条件过宽,拒绝
修复尝试 < 3次?
发送修复请求给OpenClaw

buildFixPrompt()
保底保存

strategy.status = 3(草稿)
✅ 更新策略

strategy.condition_expr = 新条件

strategy.analysis_prompt = 新提示词

strategy.status = 1(启用)
iteration++
达到最大迭代次数

退出循环
🏁 优化完成


五、核心闭环:策略自我进化

这是整个系统最核心的设计------策略通过回测验证 + AI优化的闭环实现自我进化。
🔄 策略自我进化闭环
目标日期

= 历史日期
stock_pick

  • backtest_result
    overview.json

  • batches/*.json
    新 condition_expr

  • analysis_prompt
    验证通过
    胜率达标
    📋 当前策略

condition_expr

  • analysis_prompt
    🔍 回测验证

遍历历史交易日

AI回到过去选股
📊 统计结果

winRate / avgChange

totalReturn
🤖 AI优化

读取回测数据

调整条件+提示词
✅ 验证更新

条件初筛30-200只

通过则更新策略
🎯 策略成熟

投入实盘

迭代效果示意

AI优化
AI优化
AI优化
迭代 10
winRate: 78% ✅
condition: 最终条件
迭代 7
winRate: 71%
condition: 优化条件v7
迭代 3
winRate: 58%
condition: 优化条件v3
迭代 1
winRate: 45%
condition: 基础条件


六、关键数据表关系

触发
产生
精选
统计
包含
包含
STRATEGY
bigint
id
PK
varchar
name
text
condition_expr
筛选条件表达式
text
analysis_prompt
AI分析提示词
int
status
0禁用 1启用 3草稿
SELECTION_TASK
bigint
id
PK
bigint
strategy_id
FK
varchar
task_type
REALTIME / BACKTEST / OPTIMIZATION
varchar
status
PENDING / RUNNING / COMPLETED / FAILED
date
target_date
目标日期
SELECTION_BATCH
bigint
id
PK
bigint
strategy_id
FK
bigint
task_id
FK
varchar
batch_no
批次号
varchar
selection_type
REALTIME / BACKTEST
int
screen_stock_count
初筛股票数
int
stock_count
AI精选股票数
json
screen_data_json
初筛参数JSON
date
target_date
目标日期
STOCK_PICK
bigint
id
PK
bigint
batch_id
FK
bigint
strategy_id
FK
varchar
stock_code
股票代码
varchar
stock_name
股票名称
varchar
prediction
AI预测
text
trade_plan
交易计划
text
analysis_basis
分析依据
decimal
buy_price
买入价
decimal
sell_price
卖出价
datetime
buy_time
买入时间
datetime
sell_time
卖出时间
decimal
change_percent
涨跌幅
tinyint
is_win
是否盈利
BACKTEST_RESULT
bigint
id
PK
bigint
strategy_id
FK
varchar
backtest_batch_no
回测批次号
decimal
win_rate
胜率
decimal
avg_change
平均涨幅
decimal
max_change
最大涨幅
decimal
min_change
最大跌幅
decimal
total_return
总收益率
int
total_picks
总选股数
int
win_count
盈利次数
int
loss_count
亏损次数


七、实盘 vs 回测 对比

维度 实盘选股 回测选股
目标日期 今天 历史任意交易日
AI可见数据 截至当前的所有数据 截至目标日期的数据(零未来信息)
选股链路 完整8步 完全相同的8步
并发控制 单次执行 Semaphore(2),2个交易日并行
结果存储 selection_batch + stock_pick 同左,selection_type=BACKTEST
统计计算 计算胜率/涨幅 → backtest_result
核心价值 实时交易指导 验证策略历史表现

八、策略优化退出条件







每次迭代结束
winRate >= targetWinRate

且 totalPicks >= 10?
✅ 达标退出

策略成熟,投入实盘
iteration >= maxIterations?
⚠️ 最大迭代退出

策略未达标但已尽力
AI返回空响应

或回测超时?
❌ 异常退出
继续下一轮迭代

相关推荐
kyriewen112 小时前
智能体走向“企业操作系统”,Google 扔出五把钥匙
科技·ai·googlecloud
それども2 小时前
Comparator.comparing 和 拆箱问题
java·jvm
摇曳的精灵2 小时前
Keycloak开源企业级IAM
开源·keycloak·iam·sso
扬帆破浪2 小时前
开源免费的WPS AI 软件 察元AI文档助手:链路 002:executeAssistantFromRibbon 与任务进度窗
人工智能·开源·wps
叶子Talk2 小时前
GPT-Image-2正式发布:文字渲染99%,Image Arena三项第一,AI图像生成彻底变天了
人工智能·gpt·计算机视觉·ai·openai·图像生成·gpt-image-2
星晨羽3 小时前
西门子机床opc ua协议实现变量读写及NC文件上传下载
java·spring boot
我想要SSR3 小时前
搭建小龙虾过程和坑点
linux·服务器·ai
无巧不成书02183 小时前
零基础Java网络编程全解:从核心概念到Socket实战,一文打通Java网络通信
java·开发语言·网络
aq55356004 小时前
Workstation神技:一键克隆调试环境
java·开发语言