pywencai升级到0.12.2后,我的同花顺问财智能选股脚本终于跑通了(附完整代码)
pywencai 0.12.2版本升级实战同花顺问财智能选股脚本修复指南上周五晚上当我像往常一样运行那个已经稳定工作三个月的选股脚本时终端突然弹出一堆红色错误信息。这个脚本原本每天都能帮我筛选出符合特定技术形态的股票池但此刻它却罢工了。作为一名量化交易爱好者我意识到这可能是pywencai库的接口发生了变化。经过两天的排查和测试终于通过升级到0.12.2版本解决了问题。本文将完整记录这次故障排查和修复的全过程并分享升级后的智能选股脚本实现。1. 问题现象与初步诊断那天的错误信息看起来像是服务器返回的数据结构发生了变化。原本应该返回整齐的DataFrame格式数据现在却变成了包含HTML标签的混乱字符串。典型的错误输出如下{ 请填写主题: p为你从5340只个股中找到strongspan stylecolor:#ff23461644/span/strong只符合条件的A股, xuangu_tableV1: code 股票简称 最新价..., container: {btn1: ...} }这种数据结构的变化导致原有的pandas DataFrame解析逻辑完全失效。我首先检查了以下几个方面网络连接状态确认不是简单的网络超时或拦截问题查询语法验证确保选股条件没有违反同花顺的最新规则环境依赖检查运行pip show pywencai发现版本停留在0.12.0关键排查步骤在Jupyter Notebook中新建内核测试基础查询对比官方文档查看接口变更记录检查GitHub仓库的issue列表寻找类似问题2. 版本升级与依赖管理确认问题根源在于库版本过旧后执行了以下升级命令pip install pywencai -U --upgrade-strategy eager升级过程输出显示从0.12.0升级到了0.12.2版本Successfully uninstalled pywencai-0.12.0 Successfully installed pywencai-0.12.2升级后需要特别注意检查依赖兼容性运行pip check确认没有冲突验证基础功能简单查询测试接口可用性环境隔离建议使用virtualenv或conda创建独立环境# 验证安装成功的版本 import pywencai print(pywencai.__version__) # 应输出0.12.23. 智能选股脚本重构升级后需要调整脚本以适应新的返回数据结构。以下是完整的重构后代码#!/usr/bin/env python3 # -*- coding: utf-8 -*- import pywencai from typing import Union, List import pandas as pd def smart_stock_picker( query: str, per_page: int 200, return_type: str df ) - Union[pd.DataFrame, List[str], None]: 增强版问财智能选股函数 参数 query: 问财查询语句 per_page: 每页返回数量 return_type: 返回类型 (df/code/symbol) 返回 根据return_type返回相应格式的数据 try: result pywencai.get( queryquery, sort_key股票代码, sort_orderasc, perpageper_page, secondary_intentstock ) if result is None or result.empty: return None # 统一处理返回结果 result result.round(3) if return_type symbol: return result[股票代码].tolist() elif return_type code: return result[股票代码].str[:6].tolist() else: return result except Exception as e: print(f查询执行失败: {str(e)}) return None if __name__ __main__: # 示例查询非ST、非停牌、连续3天涨幅1%-4%、股价在60日均线上方 selection_query 非st非停牌 连续3天涨幅介于1%-4% 股价大于60日均线 无长上影线 换手率3% 市值500亿 selected smart_stock_picker( queryselection_query, per_page50, return_typedf ) if selected is not None: print(筛选结果) print(selected[[股票代码, 股票简称, 最新价, 区间涨跌幅]]) else: print(未找到符合条件的股票)4. 高级查询技巧与性能优化新版本支持更复杂的查询条件和性能调优参数多条件组合查询示例# 技术面基本面组合查询 tech_fundamental_query 非st非停牌 连续5日资金净流入 市盈率(ttm)30 市净率5 近3年ROE15% 机构持股比例20% 近1月研报数量3 性能优化建议分页加载对于大数据集使用perpage参数控制单次请求量字段过滤通过fields参数指定只返回需要的字段缓存机制对稳定策略实施本地结果缓存# 优化后的查询示例 efficient_query { query: 市值50-200亿近5日换手率5%, perpage: 100, fields: [股票代码, 股票简称, 最新价, 市值], sort_key: 市值, sort_order: desc }5. 异常处理与监控方案为确保脚本长期稳定运行需要建立完善的错误处理机制常见异常类型及处理策略异常类型可能原因处理建议ConnectionError网络问题重试机制代理切换JSONDecodeError接口返回异常验证查询语法检查版本KeyError字段变更更新字段映射表RateLimitExceeded请求过频增加延时分批查询实现带重试的查询装饰器from functools import wraps import time import random def retry_on_failure(max_retries3, base_delay1): def decorator(func): wraps(func) def wrapper(*args, **kwargs): retries 0 while retries max_retries: try: return func(*args, **kwargs) except Exception as e: retries 1 if retries max_retries: raise delay base_delay * (2 ** retries) random.uniform(0, 1) time.sleep(delay) return wrapper return decorator retry_on_failure(max_retries5) def robust_stock_query(query): return pywencai.get(queryquery)6. 量化策略集成实践将修复后的选股模块整合到量化交易系统中策略执行流程生成动态查询条件执行智能选股风险控制过滤生成交易信号执行回测或实盘交易class QuantitativeStrategy: def __init__(self): self.universe [] def refresh_universe(self): 更新股票池 query self.build_dynamic_query() self.universe smart_stock_picker(query, return_typecode) def build_dynamic_query(self) - str: 构建动态查询条件 base_conditions [ 非st, 非停牌, 流通市值50亿, 近5日换手率3% ] # 添加技术指标条件 if self.use_technical: base_conditions.extend([ MACD金叉, KDJ_J20, 收盘价20日均线 ]) return .join(base_conditions) property def use_technical(self) - bool: 是否使用技术指标 return True7. 版本变更的最佳实践根据这次经验总结出以下维护建议依赖管理规范使用requirements.txt固定主要版本定期执行pip list --outdated检查更新为关键项目维护变更日志自动化升级检查脚本#!/bin/bash # check_updates.sh packagepywencai current$(pip show $package | grep Version | awk {print $2}) latest$(pip index versions $package | grep -oP (?latest: ).*) if [ $current ! $latest ]; then echo 发现新版本: $package $current - $latest read -p 是否升级? (y/n) -n 1 -r if [[ $REPLY ~ ^[Yy]$ ]]; then pip install --upgrade $package fi else echo $package 已经是最新版本 ($current) fi在终端中运行chmod x check_updates.sh ./check_updates.sh即可检查更新。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2569372.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!