本系列所有文章的开头都会用一两句话总结一下对应文章的内容。对这个话题感兴趣的话可以继续往下读,不感兴趣可以直接关掉,绝不浪费读者的时间。

总结

本篇文章用 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的小宇宙IDTitusCosmos ,转载请注明!】

【为了防止网上各种爬虫一通乱爬还故意删除原作者信息,故在文章中间加入作者信息,还望各位读者理解】

简介

看过我之前文章的读者都知道,我写的所有关于微信机器人的文章全都是用的 ItChat 。这个库只支持能登录网页版微信的微信号, 2017 年之前没有登陆过网页版微信的微信号和 2017 年之后申请的新微信号基本上都不能用,局限性太大!读者可以打开网页版微信官网 https://wx.qq.com/ 查看自己是否可以使用网页版微信。

经过我不懈的寻找,终于找到一款不限于网页版微信的库: Wechaty

Wechaty 原本是用 TypeScript 开发的,但开发团队正在进行多语言的移植,目前已经有可以用的 Python 版本,不过功能可能暂时没有原版那么强大。 Wechaty 开发团队励志把它开发成一款支持全平台微信协议的库,目前已经支持 WebIpadWindows 以及 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 还提供很多事件接口,例如 scanloginroom-joinroom-leavelogouterror 等,想了解的读者可以联系交流。

脚本中的使用

上面的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.sendGET 请求,就可以在微信里收到消息了。

收到的消息类似于这种:

是不是很简单方便?

附言

由于网格交易策略更适用于震荡市,所以目前策略是在数字货币上实施的,正在运行的包括一个实盘币种和一个测试币种,玩过数字货币的读者应该对它的震荡行情有所了解。

源码地址​​​​​​​

qq机器人自动回复带脚本可以实现吗_有人用Python写了个自动亏钱脚本,还能微信实时通知!相关推荐

  1. 有人用Python写了个自动亏钱脚本,还能微信实时通知!

    本系列所有文章的开头都会用一两句话总结一下对应文章的内容.对这个话题感兴趣的话可以继续往下读,不感兴趣可以直接关掉,绝不浪费读者的时间. 总结 本篇文章用 Python 实现了一个简单的自动交易脚本, ...

  2. python脚本自动化赚钱系统_自从用python写了个自动弹幕脚本后,各大主播都来找我,净赚十万!...

    Python Python开发 Python语言 自从用python写了个自动弹幕脚本后,各大主播都来找我,净赚十万! 大家好,今天又给大家带来了Python爬虫的分享,今天我们继续上次的问题,继续来 ...

  3. 教你用Python写一个京东自动下单抢购脚本(Python实现京东自动抢购)

    很多朋友都有网购抢购限量商品的经历,有时候蹲点抢怎么也抢不到,今天小编带你们学习怎么用Python写一个京东自动下单抢购脚本,以后再也不用拼手速拼网速啦,快来一起看看吧 1 问题背景 经过无数次抢购失 ...

  4. python list转字符串_我用python写了个自动生成给文档生成索引的脚本!懒人智慧...

    我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库: PiperLiu / ACMOI_Journey ,记录自己的刷题轨迹,并总结一下方法.心得.想到一个 ...

  5. python中脚本是指什么_你用Python写过最牛逼的程序/脚本是什么?

    有网友在 Quora 上提问,「你用 Python 写过最牛逼的程序/脚本是什么?」.本文摘编了 3 个国外程序员的多个小项目,含代码. Manoj Memana Jayakumar, 3000+ 顶 ...

  6. python 抢单脚本_分享用Python写的99收抢单小脚本,仅供学习

    实测挂2~3分钟可以刷到个10元,哈哈 在前面填写账号密码还有99开发者中心的私钥,然后用Python2跑即可 抢到单会自动暂停,但不会任何通知,请记得留意Log输出#!/usr/bin/python ...

  7. python中执行shell脚本之subprocess模块_如何使用Python中的subprocess模块检查shell脚本的状态?...

    我有一个简单的Python脚本,它将使用Python中的subprocessmdoule来执行shell脚本.在 下面是我的pythonshell脚本,它正在调用testing.shshell脚本,它 ...

  8. python自动接单脚本_分享用Python写的99收抢单小脚本,仅供学习

    实测挂2~3分钟可以刷到个10元,哈哈 在前面填写账号密码还有99开发者中心的私钥,然后用Python2跑即可 抢到单会自动暂停,但不会任何通知,请记得留意Log输出#!/usr/bin/python ...

  9. qq机器人自动回复带脚本可以实现吗_python一个神奇的第三方库:QQ自动聊天

    今天给大家分享一个QQ聊天机器人的开发 ,基于QQbot这个第三方库,感兴趣的童鞋可以来了解一下它是如何实现的,首先要去安装QQbot这个库 安装库 pip install qqbot 自动发送QQ消 ...

最新文章

  1. 安卓ssr无网络连接_解决Android模拟器网络问题(使用了代理的情况下)
  2. 【数据结构】数组和广义表
  3. 使用apache配置基于IP地址的虚拟主机
  4. 初学者计算机_初学者极客:如何在计算机上重新安装Windows
  5. linux中为文件赋读写权限
  6. 一个关于Schema的问题,请求帮助
  7. 余贞侠C语言程序设计(课后答案)
  8. 简单的c语言游戏编程打地鼠,少儿创意编程scratch初级游戏--打地鼠
  9. javascript实现根据汉字获取拼音或者获取拼音首字母
  10. Q1营收利润大增,Take-Two如何掘金“次世代”?
  11. 5w1H数据分析简单例子
  12. httpclient+nekohtmlnbsp;解析HTML[转]
  13. Egret引擎基础教程I(下载安装创建第一个项目)
  14. 塔米狗热门项目:杭州北鸿置业有限公司100%股权转让
  15. C语言杨辉三角前15行,C语言输出杨辉三角前n行(低时间复杂度)
  16. 梵高画作再现?努比亚AI新旗舰Z18携“地外科技”亮相
  17. 客户说:在忙,回头联系你。如何话术应对呢?
  18. php药膳 源码,药膳
  19. 数据结构与算法篇-单链表
  20. Linux服务器如何添加永久路由

热门文章

  1. [转]Delphi 2010 3513正式版破解
  2. [Java] Overrid 方法重写
  3. Python可视化:Seaborn(二)
  4. 杰和弯道超车 推企业级NAS存储应用方案
  5. ignite学习笔记
  6. SQL -- 是否或推断线相交以在其内部的平面
  7. Windows Phone开发(18):变形金刚第九季——变换
  8. IPTABLES简单应用说明和Linux下IPTABLES配置详解
  9. li在python中啥意思_Python中*和**的区别
  10. python中csv文件通过什么表示字符_python – 如果行包含CSV文件中的字符串,则删除该行...