適合人羣:稍微有點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()