【Python量化】流程控制详解:用if-else+循环实现股票筛选与持仓判断
大家好,我是fairyran
前两篇我们完成了量化环境搭建 + 量化专属数据类型,现在你已经可以用Python存储股票代码、股价、均线、持仓状态等数据了。
但是!只会“存数据”还做不了量化策略。
量化交易的核心是什么?让程序代替人做判断、做筛选、做循环监控。
比如:
-
股价站上5日均线要不要买入?
-
多只股票批量筛选强势标的?
-
跌破均线是否触发止损?
-
遍历持仓列表判断每只股票的交易信号?
想要实现以上所有功能,必须掌握 Python 两大核心:条件判断(if-elif-else) + 循环语句(for/while)。
本篇不讲废话、全部量化实战场景,学完你可以直接写出:单标的信号判断 + 多标的批量选股脚本,完全衔接后续策略回测内容。
一、为什么量化必须学流程控制?
直白说:没有流程控制,就没有量化策略。
所有量化策略的底层逻辑都是三段式:
-
获取数据(股价、均线、成交量)
-
条件判断(是否满足买卖条件)
-
循环执行(批量选股、持续监控)
本篇全程使用股票均线策略逻辑(最经典、最适合新手入门),通俗易懂、可落地、可复用。
二、条件判断 if-elif-else:量化策略的“大脑”
1. 基础语法(量化简化版)
if 条件:满足条件执行(买入/持有)
elif 其他条件:满足该条件执行
else:都不满足执行(观望/空仓)
⚠️ 量化新手第一大坑:Python严格依赖缩进,缩进不对直接报错、逻辑错乱!
2. 量化实战:单只股票均线信号判断
策略逻辑(新手万能入门策略):
-
收盘价 > 5日均线 → 多头趋势:持有/买入
-
收盘价 < 5日均线 → 空头趋势:卖出/观望
# 量化场景:单股票均线判断
close = 18.6 # 当前收盘价
ma5 = 18.2 # 5日均线价格
if close > ma5:
print("✅ 信号:多头趋势,可持有或买入")
elif close < ma5:
print("❌ 信号:空头趋势,建议减仓或观望")
else:
print("⚖️ 信号:价格贴合均线,方向不明,观望")
3. 进阶:结合持仓状态的完整交易逻辑
真实量化不会只看价格,必须结合当前持仓状态,避免重复开仓、重复卖出。
# 真实量化交易逻辑
close = 18.6
ma5 = 18.2
is_hold = False # 当前是否持仓
if close > ma5 and not is_hold:
print("🟢 最终信号:空仓 + 站上均线 → 执行买入")
elif close < ma5 and is_hold:
print("🔴 最终信号:持仓 + 跌破均线 → 执行卖出")
else:
print("⚪ 最终信号:无操作,继续观望")
这就是最基础、最标准的量化交易逻辑结构,未来所有复杂策略(MACD、KDJ、趋势突破、网格交易)全部都是在这个结构上叠加条件。
三、for循环:批量选股、多标的遍历神器
if 判断只能处理单只股票。
做量化我们需要批量监控几十只、上百只股票,这就必须用for循环。
核心用途:遍历股票列表,批量判断交易信号、批量选股
量化实战:多股票批量选股系统
# 多只股票数据(列表嵌套字典,量化标准存储格式)
stock_list = [
{"code": "sh000001", "name": "上证指数", "close": 3200, "ma5": 3180},
{"code": "sz000001", "name": "平安银行", "close": 12.5, "ma5": 12.8},
{"code": "sh600036", "name": "招商银行", "close": 35.6, "ma5": 35.2},
{"code": "sz002594", "name": "比亚迪", "close": 265, "ma5": 268}
]
# 批量遍历选股
print("===== 每日量化选股结果 =====")
for stock in stock_list:
code = stock["code"]
name = stock["name"]
close = stock["close"]
ma5 = stock["ma5"]
if close > ma5:
print(f"✅【强势标的】{code} {name}:收盘价站上5日线,可关注")
else:
print(f"❌【弱势标的】{code} {name}:跌破5日线,规避")
运行结果直接帮你自动筛选强势股、弱势股,这就是量化自动化的魅力。
四、while循环:实现持续监控(模拟实时盯盘)
for循环适合一次性批量处理
while循环适合持续循环、实时监控
量化场景:模拟实时盯盘、循环监控价格、定时检测信号。
量化实战:实时价格监控脚本
# while循环模拟实时盯盘
import time
price = 18.0
ma5 = 17.5
count = 0
# 模拟循环监控3次
while count < 3:
# 模拟价格小幅波动
price += 0.1
count += 1
if price > ma5:
print(f"第{count}次监控:当前价格{price:.2f},多头正常")
else:
print(f"第{count}次监控:价格回落,注意风险")
time.sleep(1) # 暂停1秒,模拟行情刷新
后续我们做实时行情监控、自动交易,全部依赖 while 循环结构。
五、break & continue:量化策略精细化控制
两个关键字,极大提升策略专业性:
-
break:满足条件直接终止循环(找到目标股票就停止遍历)
-
continue:跳过当前标的,继续下一个(剔除ST股、次新股)
实战:筛选到第一只强势股立即停止遍历
stock_list = [
{"code": "sh000001", "close": 3200, "ma5": 3180},
{"code": "sz000001", "close": 12.5, "ma5": 12.8},
{"code": "sh600036", "close": 35.6, "ma5": 35.2}
]
for stock in stock_list:
if stock["close"] > stock["ma5"]:
print(f"找到强势标的:{stock['code']}")
break # 找到后直接终止循环
else:
continue # 不满足则跳过
六、新手高频踩坑总结(量化专属)
整理90%新手都会犯的错误,一次性避坑:
-
缩进错误:if/for/while下方代码必须缩进,否则直接报错或逻辑错乱
-
条件写反:把“大于均线写成小于均线”,直接导致策略完全反向
-
死循环:while循环忘记设置终止条件,程序卡死
-
重复交易:判断条件不结合持仓状态,导致一直触发买入信号
-
遍历索引混乱:for循环遍历列表时不要手动写索引,直接遍历元素最稳
七、本篇综合大案例:完整简易选股策略
结合:数据类型 + if判断 + for循环,写出一个可直接使用的极简量化选股脚本
# 完整量化选股小策略
stock_pool = [
{"code":"sh600036","name":"招商银行","close":35.5,"ma5":35.1,"hold":False},
{"code":"sz002594","name":"比亚迪","close":264,"ma5":266,"hold":True},
{"code":"sh601318","name":"中国平安","close":42.3,"ma5":42.0,"hold":False}
]
print("===== 批量策略信号输出 =====")
for s in stock_pool:
if s["close"] > s["ma5"] and not s["hold"]:
print(f"【买入信号】{s['code']} {s['name']}:站上均线,空仓可介入")
elif s["close"] < s["ma5"] and s["hold"]:
print(f"【卖出信号】{s['code']} {s['name']}:跌破均线,持仓需止盈止损")
else:
print(f"【观望】{s['code']} {s['name']}:无交易信号")
到这里,你已经具备了编写量化策略逻辑的底层能力。
下期预告 & 追更引导
本篇我们搞定了量化逻辑判断 + 批量选股
下一篇是【第四篇】:Python函数封装
你将学会:
-
把选股逻辑封装成专属量化工具函数
-
告别重复代码,让你的策略更专业、可复用
-
为后续回测框架搭建做铺垫
代码领取:全文完整源码,评论区回复【量化流程】即可获取!
有问题欢迎评论区交流,持续更新Python量化零基础实战系列,带你从零搭建完整量化体系!
更多推荐

所有评论(0)