Python盯盘机器人,实时监控股票价格,还能邮件通知你

前言

Python凭借其开发效率高和功能强大的特性,在众多编程语言中脱颖而出,成为大数据时代的分析利器。

据我多年的领悟,编程语言只是一种按照人的意图去实现特定功能的高效工具而已,程序化所实现的核心决策功能依然需要人工智慧来支撑,在量化投资交易领域,投资者所思考的交易逻辑是非常重要,正所谓重剑无锋,大巧不工(真正的剑技不是要依靠剑锋,而是个人的修行,投资也是如此,投资者的素养最为重要),因此应当把80%的时间与精力放到投资模型构建的思考上,20%的时间与精力放到编程实现上。

即将走上量化投资交易的你,工欲善其事,必先利其器,将Python作为量化投资交易的首选语言,无疑是最为明智的,余生很短,请跟我一起用python!

思路

在量化交易方面,通过计算机程序自动实现股票盯盘与找到买卖信号,应该是很多人都比较向往的吧。但九层之台,起于累土,千里之行,始于足下,只有打下坚实的基础,将各个知识点逐一突破后加以综合运用,才能构建自己完整的量化交易体系。

今天就从量化交易最基础的入门知识点讲起,通过Python程序,编写股票价格实时盯盘的机器人,当股价触发一定的涨幅条件时,自动发送电子邮件或短信通知到投资者,这一场景可运用于平时喜欢炒股,但是没有时间盯盘的股民朋友。
通过该文章的学习,读者可以掌握对证券(包括股票和基金)实时价格的获取、电子邮件发送、程序定时运行和程序打包成exe文件等知识点。

盯盘机器人的工作流程图及效果图

为便于让各位读者从全局观了解整个程序运行的逻辑,特将流程图绘制如下。

1. 程序工作流程图

在这里插入图片描述
2. 股价监控的效果

例如: 2021年7月19日,所监控的目标股票三峡能源(证券交易代码:600905)因某时点的涨跌幅达到监控水平线,自动触发邮件提醒,通过邮件方式告知投资者当前价格,涨跌幅和盈亏情况等数据,效果如下图所示。

在这里插入图片描述

代码实现

1. 需要安装的第三方库及简要介绍

这里首先为大家介绍一下,本文需要用到的若干Python库。

  • Tushare:一个免费、开源的python财经数据接口包,通过该库的get_realtime_quotes(code)的方法(code为目标证券的交易代码,包括股票和ETF基金的交易代码都可以),可以返回股票的当前报价和成交信息,返回值的数据类型为DataFrame,该DataFram包括name(证券名称),open(今日开盘价),pre_close(昨日收盘价),price(当前价格)…time(时间)等,根据本次需求,仅需要部分维度即可,其他的维度,读者可以自行通过print()打印方式查看所有的维度信息。
  • pandas:数据分析的核心库,因为调用Tushare库的get_realtime_quotes(code)方法返回DataFrame数据类型,所以需要该库对返回数据进行操作。
    schedule:在证券交易中的制度中,有交易和休市时间,要实现程序的定时运行,该库必不可少,详见程序部分对该库用法的介绍。
  • smtplib:该库主要实现电子邮件的发送。
  • sys:在交易日的15:00以后已经闭市,为避免资源的浪费,此时可以调用sys.exit()方法实现程序的自动退出。
  • pyinstaller:用该库可以将程序打包成可执行的exe格式文件,便于程序的运行。
    以上所需的第三方库,可以使用pip指令完成安装即可。

2. 程序代码实现

① 编写获取当前证券价格信息的方法

def get_now_jiage(code):df = ts.get_realtime_quotes(code)[['name','price','pre_close','date','time']]return df

其中参数code为目标股票的交易代码,例如股票名称为“三峡能源”的证券交易代码为“600905”。调用Tushare的get_realtime_quotes(‘600905’)方法,即可返回一个DataFrame类型的数据,根据功能需要,我们只需要获取name(股票名称)、price(当前价格)、pre_close(昨日收盘价)、date(价格对应的日期)和time(价格对应的时间)即可

编写好该方法后,主需要传递目标股票的交易代码至get_now_jiage方法,即可获取需要的数据。

② 编写判断是否在交易时间段内的方法

在每个交易日,股票交易的时间为09:30-11:30,13:00-15:00,早上9:30程序开始监控,可以通过schedule来实现(后面讲解),在11:30-13:00之间的午间休市时间内,为避免造成资源浪费,就不必调用Tushare接口的数据,该时间段我们可以称为暂停交易时间。判断是否在暂停交易时间段的方法编写如下:

def pd_ztjytime():#判断是否是交易时间now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')now_datetime = datetime.datetime.strptime(now_time, '%Y-%m-%d %H:%M:%S')d1 = datetime.datetime.strptime(datetime.datetime.now().strftime('%Y-%m-%d') + ' 11:30:01', '%Y-%m-%d %H:%M:%S')d2 = datetime.datetime.strptime(datetime.datetime.now().strftime('%Y-%m-%d') + ' 13:00:00', '%Y-%m-%d %H:%M:%S')delta1 = (now_datetime - d1).total_seconds()delta2 = (d2-now_datetime).total_seconds()if delta1>0 and delta2>0 : #在暂停交易的时间内return True  #在暂停的交易时间范围内,返回 Trueelse:return False #不在暂停的交易时间范围内,返回 False

③ 编写监控股价的主体运行程序

该模块作为股价监控与计算涨跌幅,判断是否发送通知的核心程序,为了与早间9:30定时运行程序的模块相配合,故该模块写成独立的方法,完整程序如下:

def do_programe(code):if pd_ztjytime()==False: #判断是否在暂停交易的时间范围内info=get_now_jiage(code) #调用方法获取当前的DataFramenow_jiage=float(info['price'][0]) #获取现价name=info['name'][0] #获取证券名称pre_close=float(info['pre_close'][0]) #获取昨日收盘价riqi=info['date'][0] #获取现价对应的日期sj=info['time'][0] #获取价格对应的时间now_zdie=round((now_jiage-pre_close)/pre_close*100,2) #计算现在的涨跌幅all_zdie=round((now_jiage-cbj)/cbj*100,2)  #计算股票持有期间内总的涨跌幅,其中cbj为购买时候的成本价,需要约定全局变量now_shizhi=round(shuliang*now_jiage,2) #计算股票现在的市值,其中shuliang为购买股票的数量,需要约定为全局变量ykui=round(now_shizhi-cbj*shuliang,2)  #计算股票现在总的盈亏if (abs(now_zdie)>=3 and abs(now_zdie)<3.09) or (abs(now_zdie)>=6  and abs(now_zdie)<6.05)  or (abs(now_zdie)>=9 and  abs(now_zdie)<9.1) : #判断现在的涨跌幅是否在目标范围内email_comment = []email_comment.append('<html>')email_comment.append('<b><p><h3><font size="2" color="black">您好:</font></h4></p></b>')email_comment.append('<p><font size="2" color="#000000">根据设置参数,现将监控到'+name+'('+str(code)+')的证券价格异动消息汇报如下:</font></p>')email_comment.append('<table border="1px" cellspacing="0px"   width="600" bgcolor=' + color_bg_fg + ' style="border-collapse:collapse">')email_comment.append('<tr>')email_comment.append('<td align="center"><b>序号</b></td>')email_comment.append('<td align="center"><b>购买单价</b></td>')email_comment.append('<td align="center"><b>持股数</b></td>')email_comment.append('<td align="center"><b>现价</b></td>')email_comment.append('<td align="center"><b>现涨跌幅</b></td>')email_comment.append('<td align="center"><b>总涨跌幅</b></td>')email_comment.append('<td align="center"><b>现市值</b></td>')email_comment.append('<td align="center"><b>盈亏额</b></td>')email_comment.append('<td align="center"><b>异动时间</b></td>')email_comment.append('</tr>')email_comment.append('<tr>')email_comment.append('<td align="center">'+str(1)+'</td>')email_comment.append('<td align="center">'+str(cbj) + '</td>')email_comment.append('<td align="center">' + str(shuliang) + '</td>')email_comment.append('<td align="center">' + str(now_jiage) +'</td>')email_comment.append('<td align="center">' + str(now_zdie) + '%</td>')email_comment.append('<td align="center">' + str(all_zdie) + '%</td>')email_comment.append('<td align="center">' + str(now_shizhi) + '元</td>')email_comment.append('<td align="center">' + str(ykui) + '元</td>')email_comment.append('<td align="center">' + str(riqi) +' '+str(sj) +'</td>')email_comment.append('</tr>')email_comment.append('</table>')email_comment.append('<p><font size="2" color="black">祝:股市天天红,日日发大财!</font></p>')email_comment.append('</html>')send_msg = '\n'.join(email_comment)send_Email(email_add[0], send_msg)

在上述程序中,判断是否发送通知的判断语句为:

if (abs(now_zdie)>=3 and abs(now_zdie)<3.1) or (abs(now_zdie)>=6  and abs(now_zdie)<6.1)  or (abs(now_zdie)>=9 and  abs(now_zdie)<9.1) 

上述if判断语句表示现在涨跌幅的绝对值在3%(含)至3.1%(不含)(使用绝对值可以同时兼顾涨和跌的幅度),或6%(含)至6.1%(不含),或9%(含)至9.1%(不含)之间时,便通过发送电子邮件的形式发送通知,具体的涨跌幅触发参数读者可以自行修改。

电子邮件发送的关键程序为:

send_Email(email_add[0], send_msg)

其中,email_add为列表形式,可以存放多个接收通知的电子邮件地址,此例中仅设置一个接收地址,全局变量email_add=[‘…’],故获取该地址的程序为email_add[0]。send_msg即为要发送的邮件内容,邮件内容使用列表email_comment进行添加,这里发送的邮件格式为html格式,使用html格式是为了方便绘制表格。

发送电子邮件send_Email方法的程序如下:

def send_Email(Email_address, email_text):from_addr = '*****' #发出电子邮件的地址password = '*****'   #发出电子邮件的密码title = '股票价格异动监控消息-' + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  #电子邮件的标题msg = MIMEText(email_text, 'html', 'utf-8') #电子邮件的格式是HTMLmsg['From'] = from_addrmsg['To'] = Email_addressmsg['Subject'] = titletry:server = smtplib.SMTP_SSL('smtp.qq.com', 465)server.login(from_addr, password)  # 发送邮件server.send_message(msg)server.quit()# print(Email_address+'  send success!')#send_info.append(Email_address + '  send success!\n')except Exception as e:a+1# print(e)#send_info.append(e + '\n')#send_info.append(Email_address + ' send failed!\n')# print(Email_address+' send failed!')

from_addr为发件人的邮箱地址,而password则是发件人的授权码,这里需要根据实际情况进行修改和填写。

另外,程序中的:

server = smtplib.SMTP_SSL(‘smtp.qq.com’, 465)

是选择QQ邮箱的SMTP服务器地址smtp.qq.com,默认端口为465,如果是其他邮箱,则应该进行相应的服务器和端口号进行修改。

如何获取发件人的授权码呢?以QQ邮箱为例说明:

第一步:登录QQ邮箱,单击顶部的“设置”链接,然后单击“账户”标签,如下图所示。

在这里插入图片描述
第三步:单击“开启”链接后,会有一个验证密保的过程。按照页面中的说明,向指定号码发送指定内容的手机短信,发送完毕后单击页面中的“我已发送”按钮,会弹出一个框,里面就包含SMTP授权码,把它复制并存储起来,方便以后调用。

④ 编写调用do_programe(code)的监控程序

为了实现主体程序的调用,编写run()方法入下所示:

def run():while True:do_programe('600905')now_time=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')d1 = datetime.datetime.strptime(now_time, '%Y-%m-%d %H:%M:%S')d2 = datetime.datetime.strptime(datetime.datetime.now().strftime('%Y-%m-%d')+' 15:00:00', '%Y-%m-%d %H:%M:%S')delta = d2 - d1if delta.total_seconds()<=0:sys.exit()time.sleep(1)

⑤ 编写每天9点30分开始监控的主程序

为了实现每个交易日交易时点开始监控,需要的程序如下所示:

if __name__ == '__main__':schedule.every().day.at("09:30").do(run)while True:schedule.run_pending()time.sleep(1)

⑥ 程序打包与自动运行

当编写完程序以后,就需要通过打包的形式把程序转化为exe格式,该格式下的程序可以点击或者设置自动运行,打包的库是pyinstaller ,使用命令pyinstaller -w -F程序路径\程序名.py 即可。其中-w表示生成的exe文件运行时不出现黑色的DOS界面,我们只需要该程序 “悄悄” 在后台运行即可。

为了实现程序在电脑开机的时候自动运行,可以将生成的exe文件复制到windwos系统的Startup文件夹下,点击windows的开始菜单-所有程序,找到“启动”或者“Startup”的文件夹,将exe文件复制到该文件夹内,每次开机,电脑就可以自动运行该监控程序。

因为程序运行不出现任何界面,为了查看程序是否在运行,可以用快捷键“Ctrl Alt Delete”的快捷键打开任务管理器,在进程里面可以查看到“股票监控.exe”(这里的文件名是作者改的文件名)的文件,表明程序在监控中。

在这里插入图片描述

展望

该程序只是设置了一只股票来作为简单功能实现的案例,仍然有一定的改进空间,说明如下。

一是在实践中,往往都是构建一个股票池(数只股票)来动态监测股价和自动判断交易时点(比如MACD,均线,KDJ指标等),往往需要结合数据库技术,才能便于灵活构造股票池。

二是对于发送短信的功能,本文中并未做介绍,仅介绍了电子邮件,其实短信通知的思路和邮件的思路一致。如果要实现免费发短信功能,读者可以在twilio 网站上(https://www.twilio.com)上注册和调用相应功能即可,读者可以再网上搜索。

三是关于Tushare数据接口,本文中用的是Tushare老的接口API,目前官方主要维护的是Tushare Pro接口,相应的调用功能要达到一定的积分才可以,但是相比其他收费接口,Tushare是属于业界的良心之作,关于Tushare Pro,参考的网址详见https://waditu.com/document/2。

四是其他商业的量化接口,可以推荐聚宽量化接口,大约有半年左右的免费试用期,但是免费过后,每个月还是有几千元的收费,读者可选择使用聚宽网址https://www.joinquant.com/view/community/list?listType=1。
五是关于爬虫获取证券交易数据,现在证券交易数据比较丰富的网站有东方财富、同花顺、新浪财经以及和讯网等。通过爬虫也可以获取相应的数据,但是应当注意的是,像本文中每个交易日每秒钟调用一次API,如果用爬虫来实现,就不理想,因为调用太频繁可能触发网站的反爬虫机制。

六是该程序设置的是在本地计算机上自动开机运行,在程序不断优化和增加功能后,感兴趣的读者可以了解购买云服务器部署监控程序。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/54929.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP实战:Pytorch实现6大经典深度学习中文短文本分类-bert+ERNIE+bert_CNN+bert_RNN+bert_RCNN+bert_DPCNN

目录 Introduction 导言数据集Python环境及安装相应依赖包Anaconda环境配置 源代码地址预训练语言模型下载新建saved_dict文件夹 Bert模型说明 ERNIEERNIE 1.0ERNIE2.0ERNIE 3.0 bert_CNN、bert_RNN、bert_RCNN、bert_DPCNN模型说明 各模型效果对比参考资料其它资料下载 Introd…

程序员诗2首:悲催诗(史)与爱情诗

这几周《非诚勿扰》来了不少IT男&#xff0c;而且来自硅谷&#xff0c;这触发了大家对程序员的好奇心&#xff0c;其中主持人孟非读的一首诗堪称经典&#xff0c;我载下来&#xff0c;大家来吐吐槽&#xff01; 举头望明月&#xff0c;低头写程序。 但愿人长久&#xff0…

程序员可以有多浪漫,盘点那些像诗一样美的代码(C语言版)

文章目录 「没有你&#xff0c;我无法向世界问好」「让你的每个程序都可以留下笑脸」「UNHANDLED LOVE」「IMPORT SOUL」「很久很久以前&#xff0c;...」「都听你的」「Hello World」「最萌宏定义」「假作真时真亦假」「嘤语言 & e语言」「面向StackOverflow编程」「Don’…

JAVA 仿QQ聊天程序(附源码)

个人推荐: &#x1f4e2;&#x1f4e2;&#x1f4e2; 前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下 "通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。点击跳转到教程。 前言: 第一次通过java编写完了一个模拟QQ的C/S…

2022年营销传播研究报告

第一章 行业概况 营销传播是公司试图向消费者直接或间接地告知、劝说和提醒其销售的产品和品牌信息的活动。在某种意义上&#xff0c;营销传播代表着公司及其品牌的声音&#xff0c;它们是公司与消费者进行对话和建立关系的桥梁。营销传播能够通过强化顾客忠诚度&#xff0c;提…

【RPA之家转载】捷报频传,影刀RPA荣获“时尚行业数字化卓越产品大奖”

RPA之家&#xff08;RPA之家|RPA|RPA新闻|RPA案例|RPA应用|RPA咨询|RPA培训|RPA认证|RPA教程&#xff09;是中国具有影响力的RPA垂直交流社区&#xff0c;社区汇聚了RPA领域的各类从业人员。其中包括RPA开发工程师、售前工程师、业务分析师、架构师、运维工程师、项目管理、项目…

哪家代运营公司比较好?天猫代运营公司十大排名任你挑选。

如今的疫情反反复复&#xff0c;在这种情形下&#xff0c;电商行业呈现了更大的发展空间。而随着互联网的发展&#xff0c;也让传统的实体店铺陷入了困境&#xff0c;于是大家纷纷进行了新的尝试&#xff0c;向线上电商平台进军&#xff0c;但是由于电商的技术壁垒比较高&#…

《python爬爬乐》入门篇:结构类型详解

python爬虫 字典 python中的字典(dict)&#xff0c;来源于生活中的目录。它的主要特征&#xff0c;不是根据位置来访问数据&#xff0c;而是根据一个预先约定好的关键字(key)来访问指定数据(value)&#xff0c;键和值使用“key : value”的方式来保存&#xff0c;可以称之为键…

不知道说些什么

周一入职新公司到今天连续干了三天&#xff0c;去公司基本从早干到晚&#xff0c;事很满&#xff0c;没时间看新闻看书思考。所以吧 起了这么一个标题。 最近有个瓜是绿地京津冀事业部营销部负责人陈军被实名举报&#xff0c;举报人举报绿地员工睡自己老婆&#xff0c;还怀了孩…

透过宝尊电商Q1财报,看品牌电商全渠道发展的想象力

北京时间5月18日晚间&#xff0c;宝尊电商公布其Q1财报&#xff0c;从基本面来看&#xff0c;宝尊电商行业龙头地位稳固。 财报显示&#xff0c;宝尊2021年Q1 总净营收达20.2亿元人民币&#xff0c;同比增33%。其中&#xff0c;非美国会计准则下运营利润达7,575万元人民币&…

互联网日报 | 瑞幸咖啡内部调查基本完成;12306官方支付宝小程序上线;华为openGauss正式开源...

今日看点 ✦ 瑞幸咖啡宣布内部调查基本完成&#xff0c;2019年净收入被夸大约21.2亿元 ✦ 华为正式宣布开源数据库能力&#xff0c;并成立openGauss开源社区 ✦ 紫光国微旗下紫光安全芯获得全球最高等级认证&#xff0c;实现中国零突破 ✦ 海航将推"嗨购自贸港"产品&…

全年GMV突破40亿元关口,为何如涵仍难造出第二个“张大奕”?

北京时间6月3日&#xff0c;网红电商公司如涵控股&#xff08;以下简称如涵&#xff09;发布了其截至3月31日的2020财年Q4及全年财报。从核心数据来看&#xff0c;如涵Q4营收出现下滑&#xff0c;但净亏损同比收窄&#xff1b;全年营收虽录得同比增长&#xff0c;亏损却在进一步…

Amazon SageMaker:搭建企业级AI模型的完整解决方案

目录 1 企业级AI应用的高昂成本2 什么是Amazon SageMaker&#xff1f;3 案例一&#xff1a;快速构建图像分类应用3.1 卷积神经网络3.2 本地测试版本3.3 Amazon SageMaker版本 4 案例二&#xff1a;快速构建AI绘画应用4.1 扩散模型简介4.2 模型构建与部署4.3 AI绘画测试(文生图)…

外贸业务员如何通过google搜索多个关键词批量提取客户网址?

做外贸通过google开发客户&#xff0c;已是主流。很多外贸公司已不做平台&#xff0c;完全自主开发客户。 通过google搜索客户的原理是什么&#xff1f;你客户的网站信息会被google收录(比如公司网址、公司介绍、公司产品、只要是网站出现的信息基本上都会被收录)&#xff0c;…

chatgpt赋能python:Python制图:数据可视化的艺术

Python 制图: 数据可视化的艺术 作为一名有着10年 Python 编程经验的工程师&#xff0c;我深信数据可视化是企业或项目中至关重要的一环。Python 具有强大的数据分析和可视化能力&#xff0c;通过一些库&#xff0c;如 Matplotlib、Seaborn 和 Plotly&#xff0c;我们可以轻松…

chatgpt赋能python:Python坐标图:简单易用的数据可视化工具

Python 坐标图&#xff1a;简单易用的数据可视化工具 作为一种通用工具&#xff0c;Python 不仅在数据科学、自然语言处理、机器学习和深度学习等领域应用广泛&#xff0c;还在数据可视化方面表现出色。Python 的数据可视化库丰富多样&#xff0c;其中最受欢迎的就是 Matplotl…

chatgpt赋能python:Python编写简单表格:让数据可视化

Python编写简单表格&#xff1a;让数据可视化 在日常工作中&#xff0c;需要呈现各种数据&#xff0c;如销售额、用户数量等。在展示这些数据时&#xff0c;一个清晰的表格可以使信息更加易于理解。Python是一种流行的编程语言&#xff0c;可以使用其提供的模块和库来创建一些…

【论文阅读-Low-code LLM】使用LLM进行可视化编程

Low-code LLM: Visual Programming over LLMs link: https://arxiv.org/abs/2304.08103 repository: https://github.com/microsoft/TaskMatrix/tree/main/LowCodeLLM 摘要 大规模预训练模型&#xff08;LLMs&#xff09;在解决困难问题仍具有很大的挑战。这篇文章提出了可以…

抢红包算法(公平版和手速版)

当我们在群里抢红包时真的是手速越快红包金额越大吗&#xff1f; 答案当然是并不是&#xff0c;都说了是拼手气&#xff0c;岂能是拼手速&#xff01; 不过也可以有拼手速的方法 抢红包 二倍均值法&#xff08;公平版&#xff09;线段切割法&#xff08;手速版&#xff09; 二…

除了智能音箱,AI语音还可以用在哪里?

作者&#xff1a;Echo 来源&#xff1a;科技树&#xff08;ID&#xff1a;techtreex&#xff09; 说起来可笑&#xff0c;每次我找不到眼镜的时候&#xff0c;我都想拿出手机&#xff0c;给我的眼镜“打个电话”&#xff0c;好听声辨位。 不知道有没有人&#xff0c;开发这种功…