后端与接口
用 OpenAlgo WebSocket…
当需要基于实时 WebSocket 行情(LTP/Quote/Depth)旁路计算 EMA、RSI 等指标并可选打印/图表展示时,可生成并运行实时指标 feed 脚本。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 OpenAlgo WebSocket特定
解决思路
- 解析 $ARGUMENTS 为 symbol exchange mode:$0=symbol(默认 SBIN),$1=exchange(默认 NSE),$2=mode(默认 quote);若未提供参数则询问用户 symbol 与所需数据类型。
- 阅读 indicator-expert rules,重点 rules/websocket-feeds.md(WebSocket 连接与订阅)与 rules/data-fetching.md(用于缓冲区初始化的历史数据)。
- 按需创建 charts/live/ 目录。
- 创建 {symbol}_live_feed.py,并基于 rules/assets/live_feed/template.py 模板实现。
- ltp 模式:订阅 LTP feed;维护最近 200 个 tick 的滚动缓冲区;在缓冲区上计算 EMA、RSI;实时打印指标值。
- quote 模式:订阅 Quote feed;显示 OHLC + LTP + Volume;在 close 缓冲区上计算指标;用颜色区分看涨/看跌输出。
- depth 模式:订阅 Depth feed;显示 L5 买卖盘;计算 bid-ask spread 与订单不平衡(order imbalance);显示总买量与总卖量。
- multi 模式:订阅多个 symbol;以 watchlist 表格显示 LTP 与关键指标;自动刷新显示。
- 脚本结构:用 dotenv 的 load_dotenv(find_dotenv(), override=False) 加载环境变量,再创建 api(api_key=os.getenv("OPENALGO_API_KEY"), host=os.getenv("OPENALGO_HOST", "http://127.0.0.1:5000"), verbose=1) 客户端。
- 用 client.history(symbol=SYMBOL, exchange=EXCHANGE, interval="1m", start_date=昨日, end_date=今日) 预取历史数据,把最近 200 根 close 初始化到 close_buffer。
- 构造 instruments = [{"exchange": EXCHANGE, "symbol": SYMBOL}];在 on_data 回调中取 data["data"].get("ltp"),为空则 return,否则 append 到 close_buffer 并保持长度不超过 200(超出则 pop(0))。
- 当 close_buffer 长度 >= 20 时,转为 np.float64 数组,用 ta.ema(arr, 20)[-1] 与 ta.rsi(arr, 14)[-1](长度不足 15 时用 float("nan"))计算指标,并带时间戳打印 LTP、EMA、RSI。
- 调用 client.connect(),再用 client.subscribe_ltp(instruments, on_data_received=on_data) 订阅,进入 while True: time.sleep(1) 主循环。
- 清理:捕获 KeyboardInterrupt 并打印停止信息,调用 client.unsubscribe_ltp(instruments) 取消订阅、client.disconnect() 断开连接,并打印会话时长与已处理 bar 数摘要。
- 向用户说明 verbose 级别:verbose=0 静默(仅错误);verbose=1 连接与订阅日志;verbose=2 所有数据更新(调试模式)。
适用边界 · 注意事项
- 依赖 OpenAlgo 服务与 OPENALGO_API_KEY/OPENALGO_HOST,没有该工具或有效凭证时无法使用。
- 不适用于纯历史回测或无需实时流的场景(需要 WebSocket 实时行情)。