
为什么需要自己写监控程序
券商APP的提醒功能经常延迟,甚至不触发。期货夜盘波动大,人不可能24小时盯着屏幕。用Python自己写一个监控脚本,价格到了指定位置,邮件直接发到手机,比任何推送都可靠。
准备工作
安装两个库:akshare用于抓取股票和期货的实时行情,yagmail用于发邮件。命令行里执行:

pip install akshare yagmail
邮箱需要开启SMTP服务。以QQ邮箱为例,进入设置-账户,开启SMTP,生成授权码。这个授权码就是后面发邮件用的密码,不是你的邮箱登录密码。
获取实时价格
akshare的接口非常简单。股票用stock_zh_a_spot_em,期货用futures_zh_spot。下面是一个获取股票实时价格的函数:
import akshare as ak
def get_stock_price(symbol):
df = ak.stock_zh_a_spot_em()
row = df[df['代码'] == symbol]
if row.empty:
return None
return float(row['最新价'].values[0])
期货实时行情需要指定合约代码,比如螺纹钢主力合约rb2310:
import akshare as ak
def get_futures_price(symbol):
df = ak.futures_zh_spot(symbol=symbol, market='CF')
return float(df['current_price'].values[0])
注意akshare的接口偶尔会变动,使用前最好查一下最新文档。
发送邮件提醒
yagmail发邮件只需要三行代码。把邮箱地址、授权码、收件人填好:
import yagmail
def send_email(subject, content):
yag = yagmail.SMTP(user='你的邮箱@qq.com', password='授权码', host='smtp.qq.com')
yag.send(to='收件邮箱@qq.com', subject=subject, contents=content)
如果想让邮件同时发到手机短信,可以用运营商的邮件短信提醒功能,或者用IFTTT转发。最直接的办法是邮箱绑定微信,邮件来了微信会弹通知。
完整监控逻辑
把获取价格和发送邮件组合起来。设定一个阈值,价格突破就发邮件。实际运行中要避免重复发送,加一个状态标记:
import time
symbol = '600519'
threshold_high = 1800
threshold_low = 1700
sent_high = False
sent_low = False
while True:
price = get_stock_price(symbol)
if price is None:
time.sleep(10)
continue
if price >= threshold_high and not sent_high:
send_email('价格突破提醒', f'{symbol} 当前价格 {price},已突破 {threshold_high}')
sent_high = True
if price <= threshold_low and not sent_low:
send_email('价格跌破提醒', f'{symbol} 当前价格 {price},已跌破 {threshold_low}')
sent_low = True
time.sleep(30)
这个循环每30秒检查一次。实际使用时可以把sleep时间设短一点,但不要低于5秒,否则akshare接口可能返回空数据。
处理异常和网络问题
网络请求会失败,接口会超时。加一个try-except,记录错误但不中断程序:
try:
price = get_stock_price(symbol)
except Exception as e:
print(f'获取价格失败: {e}')
time.sleep(30)
continue
还有一个坑:akshare返回的DataFrame列名可能变化。每次运行前先打印一下列名,确保代码里的'最新价'、'代码'这些字段是对的。
多品种监控
股票和期货可以放在一个列表里遍历。期货代码需要区分交易所,上期所是SHFE,大商所是DCE,郑商所是CZCE。akshare的futures_zh_spot需要传market参数。写一个通用的监控函数:
def monitor(watchlist):
for item in watchlist:
if item['type'] == 'stock':
price = get_stock_price(item['code'])
else:
price = get_futures_price(item['code'])
check_and_alert(item, price)
watchlist里每个字典包含代码、类型、上下阈值、是否已触发。这样一套程序可以同时盯十几个品种。
让程序后台运行
Windows上可以用pythonw.exe运行脚本,没有控制台窗口。Linux或Mac用nohup:
nohup python monitor.py &
想更稳定的话,用systemd或者supervisor管理进程。程序崩溃自动重启。
重要提醒
邮件提醒有延迟,QQ邮箱到手机通常3到10秒。期货夜盘波动快,这个延迟可能错过最佳点位。程序只适合辅助盯盘,不能完全代替手动交易。
akshare的数据来自公开接口,偶尔会不准。关键决策前最好用交易软件再确认一次价格。
代码里的阈值和品种要根据自己的交易计划调整。不要用固定的百分比,用技术位或者波动率来定。
监控程序跑起来之后,把日志打印到文件里,方便回头检查哪里出了问题。