B08.python智能盯盘 + 声音报警 - 有意思的小东西【黑科技】
程序员文章站
2024-03-19 19:01:28
...
适合人群:稍微有点python基础者,炒股或对金融感兴趣者。
一、对上证大盘进行盯盘
1,首先需要安装winsound, easyquotation 库。
2,目标:对大盘进行盯盘,超过x%或跌过y%进行报警,声音报警,上涨下跌频率不同。
具体操作见同名B站视频。
可以修改的地方:研究easyquotation的api后,可以修改为对你的某只股票盯盘;可以修改x,y调整报警幅度。如果你需要,报警方式可以改成发邮件。
代码:
import winsound
import time
import easyquotation
# 对大盘进行盯盘,超过x%或跌过y%进行报警
# 代码作者:机智翔学长(B站、CSDN同名)
def alarm1():
# 报警1(声音低沉)
duration = 300 # millisecond
freq = 300 # Hz
while 1:
winsound.Beep(freq, duration)
time.sleep(0.3)
def alarm2():
# 报警2(声音尖锐)
duration = 500 # millisecond
freq = 1000 # Hz
while 1:
winsound.Beep(freq, duration)
time.sleep(0.5)
class Ding:
def __init__(self):
# 初始化
self.quotation = easyquotation.use('sina') # 新浪 ['sina'] 腾讯 ['tencent', 'qq']
dapan = self.quotation.stocks(['sh000001'])['000001'] # 上证指数
self.today_open = dapan['open']
self.yesterday_close = dapan['close']
self.now = dapan['now']
self.x = x = 0.50
self.y = y = 0.80
print('大盘监听范围:上涨{}%,下跌{}%'.format(str(self.x), str(self.y)))
up = x / 100 # 上涨1%报警1(声音低沉)
down = y / 100 # 下跌1%报警2(声音尖锐)
self.up_price = self.yesterday_close * (1+up)
self.down_price = self.yesterday_close * (1-down)
def update(self):
# 重新获取数据,需要实时更新
dapan = self.quotation.stocks(['sh000001'])['000001'] # 上证指数
self.now = dapan['now']
def listen(self):
# 一直监听
print('开始盯盘:')
while 1:
self.update()
if self.now > self.up_price:
print("大盘涨幅超过 {}%".format(str(self.x)))
alarm1()
if self.now < self.down_price:
print("大盘跌幅跌幅 {}%".format(str(self.y)))
alarm2()
time.sleep(1)
if __name__ == "__main__":
dingpanxia = Ding()
dingpanxia.listen()
二、盯盘侠.bat
bat批处理方式,更快捷,直接双击打开即可。
代码:
@echo off
REM 声明采用UTF-8编码
chcp 65001
echo note
python E:\1StudyData\dingPang.py
@cmd.exe
三、对外盘进行盯盘
原理类似,但无法直接调用api,故进行爬虫获取。
用到了我之前写的文章: Fiddler的使用[抓包]
分析:
爬虫获取信息:
参考我之前文章 下载xxx视频[python] ,NLP 获取相似词 - 1.爬取百度搜索结果
代码:
# -*- coding:utf-8 -*-
import requests
import json
import re
import winsound
import time
# 对外盘(英国富时 FTSE))进行盯盘,原理类似(代码有点差异),但无法直接调用api,故进行爬虫获取
# 代码作者:机智翔学长(B站、CSDN同名)
def get_price_percent_now():
# 获取当前价格的涨跌百分数
# 人工查询需要访问链接:http://quote.eastmoney.com/gb/zsFTSE.html
url = 'http://push2.eastmoney.com/api/qt/stock/get?secid=100.FTSE&ut=bd1d9ddb04089700cf9c27f6f7426281&fields=f43,f44,f45,f46,f47,f59,f60,f152,f169,f86,f170,f171,f118&cb=jQuery1124024843802565838335_1583310594306&type=CT&cmd=FTSE_UI&sty=FDPBPFB&st=z&js=((x))&token=4f1862fc3b5e77c150a2b985b12db0fd&_=1583310594664'
# url后部分从fiddler右上角的GET复制过来的,每个人可能不同
res = requests.get(url).text
searchObj = re.findall(r'\((.+?)\)', res) # 获取括号()里面的内容
dapan = json.loads(searchObj[0])['data']
f170 = dapan['f170'] # 得到涨跌多少,例如值为194代表涨1.94%
return f170
def alarm1():
# 报警1(声音低沉)
duration = 300 # millisecond
freq = 300 # Hz
while 1:
winsound.Beep(freq, duration)
time.sleep(0.3)
def alarm2():
# 报警2(声音尖锐)
duration = 500 # millisecond
freq = 1000 # Hz
while 1:
winsound.Beep(freq, duration)
time.sleep(0.5)
class Ding:
def __init__(self):
# 初始化
# 超过上限报警1(声音低沉)
self.up_percent = 250
# 低于下限报警2(声音尖锐)
self.down_percent = 162
print('大盘监听范围:上限{}%,下限{}%'.format(str(self.up_percent/100), str(self.down_percent/100)))
def listen(self):
# 一直监听
print('开始盯盘:')
while 1:
percent = get_price_percent_now()#;print(percent)
if percent > self.up_percent:
print("外盘超过 {}%".format(str(self.up_percent/100)))
alarm1()
if percent < self.down_percent:
print("外盘低于 {}%".format(str(self.down_percent/100)))
alarm2()
time.sleep(1)
if __name__ == "__main__":
dingpanxia = Ding()
dingpanxia.listen()
上一篇: 杭电OJ 1005