qq机器人自动回复带脚本可以实现吗_有人用Python写了个自动亏钱脚本,还能微信实时通知!
本系列所有文章的開頭都會用一兩句話總結一下對應文章的內容。對這個話題感興趣的話可以繼續往下讀,不感興趣可以直接關掉,絕不浪費讀者的時間。
總結
本篇文章用 Python 實現了一個簡單的自動交易腳本,產生交易時會自動通過微信通知。
量化交易
簡介
7 月份大 A 股的好行情想必大家都印象深刻,甚至有人預言 A 股五六年一個周期的大牛市即將開啟。
結果大家已經看到了,但且不論開啟沒開啟,反正當時大多數人的腦子都挺熱的,這當然也包括我。不過,回顧我悲慘的投資經歷,“追漲殺跌”這四個字是一個很好的總結:joy:。
這就難辦了,眼睜睜看著別人賺錢翻倍,我不賺錢都相當于是虧錢。
我深知我每次的交易決策都是自身情緒的反映,而往往情緒化交易的后果就是追漲殺跌虧錢。那么問題來了,怎么才能管得住我這雙虧錢的手?其中一個答案可能是 量化交易 。
量化交易其實不是很高深的概念。
一個量化交易軟件會嚴格按照已經定義好的交易策略進行買入賣出操作,這些操作完完全全由策略觸發,不受人為控制。
最簡單的交易策略有雙均值策略、網格交易策略等。
這簡直就是為我設計的交易方式啊,媽媽再也不用擔心我的臭手了。
網格交易策略
網上現成的量化交易框架很多,但學習這些框架可能需要比較長的時間。反正我就是想簡單測試一下,順便熟悉一下策略的機制,于是直接徒手寫一個吧。
到底啥叫網格交易?網格交易可以簡單地理解為:
把價格的波動區間放到以一個設定好的網格里,資金分成多份,價格每跌一格就買一份,每漲一格就賣一份。一份買入對應一份賣出,買賣交易之間只賺一格網格的差價。
看起來這正是我需要的。網格交易比較適用于震蕩頻率較高幅度較大的標的;一次只賺一格的錢,積少成多;把錢分為若干份,雖然利用率變低了,但也降低了風險。
說干就干,我決定測試一下網格交易策略效果如何。
首先需要預先定義一個震蕩區間和網格數,我把這些需要預先定義的
參數都放置到專門的配置文件里:
lowest = 2.5 # 網格最低價格 highest = 3.5 # 網格最高價格 parts = 20 # 網格數 start_value = 300.0 # 賬戶初始資金 timespan = 15 # 每15秒檢測一次標的價格 wechat_reminder = 1 # 是否通過微信通知(1:是,0:否) mail_reminder = 0 # 是否通過郵件通知(1:是,0:否) mail_list = ['mailbox1', ] # 需要通知的郵箱列表初始化時,腳本會根據配置來設置當前的網格:
# 每一格的高度 price_part_value = (highest - lowest) / parts # 每變動一格對應的持倉百分比 percent_part_value = 1 / parts # 所有網格的標記價格 price_levels = [round(highest - index * price_part_value, 4) for index in range(parts + 1)] price_levels[-1] = lowest # 每一格對應的整體持倉百分比 percent_levels = [round(0 + index * percent_part_value, 4) for index in range(parts + 1)] percent_levels[-1] = 1.0000配置完成后需要根據標的當前價格建底倉:
# 如果當前價格比網格最低價格高則按照網格計算建倉層數,反之直接全倉 # order_target_percent根據target的符號及數值判斷買入還是賣出,并下單交易 if float(close) > price_levels[0]:pos = [close > level for level in price_levels]i = pos.index(False) - 1last_price_index = itarget = percent_levels[last_price_index] - last_percentif target != 0.0:return True, order_target_percent(float(close), depth, target, date=date) else:return True, order_target_percent(float(close), depth, 1.0, date=date)然后每次標的價格穿越網格時執行對應的操作:
signal = False while True:upper = Nonelower = Noneif last_price_index > 0:upper = price_levels[last_price_index - 1]if last_price_index < len(price_levels) - 1:lower = price_levels[last_price_index + 1]# 還不是最輕倉,繼續漲,就再賣一檔if upper and float(close) > upper:last_price_index = last_price_index - 1signal = Truecontinue# 還不是最重倉,繼續跌,再買一檔if lower and float(close) < lower:last_price_index = last_price_index + 1signal = Truecontinuebreak if signal:target = percent_levels[last_price_index] - last_percentif target != 0.0:return True, order_target_percent(float(close), depth, target, date=date) else:return False, []到這里一個最簡單但很完整的網格交易策略就寫好了。當然了,實時價格的獲取以及交易操作的實現需要讀者自己去實現了。
微信機器人
【本文來自微信公眾號 Titus的小宇宙 , ID 為 TitusCosmos ,轉載請注明!】
【為了防止網上各種爬蟲一通亂爬還故意刪除原作者信息,故在文章中間加入作者信息,還望各位讀者理解】
簡介
看過我之前文章的讀者都知道,我寫的所有關于微信機器人的文章全都是用的 ItChat 。這個庫只支持能登錄網頁版微信的微信號, 2017 年之前沒有登陸過網頁版微信的微信號和 2017 年之后申請的新微信號基本上都不能用,局限性太大!讀者可以打開網頁版微信官網 https://wx.qq.com/ 查看自己是否可以使用網頁版微信。
經過我不懈的尋找,終于找到一款不限于網頁版微信的庫: Wechaty :
?
Wechaty 原本是用 TypeScript 開發的,但開發團隊正在進行多語言的移植,目前已經有可以用的 Python 版本,不過功能可能暫時沒有原版那么強大。 Wechaty 開發團隊勵志把它開發成一款支持全平臺微信協議的庫,目前已經支持 Web 、 Ipad 、 Windows 以及 Mac 等協議。雖然需要付費獲取 token ,但是可以申請參與開源激勵計劃來獲取免費甚至長期有效的 token 。在這里也要感謝 Wechaty 團隊提供微信機器人 SDK :pray::pray::pray:。
Demo
下面來實現一個最簡單的機器人:收到任意消息后回復 收到 。
import asyncio from typing import Optional, Union from wechaty import Wechaty, Contact from wechaty.user import Message, Room async def wechat():bot = Wechaty()# 將on_message方法綁定到bot對象的message事件上bot.on('message', on_message)await bot.start()async def on_message(msg: Message):from_contact = msg.talker()text = msg.text()room = msg.room()conversation: Union[Room, Contact] = from_contact if room is None else roomawait conversation.ready()await conversation.say('收到')asyncio.run(wechat())上面的代碼只用到了 message 事件, Wechaty 還提供很多事件接口,例如 scan 、 login 、 room-join 、 room-leave 、 logout 、 error 等,想了解的讀者可以聯系交流。
腳本中的使用
上面的demo代碼很簡單,一看就懂,在本案例中的使用其實也很簡單。
當前價格觸發網格策略進行交易時,只需要在交易后總結當次交易的信息,然后利用類似上面的方法發送出來即可。實際操作中,我會把相應消息發送到我專門建的“量化動態播報”群里(目前在運行的有兩個網格):
async def on_message(msg: Message):from_contact = msg.talker()text = msg.text()room = msg.room()conversation: Union[Room, Contact] = from_contact if room is None else roomif from_contact.payload.name.upper() == AdminWechatName and from_contact.contact_id.upper() == AdminWechatContactId:# 發送#GRIDSTATUS時回復當前網格倉位狀態等if text.upper() == '#GRIDSTATUS':await conversation.ready()await conversation.say(str(grid))# 發送#SETGRID:格式信息時動態修改網格參數elif text.upper().startswith('#SETGRID:'):paras = {('grid.' + item.split('=')[0]): item.split('=')[1] for item in text[9:].lower().split(';')}cfg.set_paras(paras)await run_grid() async def run_grid():flag, content = grid.run_data(data)if flag:if int(grid.mail_reminder):for mail_box in grid.mail_list:mail_helper.sendmail(mail_box, 'GRID SCRIPT NEW TRADE', content)if int(grid.wechat_reminder):await trade_reminder(bot, content)async def trade_reminder(bot, mail_content, target=None):for id in target:room = bot.Room.load(id)await room.ready()conversation: Union[Room, Contact] = roomawait conversation.ready()await conversation.say(mail_content)下面是實際效果:
?
微信機器人的替代方案
肯定會有讀者覺得上面的機器人還是太麻煩,這里在推薦一個小工具,同時也感謝開發者的努力與奉獻!
這個工具的名字叫 Server醬 ,英文名為 ServerChan ,是一款程序員和服務器之間的通信軟件,也就是從服務器推報警和日志到手機的工具。官網是 http://sc.ftqq.com/3.version ,讀者可以自行了解,總之很好用就是了。
開通并使用上它,只需要一分鐘:
- 登入:用 GitHub 賬號登入網站,就能獲得一個 SCKEY 。
- 綁定:點擊“微信推送”,掃碼關注同時即可完成綁定。
- 發消息:往 http://sc.ftqq.com/SCKEY.send 發 GET 請求,就可以在微信里收到消息了。
收到的消息類似于這種:
?
?
?
是不是很簡單方便?
附言
由于網格交易策略更適用于震蕩市,所以目前策略是在數字貨幣上實施的,正在運行的包括一個實盤幣種和一個測試幣種,玩過數字貨幣的讀者應該對它的震蕩行情有所了解。
源碼地址???????
總結
以上是生活随笔為你收集整理的qq机器人自动回复带脚本可以实现吗_有人用Python写了个自动亏钱脚本,还能微信实时通知!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python解压文件_Python压缩和
- 下一篇: python中的insert函数_Pyt