如何用邮件(微信)接收交易信号?

63 篇文章 40 订阅
15 篇文章 4 订阅

问:人在外地,仿真策略刚出信号,我能够接收到吗?

掘金小Q:谢邀,当然可以。不过电话和短信通知,通常都是收费的,用邮件或微信来通知信息就显得性价比很高了。阅读下文,教你如何快速实现邮件(微信)接收交易信号。

我们日常使用微信的频率很高,所以理想方案是直接用微信接收交易信号。但是随着微信的更新,传统的itchat等模块已不支持微信信息的交互了,这里我们使用的方法是以QQ邮件的形式发送信息,同时绑定微信,让微信间接接收信息。

操作非常简单,仅需三步!

01启动QQ邮箱SMTP服务

由于我们主要使用python的email模块和smtplib模块,其中email模块负责构建邮件,smtplib负责发送邮件。smtplib模块是基于SMTP协议(Simple Mail Transfer Protocol,简单邮件传输协议),所以第一步要先启动QQ邮箱的SMTP服务。

启动方式:在邮箱设置中开启SMTP服务。

考虑到在实操过程中发现QQ邮箱有两种页面版本,所以下面给出相应的操作教程,大家根据自己的实际情况进行选择。

版本1:登录QQ邮箱,在图示位置打开“设置”,然后点击“账户”;

下拉页面到“POP3/IMAP/SMTP...服务”,选择开启“POP3/SMTP服务”和“IMAP/SMTP服务”,并根据系统提示,获取授权码。如此便启动完成了!

版本2:登录QQ邮箱,在页面右上角的位置,点击邮箱地址旁边的“展开”图标,然后点击“设置”;

在“常规”版块中下拉,找到“第三方服务”,选择开启IMAP/SMTP服务同样可以启动成功。

02写入python代码

邮箱服务启动后,打开掘金量化终端,我们先新建一个策略进行测试。

新建后进入编辑器,导入模块并初始化参数。

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 登录邮箱信息(以QQ邮箱为例)
context.email = True                       # 是否开启邮箱提示,默认为True开启,False为关闭
context.email_host="smtp.qq.com"           # QQ邮箱的host地址,不需要修改
context.email_user="********@qq.com"       # 邮箱地址
context.email_pass="****************"      # 口令/授权码
context.receivers = [context.email_user]   # 接收邮箱
context.message_from = '多因子选股策略'     # 发件人名称
context.message_to = '掘金者'              # 收件人名称
context.message_subject = '交易信号提示'    # 邮件的主题

PS:初始化参数中,email_user是邮箱地址,如“123456@qq.com”,email_pass是上一步骤生成的“授权码”,message_from是发件人名称,可以自定义为正在使用的策略名称,message_to是收件人名称,message_subject是邮件主题。回测时请将email参数状态定为FALSE,不然容易频繁接收邮件。仿真/实盘的时候再打开。

             

随后,封装邮件函数。这里已经将发送邮件的代码封装成函数形式,可以直接调用:

def send_email(context,email_message):
    """
    发送邮件提示信息
    :param email_message:邮件内容
    :param email_from:发件人名称
    :param email_to:收件人名称
    :param email_subject:邮件主题
    :param email_host:SMTP 服务器主机,qq邮箱为:"smtp.qq.com"
    :param email_user: 邮箱发送人地址
    :param email_pass: 邮箱SMTP授权码
    :param email_receivers:邮箱接收人地址
    """
    if context.email:
        message = MIMEText(email_message, 'plain', 'utf-8')
        message['From'] = Header(context.message_from, 'utf-8')
        message['To'] =  Header(context.message_to, 'utf-8')
        message['Subject'] = Header(context.message_subject, 'utf-8')
        try:
            smtpObj = smtplib.SMTP_SSL(host=context.email_host)
            smtpObj.connect(context.email_host, 465)    # 465为SMTP加密端口号
            smtpObj.login(context.email_user,context.email_pass)
            smtpObj.sendmail(context.email_user, context.receivers, message.as_string())
            print('邮件发送成功:{}'.format(email_message))
        except:
            print('{}:邮件发送失败,请检查!'.format(context.now))
    else:
        print(email_message)

接着,我们调用邮件函数发送信息

# 发送邮件提示信息
message = '成功买入SHSE.600000(浦发银行)!' 
send_email(context,message)

完成上述操作后,我们只差最后一步!

03微信绑定QQ邮箱

打开微信搜索并开启“QQ邮箱提醒”功能,绑定你的QQ邮箱,启动“接收邮件提醒”功能。

启动后,我们回到掘金量化终端,对该策略进行回测,测试市价买入100股SHSE.600000。出交易信号后收到如下提示,则表示大功告成!

需要注意的是,发送邮箱不能过于频繁!不然会触发QQ邮箱的频率限制(错误码:550),从而导致邮件发送失败。但如果确实信号过多,可以维护一个QQ邮箱账号池,轮流使用不同账号,从而降低单个邮箱账号的使用频率。

以上就是今天的全部分享,本期示例代码已分享至掘金量化社区,可自行下载。

传送门:https://bbs.myquant.cn/thread/3051

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值