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