量化入门-用Python筛选爆量上涨的股票
思路爆量上涨通常意味着资金关注度突然提升可能是主力进场或者利好消息刺激。我的筛选逻辑选股条件沪深主板排除ST风险票流通市值200-2000亿盘子适中避免庄股太小风险高年利润0.5亿基本面过得去近100天涨幅50%不追高基金持股比例3%有机构关注一般不是垃圾票爆量定义当日成交量 ≥ 近100天平均成交量的3倍当日收阳线收盘价开盘价环境pip install jvQuanttoken去官网注册拿一下就行。代码# -*- coding: utf-8 -*- 量化筛选-爆量上涨筛选工具 功能说明 1. 筛选符合条件的股票 2. 获取每只股票近100天前复权日K线数据 3. 分析并筛选出爆量上涨的日期成交量n倍均值且当日上涨 4. 按爆量倍数排序输出结果 作者Juice 日期2023-02-27 import jvQuant import time # 配置参数 TOKEN 你的token # 替换成你自己的 # 筛选条件 QUERY_CONDITION 近100天涨幅小于50%基金持股比例大于3%,沪深主板,非ST,流通市值200-2000亿,年利润大于0.5亿 # 爆量阈值 VOLUME_RATIO_THRESHOLD 3.0 # K线参数 KLINE_LIMIT 100 KLINE_TYPE day KLINE_FQ 前复权 def safe_float(val, default0.0): 安全转浮点数 try: return float(val) except (ValueError, TypeError): return default def main(): db jvQuant.sql_client.Construct(TOKEN) # 第一步筛选股票 print( * 60) print(第一步筛选符合条件的股票筛选条件:, QUERY_CONDITION) print( * 60) query_result db.query( QUERY_CONDITION, page1, sort_type1, sort_keyTOTAL_MV ) if query_result[code] ! 0: print(f查询失败: {query_result[message]}) return data query_result[data] stock_list data[list] print(f筛选条件: {data[query]}) print(f符合条件的股票数量: {data[count]}) print() # 第二步获取K线分析爆量 print( * 60) print(第二步获取K线并分析爆量上涨) print( * 60) results [] for i, stock in enumerate(stock_list): code stock[0] name stock[1] print(f[{i1}/{len(stock_list)}] {code} {name}, end ) try: kline_result db.kline( codecode, catestock, fqKLINE_FQ, typeKLINE_TYPE, limitKLINE_LIMIT ) if kline_result[code] ! 0: print(失败) continue klines kline_result[data][list] if len(klines) 20: print(数据不足) continue # 算平均成交量 volumes [safe_float(k[5]) for k in klines] avg_volume sum(volumes) / len(volumes) # 找爆量上涨 count 0 for k in klines: date k[0] open_price safe_float(k[1]) close safe_float(k[2]) volume safe_float(k[5]) pct_chg safe_float(k[8]) turnover safe_float(k[10]) # 爆量且上涨 if close open_price and volume VOLUME_RATIO_THRESHOLD * avg_volume: volume_ratio volume / avg_volume results.append({ code: code, name: name, date: date, close: close, volume_ratio: volume_ratio, turnover: turnover, pct_chg: pct_chg }) count 1 print(f完成(爆量{count}次)) except Exception as e: print(f错误: {e}) time.sleep(0.1) # 别请求太快 # 第三步输出结果 print() print( * 60) print(第三步输出爆量上涨结果) print( * 60) if not results: print(没有找到符合条件的爆量上涨记录) return results.sort(keylambda x: x[volume_ratio], reverseTrue) output_lines [] output_lines.append(f共发现 {len(results)} 条爆量上涨记录\n) output_lines.append(f{序号:4} {代码:8} {名称:10} {日期:12} {收盘价:8} {爆量倍数:8} {换手率%:8} {涨幅%:8}) output_lines.append(- * 90) for i, r in enumerate(results, 1): line f{i:4} {r[code]:8} {r[name]:10} {r[date]:12} {r[close]:8.2f} {r[volume_ratio]:8.2f} {r[turnover]:8.2f} {r[pct_chg]:8.2f} output_lines.append(line) output_text \n.join(output_lines) print(output_text) with open(result.txt, w, encodingutf-8) as f: f.write(output_text) print(f\n结果已保存到 result.txt) if __name__ __main__: main()用到的接口选股接口db.query(条件1,条件2,条件3, page1, sort_type1, sort_keyTOTAL_MV)条件用逗号隔开支持市值、涨跌幅、财务指标这些。K线接口db.kline(code000001, catestock, fq前复权, typeday, limit100)返回的K线数据是列表格式k[0] 日期k[1] 开盘k[2] 收盘k[3] 最高k[4] 最低k[5] 成交量k[8] 涨跌幅k[10] 换手率跑一下第一步筛选符合条件的股票筛选条件: 近100天涨幅小于50%基金持股比例大于3%,沪深主板,非ST,流通市值200-2000亿,年利润大于0.5亿 符合条件的股票数量: 180 第二步获取K线并分析爆量上涨 [1/100] 601611 中国核建 完成(爆量1次) [2/100] 600871 石化油服 完成(爆量1次) ... 第三步输出爆量上涨结果 共发现 104 条爆量上涨记录 序号 代码 名称 日期 收盘价 爆量倍数 换手率% 涨幅% ------------------------------------------------------------------------------------------ 1 601868 中国能建 2026-03-12 3.80 8.02 14.75 10.14 2 601016 节能风电 2026-03-17 4.55 8.00 18.65 9.90 3 000537 绿发电力 2026-03-17 11.68 7.96 10.58 4.01几点说明token别泄露代码里记得删掉再发可以考虑做本地数据缓存回测更快爆量倍数阈值可以根据需要调我设的3倍这只是筛选工具不构成投资建议
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2489967.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!