等级: 免费版
- 注册:
- 2021-8-3
- 曾用名:
|
import time
import os
import csv
import numpy
import pandas as pd
import talib as ta
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
my_sender='188@qq.com' # 发件人邮箱账号
my_pass = 'hbiji' # 发件人邮箱密码
my_user='404@qq.com' # 收件人邮箱账号
wj='cs'
def init(context):
context.s1 = context.run_info.base_book_id
context.ma34 = 34
context.qs = '--'
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
pass
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
close = history_bars(context.s1, context.ma34+1, 'self', 'close',True)
open = history_bars(context.s1, context.ma34+1, 'self', 'open',True)
if len(close) < context.ma34+1 :
return
DTIME=get_indicator(context.s1,wj,'DTIME','', 'self',200)
if DTIME[-1] == 2: #DTIME为当前周期,N为大周期
zq0='5分钟' #zq0传递参数于买入卖出显示时间周期
zq1='15分钟' #zq1传递参数于趋势判断显示时间周期 重点:zq1='5分钟'为快速测试参数
zq='15m' #zq传递参数于get_indicator函数
elif DTIME[-1] == 3:
zq0='15分钟' #DTIME返回值0:分笔成交、1:1分钟、2:5分钟、3:15分钟、4:30分钟、5:60分钟、6:日、7:周、
zq1='1小时' #8:月、9:年、10:多日、11:多小时、12:季度、13:多分钟、14:多秒
zq='1h' #15:半年线、16:节气线、17:3分钟、18:10分钟、19:多笔线;
elif DTIME[-1] == 5:
zq0='60分钟'
zq1='日线'
zq='1d'
elif DTIME[-1] == 6:
zq0='日线'
zq1='周线'
zq='1week'
cs1=get_indicator(context.s1,wj,'cs1','',zq,200)
cs2=get_indicator(context.s1,wj,'cs2','',zq,200)
cs3=get_indicator(context.s1,wj,'cs3','',zq,200)
cs4=get_indicator(context.s1,wj,'cs4','',zq,200)
MA3=get_indicator(context.s1,wj,'MA3','',zq,200)
SKK1=get_indicator(context.s1,wj,'SKK','',zq,200)
S1=get_indicator(context.s1,wj,'S','',zq,200)
CC=get_indicator(context.s1,wj,'CC','',zq,200)
if cs1[-1]==1:
context.qs = '上升趋势'
txt21=context.s1+'-'+zq1+',卖空止盈(红)'
txt22= "K: "+ "{:.2f}".format(SKK1[-1])
mail(txt21,txt22)
if cs2[-1]==1:
context.qs = '下降趋势' #趋势
txt31=context.s1+'-'+zq1+',买多止盈(绿)'
txt32="K: " +"{:.2f}".format(SKK1[-1])
mail(txt31,txt32)
if cs3[-1]==1:
txt41=context.s1+'-'+zq1+',激进卖空止盈(红)'
txt42='收盘价:'+"{:.2f}".format(CC[-1])+',均线:'+"{:.2f}".format(MA3[-1])+',K:'+"{:.2f}".format(SKK1[-1])+',S:'+"{:.2f}".format(S1[-1])
mail(txt41,txt42)
if cs4[-1]==1:
txt51=context.s1+'-'+zq1+',激进买多止盈(绿)'
txt52='收盘价:'+"{:.2f}".format(CC[-1])+',均线:'+"{:.2f}".format(MA3[-1])+',K:'+"{:.2f}".format(SKK1[-1])+',S:'+"{:.2f}".format(S1[-1])
mail(txt51,txt52) #激进趋势
# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
pass
def mail(a,b):
msg=MIMEText(b,'plain','utf-8')
msg['From']=formataddr(["188",my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To']=formataddr(["FK",my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject']=a # 邮件的主题,也可以说是标题
server=smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是25
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender,[my_user,],msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
return
具体逻辑 在5分钟图时DTIME[-1] == 2:时, 参数zq='15m' 。 然后判断cs3[-1]==1和cs4[-1]==1。我想达到的效果,在5分钟图加载指标,15分钟收线后判断cs3[-1]==1和cs4[-1]==1。现在的情况是每个5分钟收线后cs3[-1]==1和cs4[-1]==1都执行一次。谢谢
|
|