B08.python智能盯盘 + 声音报警 - 有意思的小东西【黑科技】

适合人群:稍微有点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 = -2.00
        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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章