版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/luo4105/article/details/89257924
源码地址:https://github.com/programluo/stock_tool
股票实时查看告警工具
需求
每次想看股票的时候都要拿出手机,或者打开股票软件,这个过程一般都比较长,很容易打断连贯的代码思路,并且股票软件都有太多广告信息,诱惑信息,让人忍不住去点,浪费很长时间,同时也杂多的信息,容易让人陷入FOLO的心态,活生生成了韭菜。第二个需要一个告警通知,某某股票到了我设定的告警值,我可以加仓或者斩仓了。
功能
终端输入指定命令:stock
显示自选股票信息
name - now - max_today - min_today
中兴 - 32.14 - 33.41 32
标题空格6个
值第二个间隔4个空格,第三个间隔9个空格
标题空格的10-name.length
调用mac系统通知,右上角
决定使用Python语言来完成这些功能,原因是python简单,易用,包多,适合做个人语言。
http去请求股票实时接口,解析返回体,在终端格式化输出。并设置自定义命令去执行这个python文件。
采用urllib来做http请求,方式
urllib.request.urlopen("http://xxxxx.com")
配置mac的自定义命令方式,将以下代码放入到~/bash_profile
中
alias stock = 'python3 /Users/marx_luo/xx/stock.py'
股票实时接口调用新浪的http://hq.sinajs.cn/list=sz000063
,解析如下信息
var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,
22114263, 589824680, 4695, 26.91, 57590, 26.90, 14700, 26.89, 14300,
26.88, 15100, 26.87, 3100, 26.92, 8900, 26.93, 14230, 26.94, 25150, 26.95, 15220, 26.96, 2008-01-11, 15:05:32";
0:”大秦铁路”,股票名字; 1:”27.55″,今日开盘价; 2:”27.25″,昨日收盘价; 3:”26.91″,当前价格; 4:”27.55″,今日最高价; 5:”26.20″,今日最低价; 6:”26.91″,竞买价,即“买一”报价; 7:”26.92″,竞卖价,即“卖一”报价; 8:”22114263″,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百; 9:”589824680″,成交金额,单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万; 10:”4695″,“买一”申请4695股,即47手; 11:”26.91″,“买一”报价; 12:”57590″,“买二” 13:”26.90″,“买二” 14:”14700″,“买三” 15:”26.89″,“买三” 16:”14300″,“买四” 17:”26.88″,“买四” 18:”15100″,“买五” 19:”26.87″,“买五” 20:”3100″,“卖一”申报3100股,即31手; 21:”26.92″,“卖一”报价 (22, 23), (24, 25), (26,27), (28, 29)分别为“卖二”至“卖四的情况” 30:”2008-01-11″,日期; 31:”15:05:32″,时间;
定时2分钟请求接口,判断是否超过阀值,如果超过,使用pync做系统通知,定时器使用linux自带的
urllib
调用新浪股票数据接口并解析,规则打印。alias
,stock=python3 /…/stock_show.py代码
import urllib.request
stockNos = ["sz000063","sh000016"]
stockNames = ["中兴通讯","上证50"]
print("name - now - max_today - min_today")
for ind, stockNo in enumerate(stockNos):
response = str(urllib.request.urlopen(f"http://hq.sinajs.cn/list={stockNo}").read())
stockData = response.split("\"")[1].split(",")
stockName = stockData[0]
openPrice = stockData[1]
openPriceYesterday = stockData[2]
priceNow = stockData[3]
priceHighest = stockData[4]
priceLowest = stockData[5]
print(f"{stockNames[ind]} {priceNow} {priceHighest} {priceLowest}")
当终端输入stock
时,结果打印
MacBook-Pro:stock$ stock name - now - max_today - min_today 中兴通讯 29.980 30.300 29.500 上证50 2951.9848 2959.5898 2921.2037
urllib
调用新浪实时接口并获得当前报价,判断报价是否高于/低于警戒值,如果是,调用pync
完成mac系统通知调用。crontab
设置告警通知的执行时间。crontab
设置过程
crontab -e
进入设置文本。*/3 9-12,13-15 * * 1-5 /usr/local/bin/python3 /Users/marx_luo/PythonWorkspace/stock/stock_alarm.py
,即周一到周五,上午9点到12点,下午1点到3点,每三分钟执行阀值告警。代码
import urllib.request
import pync
stocks = [{"code":"sz000063","name":"中兴通讯","min_threshold":"26","max_threshold":"38"},{"code":"sh000016","name":"上证50"}]
for ind, stock in enumerate(stocks):
response = str(urllib.request.urlopen(f"http://hq.sinajs.cn/list={stock['code']}").read())
stockData = response.split("\"")[1].split(",")
priceNow = stockData[3]
if stock.__contains__('min_threshold') and stock.__contains__('max_threshold'):
if stock['min_threshold'] > priceNow:
pync.notify(f'{stock["name"]}当前价格{priceNow}', title=f'{stock["name"]}股票已低于设定值{stock["min_threshold"]}')
if stock['max_threshold'] < priceNow:
pync.notify(f'{stock["name"]}当前价格{priceNow}', title=f'{stock["name"]}股票已高于设定值{stock["max_threshold"]}')
crontab -e
会生成一个基于当前用户的临时的定时任务文件,重启之后也会存在,重启之后自动执行。
crontab中的命令,必须使用全路径,它是拿不到系统的环境配置的。比如我在.bash_profile中自定义了一个命令,在crontab中是不能执行的。包括python3
也是不能执行的,因为拿不到系统环境,必须使用python3的全路径。
如何找到python3这个执行文件在哪里,通过which查找
which python3
有时候,可能因为crontab的任务写错了,导致没有执行成功,去哪里看日志呢?
crontab会把每次执行错误的情况发到本地邮件,去本地邮件可以查看执行错误原因
mail
打开邮件列表,输入邮件编号就能看到邮件内容。
mail
存在/var/mail/$user
文件下,vim /var/mail/$user
就可以看到所有邮件内容,删除文件就可以清空邮件