请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  源码分享 帖子:3365773 新帖:5

邮件发送(支持多人接收,支持回测、模拟、研究)

K线达人发表于:5 月 10 日 05:05回复(1)

写了一个邮件发送的功能,没想到很多人都想用,这次重新整理封装了一下代码,希望大家在使用的时候更加方便。感谢各位的支持[]~( ̄▽ ̄)~*

下面是邮件的使用效果截图:

效果图

导入邮件使用的模块¶

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

封装邮件发送函数¶

def send_email(subject,message,sender,username,password,receiver_list):
    """
    邮件发送
    subject:标题
    message:内容
    sender:发送邮箱
    username:邮箱名
    password:邮箱密码
    receiver_list:收件箱列表
    记得请先开启邮箱的SMTP服务
    """

    sender = subject #发送的邮箱
    receiver = receiver_list  #要接受的邮箱(注:测试中发送其他邮箱会提示错误)
    smtpserver = 'smtp.163.com' 
    username = username #你的邮箱账号
    password = password #你的邮箱密码

    msg = MIMEText(message,'html','utf-8') #中文需参数‘utf-8',单字节字符不需要
    msg['Subject'] = Header(subject, 'utf-8') #邮件主题
    msg['from'] = sender    #自己的邮件地址 

    smtp = smtplib.SMTP()
    try :
        smtp.connect('smtp.163.com') # 链接
        smtp.login(username, password) # 登陆
        smtp.sendmail(sender, receiver, msg.as_string()) #发送
        log.info('邮件发送成功')
    except smtplib.SMTPException:
        log.info('邮件发送失败') 
    smtp.quit() # 结束

封装打包信息的函数¶

def build_context(context, hold_count, buy_list, sell_list, url='', total_returns=0, last_returns=0, strategy_name='策略', title_color='LightBLue'):
    """
    打包主体信息,html格式
    context:不解释
    strategy_name:策略名称
    hold_count:最大持仓数量
    buy_list:当日要买进的股票列表
    sell_list:当日要卖出的股票列表
    url:如果策略发布,可以填写上它的地址
    total_returns:总收益
    last_returns:上一个交易日的收益
    title_color:表头的颜色
    """
    
    count = 0
    current_data = get_current_data()
    
    '''计算当天买卖仓位'''
    hold_count = len(context.portfolio.positions) - len(sell_list)
    buy_how_cout = hold_count - hold_count
    if len(buy_list) > buy_how_cout:
        buy_how_cout = len(buy_list) - hold_count
    
    '''打包hmlt表格'''
    color_list = ['White','WhiteSmoke', 'Crimson', 'Green']
    mail_msg = ''
    mail_msg += '<p>策略名称:"'+strategy_name+'"</p>'
    mail_msg += '<p>交易时间:'+context.current_dt.strftime('%Y-%m-%d')+'</p>'
    mail_msg += '<table cellpadding="10">'
    mail_msg += '<tr bgcolor="'+title_color+'" ><th>交易时间</th><th>股票</th><th>操作</th><th>仓位</th><th>参考价格</th></tr>'
    for stock in sell_list:
        mail_msg += '<tr bgcolor="'+str(color_list[count%2])+'"><td>9:30</td><td>'+current_data[stock].name+stock+'</td><td><font color="Green">卖</font></td><td>全</td><td>¥'+str(current_data[stock].last_price)+'</td></tr>'
        count += 1
    for stock in buy_list:
        mail_msg += '<tr bgcolor="'+str(color_list[count%2])+'"><td>9:30</td><td>'+current_data[stock].name+stock+'</td><td><font color="Crimson">买</font></td><td>1/'+str(buy_how_cout)+'</td><td>¥'+str(current_data[stock].last_price)+'</td</tr>'
        count += 1
    mail_msg += '<tr><th colspan="5">累积收益:<font color="'+[color_list[2] if total_returns>=0 else color_list[3]][0] +'">'+str(round(total_returns,2))+'%</font> 昨日收益:<font color="'+[color_list[2] if last_returns>=0 else color_list[3]][0] +'">'+str(round(day_returns, 2))+'%</font><br/><a href="'+url+'">点击访问策略</a></th></tr></table>'
    
    return mail_msg

调用封装的函数¶

这里的参数是按我的方式计算出来的,各位在使用的时候,可以按自已的实际需求进行调整!!︿( ̄︶ ̄)︿

'''每天计算总收益和上一日收益'''
total_returns = context.portfolio.returns * 100  # 计算收益
day_returns = total_returns - g.last_returns
g.last_returns = total_returns
'''接收者邮箱列表'''
mail_list = ['mail1@163.com', 'mail2@163.com', 'mail3@126.com']
'''策略地址'''
url = ''

'''打包信息'''
message = build_context(context, 
                        hold_count=5, 
                        buy_list=g.buy, 
                        sell_list=g.sell, 
                        url=url, 
                        total_returns=total_returns, 
                        last_returns=day_returns, 
                        strategy_name='遛狗策略', 
                        title_color='red')    
'''发送邮件'''
send_email(subject='遛狗策略交易提醒',
           message=message, 
           sender='发送者邮箱',
           username='发送者邮件名',
           password='邮箱密码',
           receiver_list=mail_list)

效果如下:¶

 

全部回复

0/140

量化课程

    移动端课程