益盟操盘手数据抓取器
前言
比起将其整合到整个平台应用中,解耦出一个数据抓取器更加便于维护和管理。抓取器只需要获取股票池并定时更新。
获取股票池
股票池从存放 tushare 数据库获取。抓取器应该能配置简单的股票池筛选规则,如仅限沪深 A 股。这个筛选规则可以是默认的,因为似乎益盟操盘手没有北交所数据。
获取股票池可以直接通过数据库读取。
更新
更新内容
应提供后台,对更新的内容进行配置,如:需要更新的指标、指标的参数等。
由于从益盟 5.0 版本开始,更新的指标名称由代码替代,所以在系统上也需要提供一份指标名称和代码的对应关系,以便用户能方便地选取指标。目前平台已经基本实现指标说明的获取功能。
指标参数除益盟 APK 内默认的 config_ind_online.json 外,每次启动程序还会从网上抓取一份最新的。可以通过实现抓取来获得最新配置。
另外,最好在平台上有方式对请求进行测试。每次更新前都需要确保既定的访问正常,一旦发现异常情况须立即停止更新,并对管理员发出警告。
更新频率
考虑以下两种方式:
- 可使用 cron 表达式进行更新频率的配置。该表达式应该是忽略当日是否是交易日的,比如周末当然也可以运行更新。
- 使用写死的逻辑代码进行更新。
更新配置
更新过程中的最大线程数、循环延时应提供相应后台进行管理配置。
为避免请求激增,同一请求任务应尽可能多地囊括需要更新的指标,即采用 2422 CANDLE_STICK_V3 而非 2921 INDEX_CALC_V2 来更新。
更新进度
更新进度应可视,进度是已更新股票数÷股票总数。过程应统计平均每支股票的更新时间,得出剩余时间:已用时间÷已更新股票数×未更新股票数。
日内更新和推送通知
对于需要特别关注的股票,应提供接收特别关注股票的接口(入池、出池)、推送功能、更新频率设置,供日内特别关注。
接口应以某种方式来验证是否是合法请求。
其他配置
益盟 client 参数,包括使用的用户参数、设备参数等,应提供简易后台进行配置。 当前使用本地 JSON 保存配置。默认配置应在对应配置类内提供初始值,当本地无 JSON 时从配置类内初始化保存在本地。
环境配置
测试环境
测试环境需要配置好 Clash、Fiddler。Clash 部分,需要对益盟网址 Phaser 进行设置,强制使用代理访问。
目前,平台已经提供代理设置界面,程序调用 okhttp 的地方基本上已经可以经由配置代理进行网络活动,故大部分确保平台访问能过代理的部分需要在 Clash 上的规则进行配置。
以 Clash Verge 为例:打开主界面——订阅——全局扩展脚本,编辑脚本如下:
// Define main function (script entry)
function main(config, profileName)
// 此处的 dypnsapi.aliyun... 是益盟调用手机号登录的接口
// 为了统一请求 IP 且不暴露真实 IP,这部分需要 REJECT-DROP
config.rules.unshift('DOMAIN-SUFFIX,dypnsapi.aliyuncs.com,REJECT-DROP');
config.rules.unshift('DOMAIN-SUFFIX,dypnsapi.aliyun.com,REJECT-DROP');
config.rules.unshift('DOMAIN-SUFFIX,emoney.cn,喵酥云');
config.rules.unshift('DOMAIN-KEYWORD,emapp,喵酥云');
console.log(config.rules);
return config;
}
具体使用的代理名称根据机场配置而定,也可以写 js 自动匹配。注意此处添加自定义规则采用的函数是 unshift 以添加到规则头部,确保自定义规则的优先级,否则很可能优先 match 到机场的自定义配置,导致自定义规则失效。
访问数据库不需要过代理,可以直连。
生产环境
暂未确定生产环境是否在本地环境。若在本地环境,可以选用 Windows 电脑,按照测试环境进行配置。若在云环境,必须明确所用云服务器是国外服务器。
当使用云环境作为生产环境时,须明确主数据库所在位置。若主数据库位于本地环境,则需要 frp 或其他内网穿透软件进行穿透。
预案
对于可能暴露的情况,需要准备预案,对内容进行销毁。可以为程序添加“毁灭模式”,一旦被触发,自动清除程序和附加的文件。