查看原文
其他

我最成功的一笔投资!

Jack Cui Jack Cui 2022-07-26

大家好,我是 Jack。

上篇教程,给大家讲解了一个 ETF 动量轮动的策略。

B站热榜视频,炒股源码来了!

一些小伙伴,看到高收益,表示自己也要实战试一试。

真可谓是对我充满信心:

这里,必须要提醒下风险,先好好学技术,学透之后,再下手不迟。不要盲目跟!

市场一直都在,真不用着急。

我最成功的一笔投资,不是买了哪支股票!而是自学了很多有趣的技术!

最好的投资,就是投资自己。 

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'              # 收件人邮箱账号(这里发自己)

def mail(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·················

推荐阅读

•   B站热榜视频,炒股源码来了!•   破解隔壁老王WiFi密码,太刺激了!•   这,就很抽象!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存