大家好,我是 Jack。
上篇教程,给大家讲解了一个 ETF 动量轮动的策略。
一些小伙伴,看到高收益,表示自己也要实战试一试。
真可谓是对我充满信心:
这里,必须要提醒下风险,先好好学技术,学透之后,再下手不迟。不要盲目跟!
市场一直都在,真不用着急。
我最成功的一笔投资,不是买了哪支股票!而是自学了很多有趣的技术!
最好的投资,就是投资自己。
github 代码提交起来!等有了一定技术的积累,才能顺利采摘成功的“”。
OK,接下来,给大家讲解下。
如何做到视频中的,后台运行策略,定时给 QQ 邮箱发送操作邮件。
每天开盘前,看看微信就行了。

部署交易策略

想要实现这个功能,主要用到两个库 smtplibapscheduler,前者负责发送邮件,后者负责定时。

发送邮件

发送邮件,需要使用电子邮件发送协议STMP
放到我们的场景,就是我们部署好策略的服务器,发送邮件到,我们的 QQ 邮箱。
pythonsmtplib提供了一种很方便的途径发送电子邮件,它对STMP协议进行了简单的封装。
这里可以使用第三方 STMP 服务发送,我用的是阿里云的邮件服务。
更简单一些的,可以直接用 QQ 邮箱。
这里使用了 QQ 邮箱(你也可以使用 163,Gmail等)的 SMTP 服务,需要做以下配置:
QQ 邮箱通过生成授权码来设置密码:
QQ 邮箱 SMTP 服务器地址:smtp.qq.com,ssl 端口:465。
以下实例你需要修改:
  • 发件人邮箱(你的QQ邮箱)
  • 密码(生成的授权码)
  • 收件人邮箱(可发给自己)
这些都准备好,按照这个模版,配置下就行了,创建 sendemail.py 文件,编写如下代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import
 smtplib

from
 email.mime.text 
import
 MIMEText

from
 email.utils 
import
 formataddr

from
 datetime 
import
 datetime

import
 time


my_sender = 
'***@qq.com'# 发件人邮箱账号
my_pass = 
'**'# 发件人邮箱密码
my_user = 
'***@qq.com'# 收件人邮箱账号(这里发自己)

defmail(message):
    ret = 
True
try
:

        current_dt = time.strftime(
"%Y-%m-%d"
, time.localtime())

# current_dt = datetime.strptime(current_dt, '%Y-%m-%d')
        title = current_dt.split(
" "
)[
0
] + 
"投资操作"
        msg = MIMEText(message,
'plain'
,
'utf-8'
)

        msg[
'From'
] = formataddr([
"**"
, my_sender])         
# 发件人昵称
        msg[
'To'
] = formataddr([
"**"
, my_user])             
# 接收人昵称
        msg[
'Subject'
] = title                              
# 邮件的主题

        server = smtplib.SMTP_SSL(
"smtp.qq.com"
465
)       
# 发件人邮箱中的SMTP服务器,端口是465
        server.login(my_sender, my_pass)  
# 发件人邮箱账号、邮箱密码
        server.sendmail(my_sender, [my_user,], msg.as_string())  
# 发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  
# 关闭连接
except
 Exception 
as
 e:  
# 如果 try 中的语句没有执行,则会执行下面的 ret = False
        ret = 
False
        print(e)

return
 ret


if
 __name__ == 
"__main__"
:

    ret = mail(
"Test"
)

if
 ret:

        print(
"邮件发送成功"
)

else
:

        print(
"邮件发送失败"
)

修改好配置,使用如下指令运行:
python sendemail.py

如果成功,你会收到一封内容为 Test 的邮件。

定时发送

这个就更简单了,直接用apscheduler即可。
#-*- coding:utf-8 -*-
import
 time

from
 job 
import
 run_today

from
 apscheduler.schedulers.blocking 
import
 BlockingScheduler


sched = BlockingScheduler()

# 时间: 周一到周五每天早上9点25, 执行run_today
sched.add_job(run_today, 
'cron'
, day_of_week=
'mon-fri'
, hour=
9
, minute=
25
)

sched.start()

上述代码的意思就是,周一到周五,每天早上925运行下,run_today 这个函数。
run_today 就是封装好的,量化交易策略,执行这个函数就是运行一次量化交易策略,并发送结果邮件。

整体代码

代码有点长,这里就不全贴了,我将所有代码放到了 github 上。
一共 4 个文件:
  • run.sh 运行脚本,直接启动这个即可运行程序
  • main.py 定时任务主函数
  • sendmail.py 邮件配置
  • job.py 例行运行的任务
代码地址:
https://github.com/Jack-Cherish/quantitative/tree/main/lesson2
修改好 job.py 和 sendmail.py 文件,运行脚本即可。
sh run.sh

可以将代码放到服务器上运行,比如阿里云服务器,腾讯云服务器。
用最便宜的配置就行。
然后配置个 Anaconda 环境,就行了,环境配置可以参考这篇文章。

总结

量化交易策略和服务部署,教程都写完了。
后面有机会,我会分享更多的量化交易策略,欢迎持续关注。
股市有风险,入市需谨慎
我是 Jack,我们下期见!
·················END·················

推荐阅读

继续阅读
阅读原文