股票提醒系統(tǒng)

前言

前幾天讀到一篇微信公眾號的文章熬了一晚上溉旋,小白用Python寫了一個股票提醒系統(tǒng)救军,看了評論之后感覺意猶未盡,隨心血來潮寫下這篇文章毒嫡,以紀念此刻的心情癌蚁。

架構(gòu)篇

基本上按照作者的思路可以順利的完成整個股票提醒系統(tǒng),本文在原作者的基礎(chǔ)上增加了如下內(nèi)容:

  1. 查詢多支股票實時價格信息
  2. 增加微信信息通知兜畸、提醒以及告警
  3. 通過微信更新所選股票的買入下限閾值和賣出上限閾值

實現(xiàn)篇

實時獲取股票價格

這部分內(nèi)容與作者的基本一致努释,沒啥好說的。

郵件系統(tǒng)

這部分內(nèi)容膳叨,我按照我之前寫過的腳本運行洽洁,其代碼如下:

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
'''
@author: Haffner2010
@contact: myprojtest@example.com
@Software: Pycharm + Python3.6
@OS:Windows 7 64 bit
@Site:http://www.reibang.com/u/e031670b216b
@file: EmailAutoSend.py
@time: 2018/4/1 20:03
@desc:
'''

#MIME郵件格式分析及信息提取http://www.pythonclub.org/python-files/mime-type
# SMTP模塊
import smtplib
from email.mime.text import MIMEText
from email.header import Header


def MySMTP(UserInfo,Message):
    SmtpServer=UserInfo['server']
    user=UserInfo['username']
    port=UserInfo['port']
    Receiver=UserInfo['receiver']
    # print(type(str(Receiver)))
    sender=user # 發(fā)件人和登錄賬戶名是同一個地址
    password=UserInfo['password']
    Message['From'] = sender
    Message['To'] = Receiver
    # Message['To'] = ";".join(Receiver)
    # Message['Subject'] = Header(Subject, 'utf-8')
    if port==25:
        smtp=smtplib.SMTP(SmtpServer,port)
    elif(port==465 or port==994):
        smtp = smtplib.SMTP_SSL(SmtpServer, port)  # 使用SSL加密登錄,詳見http://help.163.com/09/1223/14/5R7P3QI100753VB8.html
    else:
        print('SMTP協(xié)議端口號有誤菲嘴,請核對信息!')
    smtp.helo(SmtpServer)
    smtp.ehlo(SmtpServer)
    # smtp.starttls() # 啟動安全傳輸模式
    smtp.login(user, password)
    smtp.sendmail(sender, Receiver, Message.as_string())
    print('Mail sent successfully!')
    smtp.quit()




# 一些基本賬戶信息的定義
myaccinfo={
    'username':'your_account@example.com', # 登錄賬戶
    'password' : 'Auth Code', # 此為授權(quán)碼,非登錄密碼
    'receiver':'your_account@example.com',
    'server' : 'smtp.example.com', # 郵箱服務(wù)器地址
    'port':25 # 登錄端口號
}




if __name__=="__main__":
    # 郵件信息
    subject = 'subject'
    # 純文本郵件定義龄坪,郵件正文內(nèi)容
    msg = MIMEText('main body text', 'plain', 'utf-8')
    # 定義發(fā)送人昭雌,接收人,以及描述信息(主題)
    msg['Subject'] = Header(subject, 'utf-8')
    MySMTP(myaccinfo,msg)

其中健田,基本賬戶信息中需要修改為自己郵箱的用戶名和密碼烛卧,以及郵箱登陸可以通過POP3、SMTP和IMAP來查看相關(guān)服務(wù)妓局,并按照要求修改如下信息:

# 一些基本賬戶信息的定義
myaccinfo={
    'username':'your_account@example.com', # 登錄賬戶
    'password' : 'Auth Code', # 此為授權(quán)碼总放,非登錄密碼
    'receiver':'your_account@example.com',
    'server' : 'smtp.example.com', # 郵箱服務(wù)器地址
    'port':25 # 登錄端口號
}

郵件自動發(fā)送的代碼,可以參考廖大的文章SMTP發(fā)送郵件加以了解好爬。
郵件自動發(fā)送的源碼已上傳到我的GitHub上AutoEmailSend.py
關(guān)于郵件發(fā)送局雄,最近看到一個不錯的項目zmail,但我沒用過存炮,只是看介紹好像不錯的樣子炬搭。。

預(yù)警系統(tǒng)

預(yù)警系統(tǒng)穆桂,首先就要設(shè)置好預(yù)警值宫盔,我們以五大行為例,進行相關(guān)設(shè)置:

stock_code=['601288','601328','601988','601398','601939']
stock=Stock(q,stock_code)
setting={
    '農(nóng)業(yè)銀行':[3.45,3.5],
    '交通銀行':[5.4,5.7],
    '中國銀行':[3.4,3.5],
    '工商銀行':[5.3,5.4],
    '建設(shè)銀行':[6.5,6.9]
} # 設(shè)置股票的期望買入下線和賣出上限

stock_code為五大行的股票代碼享完,setting字典為我們期望買入以及賣出的價格區(qū)間灼芭。

死循環(huán)監(jiān)控數(shù)據(jù)

在部分代碼在原作者的基礎(chǔ)上進行修改,代碼如下:

while True:
    
    now_dt = datetime.datetime.now() # 當前股價查詢時間
    if not start_dt < now_dt < stop_dt:
        title = f'Current Time {now_dt} is not between {start_dt} and {stop_dt},we will stop!'
        print(title)
        bot.file_helper.send(title)
        # 郵件信息
        subject = 'Stop Running!'
        # 純文本郵件定義般又,郵件正文內(nèi)容
        msg = MIMEText(title, 'plain', 'utf-8')
        # 定義發(fā)送人彼绷,接收人,以及描述信息(主題)
        msg['Subject'] = Header(subject, 'utf-8')
        MySMTP(myaccinfo, msg)
        stock.stop_run() # 不在開市范圍內(nèi)倒源,停止執(zhí)行
        break

    if not q.empty():
        cur_price_dict = q.get()
        print(cur_price_dict)
        print(f'Current stock price:{cur_price_dict}')        
        for item in cur_price_dict:
            cur_price = float(cur_price_dict[item])
            if cur_price > setting[item][1]:
                title = f'股票[{item}]:當前價格{cur_price}苛预,高于max:{setting[item][1]}'
                print(title)
                bot.file_helper.send(title)
                # 郵件信息
                subject = '高閾值警告!'
                # 純文本郵件定義笋熬,郵件正文內(nèi)容
                msg = MIMEText(title, 'plain', 'utf-8')
                # 定義發(fā)送人热某,接收人,以及描述信息(主題)
                msg['Subject'] = Header(subject, 'utf-8')
                MySMTP(myaccinfo, msg)
                time.sleep(3)


            if cur_price < setting[item][0]:
                title = f'股票[{item}]:當前價格{cur_price}胳螟,低于min:{setting[item][0]}'
                print(title)
                bot.file_helper.send(title)
                # 郵件信息
                subject = '低閾值警告昔馋!'
                # 純文本郵件定義,郵件正文內(nèi)容
                msg = MIMEText(title, 'plain', 'utf-8')
                # 定義發(fā)送人糖耸,接收人秘遏,以及描述信息(主題)
                msg['Subject'] = Header(subject, 'utf-8')
                MySMTP(myaccinfo, msg)
                time.sleep(3)

第一個if not語句表示如果不在開市時間范圍內(nèi)則停止運行,退出程序嘉竟。
第二個if not語句中的for循環(huán)用來實時查詢當前價格與買入價和賣出價的關(guān)系邦危,高于賣出價或者低于買入價都通過郵件以及微信文件傳輸助手進行提醒洋侨。

setting區(qū)間閾值更新

本部分在原作者的基礎(chǔ)上進行增加,用了wxpy提供的API倦蚪,方便實時修改setting

# 消息接收監(jiān)聽器希坚,通過接收文件傳輸助手的信息獲取個人最新配置
@bot.register(chats=file_helper, except_self=False)
def print_others(message):
    # 輸出監(jiān)聽到的消息
    print(message) # 此處的消息每次只能修改一只股票信息,對于實際應(yīng)用來說已經(jīng)足夠
    msg_price = re.search('(.*?) : (.*?) \(Text\)', str(message)).group(2)
    print(msg_price)
    try:  # 格式code:high_pri,low_pri
        code, low_pri, high_pri = re.split('[:, ]', msg_price)
        print(code, low_pri, high_pri)
        name = ts.get_realtime_quotes(code)[['name']].values[0][0]
        setting.update({name:[float(low_pri),float(high_pri)]})
        print(setting)
    except:
        print('nothing')
    # return msg_price # 本來想通過return給外部函數(shù)接收以便修改setting的數(shù)據(jù)的陵且,結(jié)果不知道如何使用裁僧,只能在register里面處理setting

關(guān)于return的內(nèi)容如果有哪位大神知道還請告知,多謝慕购!
整個股票提醒系統(tǒng)的源碼見share.py

看看效果

剛開始設(shè)置了三家銀行的高閾值低于當前價聊疲,微信端收到如下告警信息:


image.png

接下來提高農(nóng)行的高閾值告警值,新的微信告警信息如下:


image.png

后記

大多數(shù)內(nèi)容均來源于網(wǎng)絡(luò)沪悲,如果構(gòu)成侵權(quán)請聯(lián)系刪除获洲。如果有什么不懂的可以一起交流,我也是初學者哈~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末可训,一起剝皮案震驚了整個濱河市昌妹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌握截,老刑警劉巖飞崖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谨胞,居然都是意外死亡固歪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門胯努,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牢裳,“玉大人,你說我怎么就攤上這事叶沛∑蜒叮” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵灰署,是天一觀的道長判帮。 經(jīng)常有香客問我,道長溉箕,這世上最難降的妖魔是什么晦墙? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮肴茄,結(jié)果婚禮上晌畅,老公的妹妹穿的比我還像新娘。我一直安慰自己寡痰,他們只是感情好抗楔,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布棋凳。 她就那樣靜靜地躺著,像睡著了一般谓谦。 火紅的嫁衣襯著肌膚如雪贫橙。 梳的紋絲不亂的頭發(fā)上贪婉,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天反粥,我揣著相機與錄音,去河邊找鬼疲迂。 笑死才顿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的尤蒿。 我是一名探鬼主播郑气,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腰池!你這毒婦竟也來了尾组?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤示弓,失蹤者是張志新(化名)和其女友劉穎讳侨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奏属,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡跨跨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了囱皿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勇婴。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嘱腥,靈堂內(nèi)的尸體忽然破棺而出耕渴,到底是詐尸還是另有隱情,我是刑警寧澤齿兔,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布橱脸,位于F島的核電站,受9級特大地震影響愧驱,放射性物質(zhì)發(fā)生泄漏慰技。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一组砚、第九天 我趴在偏房一處隱蔽的房頂上張望运准。 院中可真熱鬧,春花似錦普碎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柒爸。三九已至准浴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捎稚,已是汗流浹背乐横。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留今野,地道東北人葡公。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像条霜,于是被迫代替她去往敵國和親催什。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 碼農(nóng)小馬七夕節(jié)去相親了,見了一個不錯的姑娘拆内,長的非常甜美旋圆!聊著聊著很投緣!通過介紹人了解到矛纹,對方也很滿意~~想著自...
    諸葛青云999閱讀 1,646評論 1 1
  • 1臂聋、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評論 3 119
  • //分為3種粒子,子彈粒子或南,爆炸粒子孩等,散開粒子 CAEmitterLayer *fireworksEmitter ...
    蛋白質(zhì)corn閱讀 313評論 0 0
  • 昨天,媽媽發(fā)現(xiàn)小九對于遠道從山西來的張昕姑姑特別喜歡采够。媽媽觀察了一下肄方,因為張昕姑姑很會講故事、又知道海底小縱隊的故...
    Tina9閱讀 538評論 0 0
  • 大學畢業(yè)參加工作蹬癌,你會發(fā)現(xiàn)你有一種執(zhí)著的迷茫权她。 迷茫為什么不掙錢,為什么別人會成功逝薪? 迷茫未來出路在哪里隅要?迷茫房價...
    八萬學長閱讀 358評論 0 2