joinquant周报邮件内容0809

利用量化平台joinquant平台云运行程序,以周报形式发送到邮件,形成自己的看盘驾驶舱视图,提高信息获取效率

导入函数库

from jqdata import *
from jqdata import finance
from jqlib.technical_analysis import *
from pandas.plotting import table
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#用于DataFrame的列名含有中文时,列对齐
pd.set_option(‘display.unicode.ambiguous_as_wide’, True)
pd.set_option(‘display.unicode.east_asian_width’, True)
#设置最大显示宽度,超出就换行
#pd.set_option(‘display.width’, 180)

#显示所有列
pd.set_option(‘display.max_columns’, None)
#显示所有行
pd.set_option(‘display.max_rows’, None)
#设置value的显示长度值,默认为50
#pd.set_option(‘max_colwidth’,100)

初始化函数,设定基准等等

def initialize(context):
# 设定沪深300作为基准
set_benchmark(‘000300.XSHG’)
# 开启动态复权模式(真实价格)
set_option(‘use_real_price’, True)
# 输出内容到日志 log.info()
log.info(‘初始函数开始运行且全局只运行一次’)
# 过滤掉order系列API产生的比error级别低的log
# log.set_level(‘order’, ‘error’)

#设置定时器,在序号14中使用
g.dingshi=0

### 股票相关设定 ###
# 股票类每笔交易时的手续费是:买入时佣金万分之1,卖出时佣金万分之0加千分之0印花税, 每笔交易佣金最低扣0.1块钱
set_order_cost(OrderCost(close_tax=0, open_commission=0.0001, close_commission=0, min_commission=0.1), type='stock')

## 运行函数(reference_security为运行时间的参考标的;传入的标的只做种类区分,因此传入'000300.XSHG'或'510300.XSHG'是一样的)
#开盘前运行
run_daily(before_market_open, time='08:30', reference_security='000001.XSHG')
#开盘时运行
run_daily(market_open, time='open', reference_security='000001.XSHG')
#收盘后运行
run_daily(after_market_close, time='19:30', reference_security='000001.XSHG')

#每周的某天运行,某月运行,配合序号14的备忘代码
run_weekly(before_market_open_weekly,5,time='08:30', reference_security='000001.XSHG')
run_monthly(before_market_open_monthly,1,time='08:30', reference_security='000001.XSHG',force=False)

def before_market_open_weekly(context):
g.dingshi=1
g.beiwang=‘一、今日检验任务:\n1)股债性价比高?\n2)A股 PE PB是否高估?触发加仓?\n3)美股PE PB可定投?\n4)全A成交量破万亿?’
def before_market_open_monthly(context):
g.dingshi=2
g.beiwang= ‘一、今日检验任务:\n1)自选基金的异动(规模、基金经理变动)\n2)基金年报展望\n3)检查有道笔记-投资计划逻辑是否还存在?\n4)雪球外资top10调仓’

开盘前运行函数

def before_market_open(context):
#序号14,定时器设置邮件正文开头的备忘
if(g.dingshi==0):
g.beiwang=‘一、又是新的、开心的一天,加油!’
else:
g.dingshi=0

#规模指数,这里的数量需要与N1一致
g.zhishu1=['000001.XSHG','000016.XSHG','399300.XSHE','399006.XSHE','000905.XSHG','000852.XSHG','000903.XSHG']
g.zhishu_nanme1=['上证指数','_上证50','沪深300','_创业板_','中证500','中证1000','中证100']
#[0,0,0,0]的元素数量务必与colums列数量一致,index=list('123')
g.df1=pd.DataFrame([[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],columns=['名称','周涨跌','月涨跌','半年涨跌','一年涨跌'])

#风格指数,这里的数量需要与N2一致
g.zhishu2=['399372.XSHE','399373.XSHE','399374.XSHE','399375.XSHE','399376.XSHE','399377.XSHE','000958.XSHG','000838.XSHG','399405.XSHE','399404.XSHE']
g.zhishu_nanme2=['大盘成长','大盘价值','中盘成长','中盘价值','小盘成长','小盘价值','创业成长','创业价值','大盘高贝','大盘低波']
g.df2=pd.DataFrame([[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],columns=['名称','周涨跌','月涨跌','半年涨跌','一年涨跌'])

#行业指数,平台不支持行业行情,以etf基金作为参考,这里的数量需要与N3一致
g.zhishu3=['512760.XSHG','512480.XSHG','512010.XSHG','159928.XSHE','512690.XSHG','513330.XSHG','515790.XSHG','515030.XSHG','512880.XSHG','515220.XSHG']
g.zhishu_nanme3=['__芯片','_半导体','__医药','__消费','___酒','恒生互联','__光伏','新能源车','__证券','__煤炭']
g.df3=pd.DataFrame([[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],columns=['名称','周涨跌','月涨跌','半年涨跌','一年涨跌'])

#close_data3= get_bars(g.zhishu3, count=270, unit='1d', fields=['close'])
#print('获取3组每个涨跌%s'%(close_data3))
#print('收盘价数据类型是%s'%(type(close_data3)))

#自选基金一,需与N4一致,用于检测海外道琼斯reit和纳斯达克,因为本平台不支持美股行情
g.zhishu4=['160140.XSHE','006479.OF','161125.XSHE','006327.OF']
g.zhishu_nanme4=['道琼斯reit','纳斯达克','标普500','中概互联']
#元素个数与基金数量要一致
g.df4=pd.DataFrame([[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],columns=['名称','周涨跌','月涨跌','半年涨跌','一年涨跌'])

#g.df_price1=get_extras('acc_net_value',g.zhishu4,end_date=datetime.datetime.now(),count=300)
#print(g.df_price1[-5:])
#print('获取每个基金累计净值%s'%(g.df_price1[-5:]))

#自选基金二(年化8%),稳债基金,需与N5一致
g.zhishu5=['001711.OF','000215.OF','110017.OF','161115.XSHE','110008.OF','161716.XSHE']
g.zhishu_nanme5=['安信新趋C','广发趋优A','易方增强A','易方达岁丰','易方稳健B','招商双债F']
#元素个数与基金数量要一致
g.df5=pd.DataFrame([[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],columns=['名称','周涨跌','月涨跌','半年涨跌','一年涨跌'])

#自选基金三,偏债基金(年化10%),需与N6一致
g.zhishu6=['005215.OF','001326.OF','000118.OF','002019.OF','001711.OF','003029.OF']
g.zhishu_nanme6=['南方全天候','鹏华弘和C','广发聚鑫A','鹏华弘安C','安信新趋C','安信新优C']
#元素个数与基金数量要一致
g.df6=pd.DataFrame([[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],columns=['名称','周涨跌','月涨跌','半年涨跌','一年涨跌'])

#N7是打印滚动月成交最大的top10

#自选基金四,积极基金(年化20%),需与N8一致
g.zhishu8=['002096.OF','001217.OF','000313.OF','161017.XSHE','004195.OF','161039.XSHE']
g.zhishu_nanme8=['博时新收C','易方新收C','华安300','富国500','招商1000','富国1000']
#元素个数与基金数量要一致
g.df8=pd.DataFrame([[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],columns=['名称','周涨跌','月涨跌','半年涨跌','一年涨跌'])

'''#监测自选基金的基本信息,但是无法获取
#g.zhishu9=['005215','001326']
q9=query(finance.FUND_MAIN_INFO).filter(finance.FUND_MAIN_INFO.main_code=='005215')
df9=finance.run_query(q9)
df9_1=df9['trustee']
print(df9_1)
'''

#序号10、11、12、13支撑位压力位监控
#序号14,定时器设置邮件正文开头的备忘

#序号15,计算全A成交额
chengjiaoe15=get_bars('000985.XSHG', count=2, unit='1d', fields=['money'],include_now=True,df=False) #若security为字符串格式的标的代码时,返回一个 numpy.ndarry 对象,否则是字典
#print(chengjiaoe15) #此时是numpy.ndarray元组 [(a,)]
#若当前时间是T,此时获取T-1的成交额
chengjiaoe15_1=chengjiaoe15[-1] #此时是元组( a,)
#print(chengjiaoe15_1)
chengjiaoe15_2=chengjiaoe15_1[-1] #元素a
#print(chengjiaoe15_2)

#获取T-2成交额
chengjiaoe15_3=chengjiaoe15[-2]
chengjiaoe15_4=chengjiaoe15_3[-1]
print(chengjiaoe15_4)
#环比成交额计算
chengjiaoe15_5=(chengjiaoe15_2-chengjiaoe15_4)/chengjiaoe15_4
g.chengjiaoe15_8=result = '{:.2%}'.format(chengjiaoe15_5)
print(g.chengjiaoe15_8)

#转化为亿单位,并保留2位小数
chengjiaoe15_6=chengjiaoe15_2/100000000
g.chengjiaoe15_7=round(chengjiaoe15_6,2)
print(g.chengjiaoe15_7)


#############这是规模指数的循环############
N1=7
i1=0
while(i1<N1):
    s1=g.zhishu1[i1]
    #count的值N务必≥close_data1['close'][-N]的N
    close_data1= get_bars(s1, count=270, unit='1d', fields=['close'],include_now=True)
    # 取得当前价格
    current_price1= close_data1['close'][-1]
    
    #取得过去时间点价格
    last_price1= close_data1['close'][-5]
    last_price1_1= close_data1['close'][-20]
    last_price1_2= close_data1['close'][-130]
    last_price1_3= close_data1['close'][-260]
    
    '''#验证数据的准确性
    print('-1##%s'%(current_price1))
    print('-5##%s'%(last_price1))
    print('-20##%s'%(last_price1_1))
    print('-130##%s'%(last_price1_2))
    print('-260##%s'%(last_price1_3))
    print('##########################')
    '''
    
    zhangdie1=(current_price1-last_price1)/last_price1
    zhangdie1_1=(current_price1-last_price1_1)/last_price1_1
    zhangdie1_2=(current_price1-last_price1_2)/last_price1_2
    zhangdie1_3=(current_price1-last_price1_3)/last_price1_3
    #print('涨跌1###原始值%s'%(type(zhangdie1)))
    
    #保留N位小数,zhangdie1_2=('%.2f' % zhangdie1_2)该方法会把float转为str,round则保留原数据类型
    zhangdie1=round(zhangdie1,4)
    zhangdie1_1=round(zhangdie1_1,4)
    zhangdie1_2=round(zhangdie1_2,4)
    zhangdie1_3=round(zhangdie1_3,4)
    #print('round方式%s'%(type(zhangdie1)))
    
    #周报数值不显示%了,不好数值对比,高亮数值
    #g.result1= '{:.2%}'.format(zhangdie1)
    #g.result1_1= '{:.2%}'.format(zhangdie1_1)
    #g.result1_2= '{:.2%}'.format(zhangdie1_2)
    #g.result1_3= '{:.2%}'.format(zhangdie1_3)
    #log.info("%s周涨跌" % g.zhishu_nanme1[i1],"%s" % g.result1)
    #print('1组装循环前类型%s'%(type(zhangdie1)))
    
    #循环装进df
    g.df1.loc[i1]=[g.zhishu_nanme1[i1],zhangdie1,zhangdie1_1,zhangdie1_2,zhangdie1_3]
    #排序,先用原数值排序,因为百分比没有数据类型
    g.df1=g.df1.sort_values('月涨跌',ascending=False,inplace=False)
    
    #转百分比数值显示
    df1_1=g.df1['名称']
    #转为%显示
    df1_2=g.df1['周涨跌']
    df1_2= df1_2.apply(lambda x: format(x, '.2%'))
    df1_3=g.df1['月涨跌']
    df1_3= df1_3.apply(lambda x: format(x, '.2%'))
    df1_4=g.df1['半年涨跌']
    df1_4= df1_4.apply(lambda x: format(x, '.2%'))
    df1_5=g.df1['一年涨跌']
    df1_5= df1_5.apply(lambda x: format(x, '.2%'))
    #print('apply方式%s'%(type(df1_2)))
    
    #合并组合df
    g.df1_1=pd.concat([df1_1,df1_2,df1_3,df1_4,df1_5],axis=1)
    #设置df背景色和字体色,但是发送的邮件不起效
    #g.df1_1.style.set_properties(**{'background-color': 'black', 'color': 'green'})
    #print(g.df1)
    #g.df1.style.background_gradient(cmap='gray_r') 打印df背景色块,发送到邮件不起效
    i1=i1+1
#算组合的平均涨幅
else:
    g.df1_2=g.df1.mean(axis=0)
    g.df1_2=round(g.df1_2,4)
    g.df1_2=g.df1_2.apply(lambda x: format(x, '.2%'))
    #print(g.df1_2)   
    
############这是风格指数的循环############    
N2=10
i2=0
while(i2<N2):
    s2=g.zhishu2[i2]
    close_data2= get_bars(s2, count=270, unit='1d', fields=['close'])
    # 取得当前价格
    current_price2= close_data2['close'][-1]
    
    #取得过去时间点价格
    last_price2= close_data2['close'][-5]
    last_price2_1= close_data2['close'][-20]
    last_price2_2= close_data2['close'][-130]
    last_price2_3= close_data2['close'][-260]
    
    '''#验证数据的准确性
    print('-1##%s'%(current_price2))
    print('-5##%s'%(last_price2))
    print('-20##%s'%(last_price2_1))
    print('-130##%s'%(last_price2_2))
    print('-1260##%s'%(last_price2_3))
    print('##########################')
    '''
    
    
    zhangdie2=(current_price2-last_price2)/last_price2
    zhangdie2_1=(current_price2-last_price2_1)/last_price2_1
    zhangdie2_2=(current_price2-last_price2_2)/last_price2_2
    zhangdie2_3=(current_price2-last_price2_3)/last_price2_3
    
    g.result2= '{:.2%}'.format(zhangdie2)
    g.result2_1= '{:.2%}'.format(zhangdie2_1)
    g.result2_2= '{:.2%}'.format(zhangdie2_2)
    g.result2_3= '{:.2%}'.format(zhangdie2_3)
    
    #print('2组装循环前类型%s'%(type(g.result2)))
    #log.info("%s周涨跌" % g.zhishu_nanme2[i2],"%s" % g.result2)
    #log.info("%s月涨跌" % g.zhishu_nanme2[i2],"%s" % g.result2_1)
    #log.info("%s半年涨跌" % g.zhishu_nanme2[i2],"%s" % g.result2_2)
    #log.info("%s一年涨跌" % g.zhishu_nanme2[i2],"%s" % g.result2_3)
    
    g.df2.loc[i2]=[g.zhishu_nanme2[i2],g.result2,g.result2_1,g.result2_2,g.result2_3]
    #g.df1_1=g.df1.sort_values(by='周涨跌',ascending=True)
    #print(type(g.df2))
    #将df数值转化为百分比
    #print(g.df2)
    i2=i2+1
    
############这是行业板块的循环############    
N3=10
i3=0
while(i3<N3):
    s3=g.zhishu3[i3]
    close_data3= get_bars(s3, count=270, unit='1d', fields=['close'])
    #print('循环获取3组每个股票最新5个收盘价%s'%(close_data3[-5:]))
    # 取得当前价格
    current_price3 = close_data3['close'][-1]
    
    #取得过去时间点价格
    last_price3= close_data3['close'][-5]
    last_price3_1= close_data3['close'][-20]
    last_price3_2= close_data3['close'][-130]
    last_price3_3= close_data3['close'][-260]
    
    '''#验证数据的准确性
    print('-1##%s'%(current_price3))
    print('-5##%s'%(last_price3))
    print('-20##%s'%(last_price3_1))
    print('-130##%s'%(last_price3_2))
    print('-1260##%s'%(last_price3_3))
    print('##########################')
    '''
    
    zhangdie3=(current_price3-last_price3)/last_price3
    zhangdie3_1=(current_price3-last_price3_1)/last_price3_1
    zhangdie3_2=(current_price3-last_price3_2)/last_price3_2
    zhangdie3_3=(current_price3-last_price3_3)/last_price3_3
    
    g.result3= round(zhangdie3,4)
    g.result3_1= round(zhangdie3_1,4)
    g.result3_2= round(zhangdie3_2,4)
    g.result3_3=round(zhangdie3_3,4)
    
    #print('3组装循环前类型%s'%(type(g.result3)))
    #查看数据类型
    #print(type(g.result3))
    #转为百分比
    #g.result3= '{:.2%}'.format(zhangdie3)
    #g.result3_1= '{:.2%}'.format(zhangdie3_1)
    #g.result3_2= '{:.2%}'.format(zhangdie3_2)
    #g.result3_3= '{:.2%}'.format(zhangdie3_3)
    
    
    #log.info("%s周涨跌" % g.zhishu_nanme3[i3],"%s" % g.result3)
    #log.info("%s月涨跌" % g.zhishu_nanme3[i3],"%s" % g.result3_1)
    #log.info("%s半年涨跌" % g.zhishu_nanme3[i3],"%s" % g.result3_2)
    #log.info("%s一年涨跌" % g.zhishu_nanme3[i3],"%s" % g.result3_3)
    
    #装进去df
    g.df3.loc[i3]=[g.zhishu_nanme3[i3],g.result3,g.result3_1,g.result3_2,g.result3_3]
    #排序,先用原数值排序,因为百分比没有数据类型
    g.df3=g.df3.sort_values('月涨跌',ascending=False,inplace=False)
    
    #查看数据类型
    #print(type(g.df3))
    df3_1=g.df3['名称']
    #转为%显示
    df3_2=g.df3['周涨跌']
    df3_2= df3_2.apply(lambda x: format(x, '.2%'))
    df3_3=g.df3['月涨跌']
    df3_3= df3_3.apply(lambda x: format(x, '.2%'))
    df3_4=g.df3['半年涨跌']
    df3_4= df3_4.apply(lambda x: format(x, '.2%'))
    df3_5=g.df3['一年涨跌']
    df3_5= df3_5.map(lambda x: format(x, '.2%'))
    
    #合并组合df
    g.df3_1=pd.concat([df3_1,df3_2,df3_3,df3_4,df3_5],axis=1)
    i3=i3+1
    
    #############这是自选基金一,监测海外纳斯达克、reits、中概互联的循环############
N4=4
i4=0
while(i4<N4):
    s4=g.zhishu4[i4]
    #获取固定时间段的累计净值
    #g.df_price=get_extras('acc_net_value', g.zhishu4, start_date='2022-08-02', end_date='2022-08-03')
    #获取当前时间前的count个累计净值,end_date=datetime.datetime.now()结束时间为当前
    g.df_price=get_extras('acc_net_value',s4,end_date=datetime.datetime.now(),df=False,count=300)
    
    #print('基金净值数据类型是%s'%(type(g.df_price)))

    #打印全部
    #print(g.df_price)
    #打印倒数-5直最后
    #print('循环获取4组每个基金净值%s'%(close_data3[-5:]))
    #打印最后一个
    #print(g.df_price.iloc[-1])
    
    #取得过去时间点价格,基金清算当天可能还不会出结果,默认拿T-3日净值计算
    last_price4= g.df_price[s4][-3]
    last_price4_1= g.df_price[s4][-7]
    last_price4_2= g.df_price[s4][-22]
    last_price4_3= g.df_price[s4][-132]
    last_price4_4= g.df_price[s4][-262]
    
    '''#验证数据的准确性
    print('-1##%s'%(last_price4))
    print('-5##%s'%(last_price4_1))
    print('-20##%s'%(last_price4_2))
    print('-130##%s'%(last_price4_3))
    print('-260##%s'%(last_price4_4))
    print('##########################')
    '''
    
    
    zhangdie4=(last_price4-last_price4_1)/last_price4_1
    zhangdie4_1=(last_price4-last_price4_2)/last_price4_2
    zhangdie4_2=(last_price4-last_price4_3)/last_price4_3
    zhangdie4_3=(last_price4-last_price4_4)/last_price4_4
    
    #print('基金昨日涨跌%s'%(zhangdie4))
    
    #保留N位小数,zhangdie1_2=('%.2f' % zhangdie1_2)该方法会把float转为str,round则保留原数据类型
    zhangdie4=round(zhangdie4,4)
    zhangdie4_1=round(zhangdie4_1,4)
    zhangdie4_2=round(zhangdie4_2,4)
    zhangdie4_3=round(zhangdie4_3,4)
    
    #print('4组装循环前类型222%s'%(type(zhangdie4)))
    
    #周报数值不显示%了,不好数值对比,高亮数值
    #g.result1= '{:.2%}'.format(zhangdie4)
    #g.result1_1= '{:.2%}'.format(zhangdie4_1)
    #g.result1_2= '{:.2%}'.format(zhangdie4_2)
    #g.result1_3= '{:.2%}'.format(zhangdie4_3)
    #log.info("%s周涨跌" % g.zhishu_nanme1[i1],"%s" % g.result1)
    
    #循环装进df
    g.df4.loc[i4]=[g.zhishu_nanme4[i4],zhangdie4,zhangdie4_1,zhangdie4_2,zhangdie4_3]
    #排序,先用原数值排序,因为百分比没有数据类型
    g.df4=g.df4.sort_values('月涨跌',ascending=False,inplace=False)
    
    #转百分比数值显示
    df4_1=g.df4['名称']
    #转为%显示
    df4_2=g.df4['周涨跌']
    df4_2= df4_2.apply(lambda x: format(x, '.2%'))
    df4_3=g.df4['月涨跌']
    df4_3= df4_3.apply(lambda x: format(x, '.2%'))
    df4_4=g.df4['半年涨跌']
    df4_4= df4_4.apply(lambda x: format(x, '.2%'))
    df4_5=g.df4['一年涨跌']
    df4_5= df4_5.apply(lambda x: format(x, '.2%'))
    #print('apply方式%s'%(type(df1_2)))
    
    #合并组合df
    g.df4_1=pd.concat([df4_1,df4_2,df4_3,df4_4,df4_5],axis=1)
    #设置df背景色和字体色,但是发送的邮件不起效
    #g.df1_1.style.set_properties(**{'background-color': 'black', 'color': 'green'})
    #print(g.df4_1)
    #g.df1.style.background_gradient(cmap='gray_r') 打印df背景色块,发送到邮件不起效
    i4=i4+1
    
    #############这是自选基金二,8%的循环############
N5=6
i5=0
while(i5<N5):
    s5=g.zhishu5[i5]
    #获取固定时间段的累计净值
    #g.df_price=get_extras('acc_net_value', g.zhishu4, start_date='2022-08-02', end_date='2022-08-03')
    #获取当前时间前的count个累计净值,end_date=datetime.datetime.now()结束时间为当前
    g.df_price5=get_extras('acc_net_value',s5,end_date=datetime.datetime.now(),df=False,count=300)
    
    #print('基金净值数据类型是%s'%(type(g.df_price)))

    #打印全部
    #print(g.df_price)
    #打印倒数-5直最后
    #print('循环获取4组每个基金净值%s'%(close_data3[-5:]))
    #打印最后一个
    #print(g.df_price.iloc[-1])
    
    #取得过去时间点价格,
    last_price5= g.df_price5[s5][-2]
    last_price5_1= g.df_price5[s5][-6]
    last_price5_2= g.df_price5[s5][-21]
    last_price5_3= g.df_price5[s5][-131]
    last_price5_4= g.df_price5[s5][-261]
    
    '''#验证数据的准确性
    print('-1##%s'%(last_price5))
    print('-5##%s'%(last_price5_1))
    print('-20##%s'%(last_price5_2))
    print('-130##%s'%(last_price5_3))
    print('-1260##%s'%(last_price5_4))
    print('##########################')
    '''
    
    
    zhangdie5=(last_price5-last_price5_1)/last_price5_1
    zhangdie5_1=(last_price5-last_price5_2)/last_price5_2
    zhangdie5_2=(last_price5-last_price5_3)/last_price5_3
    zhangdie5_3=(last_price5-last_price5_4)/last_price5_4
    
    #print('月涨跌%s'%(zhangdie5_1))
    #print('半年涨跌%s'%(zhangdie5_2))
    
    #保留N位小数,zhangdie1_2=('%.2f' % zhangdie1_2)该方法会把float转为str,round则保留原数据类型
    zhangdie5=round(zhangdie5,4)
    zhangdie5_1=round(zhangdie5_1,4)
    zhangdie5_2=round(zhangdie5_2,4)
    zhangdie5_3=round(zhangdie5_3,4)
    
    #print('4组装循环前类型222%s'%(type(zhangdie4)))
    #log.info("%s周涨跌" % g.zhishu_nanme1[i1],"%s" % g.result1)
    
    #循环装进df
    g.df5.loc[i5]=[g.zhishu_nanme5[i5],zhangdie5,zhangdie5_1,zhangdie5_2,zhangdie5_3]
    #排序,先用原数值排序,因为百分比没有数据类型
    g.df5=g.df5.sort_values('月涨跌',ascending=False,inplace=False)
    
    #转百分比数值显示
    df5_1=g.df5['名称']
    #转为%显示
    df5_2=g.df5['周涨跌']
    df5_2= df5_2.apply(lambda x: format(x, '.2%'))
    df5_3=g.df5['月涨跌']
    df5_3= df5_3.apply(lambda x: format(x, '.2%'))
    df5_4=g.df5['半年涨跌']
    df5_4= df5_4.apply(lambda x: format(x, '.2%'))
    df5_5=g.df5['一年涨跌']
    df5_5= df5_5.apply(lambda x: format(x, '.2%'))
    #print('apply方式%s'%(type(df1_2)))
    
    #合并组合df
    g.df5_1=pd.concat([df5_1,df5_2,df5_3,df5_4,df5_5],axis=1)
    #设置df背景色和字体色,但是发送的邮件不起效
    #g.df1_1.style.set_properties(**{'background-color': 'black', 'color': 'green'})
    #print(g.df5_1)
    #g.df1.style.background_gradient(cmap='gray_r') 打印df背景色块,发送到邮件不起效
    i5=i5+1
else:
    g.df5_2=g.df5.mean(axis=0)
    g.df5_2=round(g.df5_2,4)
    g.df5_2=g.df5_2.apply(lambda x: format(x, '.2%'))
    #print(g.df6_2)    

#自选基金三,偏债基金(年化10%),需与N6一致    
N6=6
i6=0
while(i6<N6):
    s6=g.zhishu6[i6]
    #获取固定时间段的累计净值
    #g.df_price=get_extras('acc_net_value', g.zhishu4, start_date='2022-08-02', end_date='2022-08-03')
    #获取当前时间前的count个累计净值,end_date=datetime.datetime.now()结束时间为当前
    g.df_price6=get_extras('acc_net_value',s6,end_date=datetime.datetime.now(),df=False,count=300)
    
    #print('基金净值数据类型是%s'%(type(g.df_price)))

    #打印全部
    #print(g.df_price)
    #打印倒数-5直最后
    #print('循环获取4组每个基金净值%s'%(close_data3[-5:]))
    #打印最后一个
    #print(g.df_price.iloc[-1])
    
    #取得过去时间点价格,因为南方全天候是FOF,净值更新慢一天
    last_price6= g.df_price6[s6][-3]
    last_price6_1= g.df_price6[s6][-7]
    last_price6_2= g.df_price6[s6][-22]
    last_price6_3= g.df_price6[s6][-132]
    last_price6_4= g.df_price6[s6][-262]
   
    '''#验证数据的准确性
    print('-1##%s'%(last_price6))
    print('-5##%s'%(last_price6_1))
    print('-20##%s'%(last_price6_2))
    print('-130##%s'%(last_price6_3))
    print('-1260##%s'%(last_price6_4))
    print('##########################')
    '''
    
    
    zhangdie6=(last_price6-last_price6_1)/last_price6_1
    zhangdie6_1=(last_price6-last_price6_2)/last_price6_2
    zhangdie6_2=(last_price6-last_price6_3)/last_price6_3
    zhangdie6_3=(last_price6-last_price6_4)/last_price6_4
    
    #print('月涨跌%s'%(zhangdie5_1))
    #print('半年涨跌%s'%(zhangdie5_2))
    
    #保留N位小数,zhangdie1_2=('%.2f' % zhangdie1_2)该方法会把float转为str,round则保留原数据类型
    zhangdie6=round(zhangdie6,4)
    zhangdie6_1=round(zhangdie6_1,4)
    zhangdie6_2=round(zhangdie6_2,4)
    zhangdie6_3=round(zhangdie6_3,4)
    
    #print('4组装循环前类型222%s'%(type(zhangdie4)))
    #log.info("%s周涨跌" % g.zhishu_nanme1[i1],"%s" % g.result1)
    
    #循环装进df
    g.df6.loc[i6]=[g.zhishu_nanme6[i6],zhangdie6,zhangdie6_1,zhangdie6_2,zhangdie6_3]
    #排序,先用原数值排序,因为百分比没有数据类型
    g.df6=g.df6.sort_values('月涨跌',ascending=False,inplace=False)
    
    #转百分比数值显示
    df6_1=g.df6['名称']
    #转为%显示
    df6_2=g.df6['周涨跌']
    df6_2= df6_2.apply(lambda x: format(x, '.2%'))
    df6_3=g.df6['月涨跌']
    df6_3= df6_3.apply(lambda x: format(x, '.2%'))
    df6_4=g.df6['半年涨跌']
    df6_4= df6_4.apply(lambda x: format(x, '.2%'))
    df6_5=g.df6['一年涨跌']
    df6_5= df6_5.apply(lambda x: format(x, '.2%'))
    #print('apply方式%s'%(type(df1_2)))
    
    #合并组合df
    g.df6_1=pd.concat([df6_1,df6_2,df6_3,df6_4,df6_5],axis=1)
    #设置df背景色和字体色,但是发送的邮件不起效
    #g.df1_1.style.set_properties(**{'background-color': 'black', 'color': 'green'})
    #print(g.df6_1)
    #g.df1.style.background_gradient(cmap='gray_r') 打印df背景色块,发送到邮件不起效
    i6=i6+1
else:
    g.df6_2=g.df6.mean(axis=0)
    g.df6_2=round(g.df6_2,4)
    g.df6_2=g.df6_2.apply(lambda x: format(x, '.2%'))
    #print(g.df6_2)    
    
#查询上月N个外资成交活跃股
N7=10
n7=N7/2
current_date7 = context.current_dt.date()
#print(current_date7)

q7=query(finance.STK_EL_TOP_ACTIVATE).filter(finance.STK_EL_TOP_ACTIVATE.day==current_date7,finance.STK_EL_TOP_ACTIVATE.link_id=='310001').limit(n7)
df7=finance.run_query(q7)
#print(df7[['day','code','name','buy']])

q7_1=query(finance.STK_EL_TOP_ACTIVATE).filter(finance.STK_EL_TOP_ACTIVATE.day==current_date7,finance.STK_EL_TOP_ACTIVATE.link_id=='310002').limit(n7)
df7_1=finance.run_query(q7_1)
#print(df7_1[['day','code','name','buy']])

#合并上述沪深两市的股票
g.df7_2=pd.concat([df7, df7_1])
g.df7_2=g.df7_2[['name','rank']]
#print(g.df7_2)


#自选积极基金
N8=6
i8=0
while(i8<N8):
    s8=g.zhishu8[i8]
    #获取固定时间段的累计净值
    #g.df_price=get_extras('acc_net_value', g.zhishu4, start_date='2022-08-02', end_date='2022-08-03')
    #获取当前时间前的count个累计净值,end_date=datetime.datetime.now()结束时间为当前
    g.df_price8=get_extras('acc_net_value',s8,end_date=datetime.datetime.now(),df=False,count=300)
    
    #print('基金净值数据类型是%s'%(type(g.df_price)))

    #打印全部
    #print(g.df_price)
    #打印倒数-5直最后
    #print('循环获取4组每个基金净值%s'%(close_data3[-5:]))
    #打印最后一个
    #print(g.df_price.iloc[-1])
    
    #取得过去时间点价格,
    last_price8= g.df_price8[s8][-2]
    last_price8_1= g.df_price8[s8][-6]
    last_price8_2= g.df_price8[s8][-21]
    last_price8_3= g.df_price8[s8][-131]
    last_price8_4= g.df_price8[s8][-261]
    
    '''#验证数据的准确性
    print('-1##%s'%(last_price8))
    print('-5##%s'%(last_price8_1))
    print('-20##%s'%(last_price8_2))
    print('-130##%s'%(last_price8_3))
    print('-260##%s'%(last_price8_4))
    print('##########################')
    '''
    
    
    zhangdie8=(last_price8-last_price8_1)/last_price8_1
    zhangdie8_1=(last_price8-last_price8_2)/last_price8_2
    zhangdie8_2=(last_price8-last_price8_3)/last_price8_3
    zhangdie8_3=(last_price8-last_price8_4)/last_price8_4
    
    #print('月涨跌%s'%(zhangdie5_1))
    #print('半年涨跌%s'%(zhangdie5_2))
    
    #保留N位小数,zhangdie1_2=('%.2f' % zhangdie1_2)该方法会把float转为str,round则保留原数据类型
    zhangdie8=round(zhangdie8,4)
    zhangdie8_1=round(zhangdie8_1,4)
    zhangdie8_2=round(zhangdie8_2,4)
    zhangdie8_3=round(zhangdie8_3,4)
    
    #print('4组装循环前类型222%s'%(type(zhangdie4)))
    #log.info("%s周涨跌" % g.zhishu_nanme1[i1],"%s" % g.result1)
    
    #循环装进df
    g.df8.loc[i8]=[g.zhishu_nanme8[i8],zhangdie8,zhangdie8_1,zhangdie8_2,zhangdie8_3]
    #排序,先用原数值排序,因为百分比没有数据类型
    g.df8=g.df8.sort_values('月涨跌',ascending=False,inplace=False)
    
    #转百分比数值显示
    df8_1=g.df8['名称']
    #转为%显示
    df8_2=g.df8['周涨跌']
    df8_2= df8_2.apply(lambda x: format(x, '.2%'))
    df8_3=g.df8['月涨跌']
    df8_3= df8_3.apply(lambda x: format(x, '.2%'))
    df8_4=g.df8['半年涨跌']
    df8_4= df8_4.apply(lambda x: format(x, '.2%'))
    df8_5=g.df8['一年涨跌']
    df8_5= df8_5.apply(lambda x: format(x, '.2%'))
    #print('apply方式%s'%(type(df1_2)))
    
    #合并组合df
    g.df8_1=pd.concat([df8_1,df8_2,df8_3,df8_4,df8_5],axis=1)
    #设置df背景色和字体色,但是发送的邮件不起效
    #g.df1_1.style.set_properties(**{'background-color': 'black', 'color': 'green'})
    #print(g.df8_1)
    #g.df1.style.background_gradient(cmap='gray_r') 打印df背景色块,发送到邮件不起效
    i8=i8+1
#算出组合的平均涨幅
else:
    g.df8_2=g.df8.mean(axis=0)
    g.df8_2=round(g.df8_2,4)
    g.df8_2=g.df8_2.apply(lambda x: format(x, '.2%'))
    #print(g.df8_2)
    
    
'''#监测规模指数的RSI值
current_date = context.current_dt.date()
RSI1 = RSI(g.zhishu1, check_date=current_date, N1=20)
#g.RSI1=round(RSI1['g.zhishu1'],4)
g.RSI1=('%.2f' % RSI1['g.zhishu1'])'''

####################序号10、11支撑位压力位监控
#设置要监控的标1:沪深300(g.为全局变量)
g.s10 ='000300.XSHG'
#建仓点位
buy10=4191

#RSI
RSI10=RSI(g.s10, check_date=context.current_dt.date(), N1=20, unit = '1d', include_now = True, fq_ref_date = None)
RSI10_1=RSI10[g.s10]
#RSI10='{:.2f}'.format(RSI10['000300.XSHG'])
#设置超买超卖点,以及提示
RSI10_2=58
RSI10_3=38
#print(RSI10_1)
if(RSI10_1>RSI10_2):
    RSI10_4=',RSI超买!注意风险'
elif(RSI10_1<RSI10_3):
    RSI10_4=',RSI超卖!安全进场'
else:
    RSI10_4=''    

#20天成交均量
vol10= get_bars(g.s10, count=20, unit='1d', fields=['volume'])
vol10_1= vol10['volume'][-1]

ma_vol10 = vol10['volume'].mean()
if(vol10_1>ma_vol10*1.2):
    vol10_2=',明显放量'
elif(vol10_1<ma_vol10*0.8):
    vol10_2=',成交萎缩'
else:
    vol10_2=''    
    
#价格20均线,count=20
price10= get_bars(g.s10, count=20, unit='1d', fields=['close'])
price10_1=price10['close'][-1]

ma_price10 = price10['close'].mean()
ma_zhangdie10=(price10_1-ma_price10)/ma_price10
ma_zhangdie10_1= '{:.2%}'.format(ma_zhangdie10)

if(ma_zhangdie10>0.03):
    prince10_2=',高于20日均价3%+'
elif(ma_zhangdie10<-0.04):
    prince10_2=',低于20日均价4%+'
else:
    prince10_2=''    

#设定支撑位,前前低位2022.4.26,以疫情2020.3最大支撑位,当前预计最大跌幅-16.5%,分4笔建仓
zhicheng10_1=4066
zhicheng10_2=3790
zhicheng10_3=3600

#设定压力位,前高位2022.7.6为压力位1,前前高位2022.2为压力:2
yali10_1=4486   
yali10_2=4600
yali10_3=4824

'''#建仓视图
juli_zhicheng10_1='{:.2%}'.format((buy10-zhicheng10_1)/zhicheng10_1)
juli_zhicheng10_2='{:.2%}'.format((buy10-zhicheng10_2)/zhicheng10_2)
juli_zhicheng10_3='{:.2%}'.format((buy10-zhicheng10_3)/zhicheng10_3)

juli_yali10_1='{:.2%}'.format((buy10-yali10_1)/yali10_1)
juli_yali10_2='{:.2%}'.format((buy10-yali10_2)/yali10_2)
juli_yali10_3='{:.2%}'.format((buy10-yali10_3)/yali10_3)
'''

close_data10= get_bars(g.s10, count=300, unit='1d', fields=['close'])
current_price10 = close_data10['close'][-1]
current_price10_1 = close_data10['close'][-2]
#涨跌
zhangdie10=(current_price10-current_price10_1)/current_price10_1
zhangdie10= '{:.2%}'.format(zhangdie10)
jiancang_zhangdie10=(current_price10-buy10)/buy10
g.jiancang_zhangdie10='{:.2%}'.format(jiancang_zhangdie10)

#与支撑1、2、3区间幅度
zhangdie10_1=(zhicheng10_1-current_price10)/current_price10
zhangdie10_1='{:.2%}'.format(zhangdie10_1)
zhangdie10_2=(zhicheng10_2-current_price10)/current_price10
zhangdie10_2='{:.2%}'.format(zhangdie10_2)
zhangdie10_3=(zhicheng10_3-current_price10)/current_price10
zhangdie10_3='{:.2%}'.format(zhangdie10_3)

#与压力1、2、3区间幅度
yali_zhangdie10_1=(yali10_1-current_price10)/current_price10
yali_zhangdie10_1='{:.2%}'.format(yali_zhangdie10_1)
yali_zhangdie10_2=(yali10_2-current_price10)/current_price10
yali_zhangdie10_2='{:.2%}'.format(yali_zhangdie10_2)
yali_zhangdie10_3=(yali10_3-current_price10)/current_price10
yali_zhangdie10_3='{:.2%}'.format(yali_zhangdie10_3)

if current_price10<zhicheng10_1:
    if current_price10<zhicheng10_2:
        if current_price10<zhicheng10_3:
            g.jiankong10='1)沪深300:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-低于支撑位3:%s,收复需涨%s'%(g.jiancang_zhangdie10,RSI10_4,vol10_2,prince10_2,current_price10,zhangdie10,zhicheng10_3,zhangdie10_3)
            #print('沪深300昨日%s %s 低于支撑位3:%s %s'%(current_price10, zhangdie10,zhicheng10_3,zhangdie10_3)) 
        else:
            g.jiankong10='1)沪深300:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-低于支撑位2:%s,收复需涨%s\n-若再下跌%s,触及支撑位3:%s'%(g.jiancang_zhangdie10,RSI10_4,vol10_2,prince10_2,current_price10,zhangdie10,zhicheng10_2,zhangdie10_2,zhangdie10_3,zhicheng10_3)
            #print('沪深300昨日%s %s 低于支撑位2:%s %s'%(current_price10, zhangdie10,zhicheng10_2,zhangdie10_2))
    else:
        g.jiankong10='1)沪深300:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-低于支撑位1:%s,收复需涨%s\n-若再下跌%s,触及支撑位2:%s'%(g.jiancang_zhangdie10,RSI10_4,vol10_2,prince10_2,current_price10,zhangdie10,zhicheng10_1,zhangdie10_1,zhangdie10_2,zhicheng10_2)
        #print('沪深300昨日%s %s 低于 支撑位1:%s %s'%(current_price10, zhangdie10,zhicheng10_1,zhangdie10_1))
else:
    if current_price10>yali10_1:
        if current_price10>yali10_2:
            if current_price10>yali10_3:
                g.jiankong10='1)沪深300:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位3:%s'%(g.jiancang_zhangdie10,RSI10_4,vol10_2,prince10_2,current_price10,zhangdie10,yali_zhangdie10_3,yali10_3)
                #print('沪深300昨日%s %s 高于压力位3:%s %s'%(current_price10, zhangdie10,yali10_3,yali_zhangdie10_3)) 
            else:
                g.jiankong10='1)沪深300:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位2:%s\n-再涨%s,触及压力位3:%s'%(g.jiancang_zhangdie10,RSI10_4,vol10_2,prince10_2,current_price10,zhangdie10,yali_zhangdie10_2,yali10_2,yali_zhangdie10_3,yali10_3)
                #print('沪深300昨日%s %s 高于压力位2:%s %s'%(current_price10, zhangdie10,yali10_2,yali_zhangdie10_2))
        else:
            g.jiankong10='1)沪深300:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位1:%s\n-再涨%s,触及压力位2:%s'%(g.jiancang_zhangdie10,RSI10_4,vol10_2,prince10_2,current_price10,zhangdie10,yali_zhangdie10_1,yali10_1,yali_zhangdie10_2,yali10_2)
            #print('沪深300昨日%s %s 高于 压力位1:%s %s'%(current_price10, zhangdie10,yali10_1,yali_zhangdie10_1))
    else:
        juli_zhicheng10_1='{:.2%}'.format((current_price10-zhicheng10_1)/zhicheng10_1)
        g.jiankong10='1)沪深300:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩支撑位1:%s\n-再涨%s,触及压力位1:%s'%(g.jiancang_zhangdie10,RSI10_4,vol10_2,prince10_2,current_price10,zhangdie10,juli_zhicheng10_1,zhicheng10_1,yali_zhangdie10_1,yali10_1)
        #print('沪深300昨日%s %s 在支撑位1:%s 上方%s'%(current_price10, zhangdie10,zhicheng10_1,juli_zhicheng10_1))
            
#设置要监控的标2:中证500
g.s11 ='399905.XSHE'
#建仓点位
buy11=6420

#RSI
RSI11=RSI(g.s11, check_date=context.current_dt.date(), N1=20, unit = '1d', include_now = True, fq_ref_date = None)
RSI11_1=RSI11[g.s11]
#RSI10='{:.2f}'.format(RSI10['000300.XSHG'])
#设置超买超卖点,以及提示
RSI11_2=60
RSI11_3=33
#print(RSI10_1)
if(RSI11_1>RSI11_2):
    RSI11_4=',RSI超买!注意风险'
elif(RSI11_1<RSI11_3):
    RSI11_4=',RSI超卖!安全进场'
else:
    RSI11_4=''    

#20天成交均量
vol11= get_bars(g.s11, count=20, unit='1d', fields=['volume'])
vol11_1= vol11['volume'][-1]

ma_vol11 = vol11['volume'].mean()
if(vol11_1>ma_vol11*1.2):
    vol11_2=',明显放量'
elif(vol11_1<ma_vol11*0.8):
    vol11_2=',成交萎缩'
else:
    vol11_2=''    
    
#价格20均线,count=20
price11= get_bars(g.s11, count=20, unit='1d', fields=['close'])
price11_1=price11['close'][-1]

ma_price11 = price11['close'].mean()
ma_zhangdie11=(price11_1-ma_price11)/ma_price11
ma_zhangdie11_1= '{:.2%}'.format(ma_zhangdie11)

if(ma_zhangdie11>0.03):
    prince11_2=',高于20日均价3%+'
elif(ma_zhangdie11<-0.04):
    prince11_2=',低于20日均价4%+'
else:
    prince11_2=''

#设定支撑位,前低位2022.8,前前低位2022.4.26,以疫情2020.3最大支撑位,当前预计最大跌幅-31.9%,分4笔建仓
zhicheng11_1=6145
zhicheng11_2=5333
zhicheng11_3=4185

#设定压力位,前高位2022.7.6为压力位1,前前高位2022.2为压力:2
yali11_1=6548   
yali11_2=6871
yali11_3=7305

close_data11= get_bars(g.s11, count=10, unit='1d', fields=['close'])
current_price11 = close_data11['close'][-1]
current_price11_1 = close_data11['close'][-2]

#涨跌
zhangdie11=(current_price11-current_price11_1)/current_price11_1
zhangdie11= '{:.2%}'.format(zhangdie11)
jiancang_zhangdie11=(current_price11-buy11)/buy11
g.jiancang_zhangdie11='{:.2%}'.format(jiancang_zhangdie11)

#与支撑1、2、3区间幅度
zhangdie11_1=(zhicheng11_1-current_price11)/current_price11
zhangdie11_1='{:.2%}'.format(zhangdie11_1)
zhangdie11_2=(zhicheng11_2-current_price11)/current_price11
zhangdie11_2='{:.2%}'.format(zhangdie11_2)
zhangdie11_3=(zhicheng11_3-current_price11)/current_price11
zhangdie11_3='{:.2%}'.format(zhangdie11_3)

#与压力1、2、3区间幅度
yali_zhangdie11_1=(yali11_1-current_price11)/current_price11
yali_zhangdie11_1='{:.2%}'.format(yali_zhangdie11_1)
yali_zhangdie11_2=(yali11_2-current_price11)/current_price11
yali_zhangdie11_2='{:.2%}'.format(yali_zhangdie11_2)
yali_zhangdie11_3=(yali11_3-current_price11)/current_price11
yali_zhangdie11_3='{:.2%}'.format(yali_zhangdie11_3)

if current_price11<zhicheng11_1:
    if current_price11<zhicheng11_2:
        if current_price11<zhicheng11_3:
            g.jiankong11='2)中证500:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-低于支撑位3:%s,收复需涨%s'%(g.jiancang_zhangdie11,RSI11_4,vol11_2,prince11_2,current_price11,zhangdie11,zhicheng11_3,zhangdie11_3)
            #print('中证500昨日%s %s 低于支撑位3:%s %s'%(current_price11, zhangdie11,zhicheng11_3,zhangdie11_3)) 
        else:
            g.jiankong11='2)中证500:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-低于支撑位2:%s,收复需涨%s\n-若再下跌%s,触及支撑位3:%s'%(g.jiancang_zhangdie11,RSI11_4,vol11_2,prince11_2,current_price11,zhangdie11,zhicheng11_2,zhangdie11_2,zhangdie11_3,zhicheng11_3)
            #print('中证500昨日%s %s 低于支撑位2:%s %s'%(current_price11, zhangdie11,zhicheng11_2,zhangdie11_2))
    else:
        g.jiankong11='2)中证500:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-低于支撑位1:%s,收复需涨%s\n-若再下跌%s,触及支撑位2:%s'%(g.jiancang_zhangdie11,RSI11_4,vol11_2,prince11_2,current_price11,zhangdie11,zhicheng11_1,zhangdie11_1,zhangdie11_2,zhicheng11_2)
        #print('中证500昨日%s %s 低于 支撑位1:%s %s'%(current_price11, zhangdie11,zhicheng11_1,zhangdie11_1))
else:
    if current_price11>yali11_1:
        if current_price11>yali11_2:
            if current_price11>yali11_3:
                g.jiankong11='2)中证500:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位3:%s'%(g.jiancang_zhangdie11,RSI11_4,vol11_2,prince11_2,current_price11,zhangdie11,yali_zhangdie11_3,yali11_3)
                #print('中证500昨日%s %s 高于压力位3:%s %s'%(current_price11, zhangdie11,yali11_3,yali_zhangdie11_3)) 
            else:
                g.jiankong11='2)中证500:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位2:%s\n-再涨%s,触及压力位3:%s'%(g.jiancang_zhangdie11,RSI11_4,vol11_2,prince11_2,current_price11,zhangdie11,yali_zhangdie11_2,yali11_2,yali_zhangdie11_3,yali11_3)
                #print('中证500昨日%s %s 高于压力位2:%s %s'%(current_price11, zhangdie11,yali11_2,yali_zhangdie11_2))
        else:
            g.jiankong11='2)中证500:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位1:%s\n-再涨%s,触及压力位2:%s'%(g.jiancang_zhangdie11,RSI11_4,vol11_2,prince11_2,current_price11,zhangdie11,yali_zhangdie11_1,yali11_1,yali_zhangdie11_2,yali11_2)
            #print('中证500昨日%s %s 高于 压力位1:%s %s'%(current_price11, zhangdie11,yali11_1,yali_zhangdie11_1))
    else:
        juli_zhicheng11_1='{:.2%}'.format((current_price11-zhicheng11_1)/zhicheng11_1)
        g.jiankong11='2)中证500:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩支撑位1:%s\n-再涨%s,触及压力位1:%s'%(g.jiancang_zhangdie11,RSI11_4,vol11_2,prince11_2,current_price11,zhangdie11,juli_zhicheng11_1,zhicheng11_1,yali_zhangdie11_1,yali11_1)
        #print('中证500昨日%s %s 在支撑位1:%s 上方%s'%(current_price11, zhangdie11,zhicheng11_1,juli_zhicheng11_1))
        
#设置要序号12监控的标3:纳斯达克指数,但是不支持,只能用广发纳斯达克C基金代替
g.s12 ='006479.OF'
#建仓点位
buy12=3.6218

#设定支撑位,前低位2022.8,前前低位2022.4.26,以疫情2020.3最大支撑位,当前预计最大跌幅-31.9%,分4笔建仓
zhicheng12_1=3.23
zhicheng12_2=2.19
zhicheng12_3=1.88

#设定压力位,前高位2022.7.6为压力位1,前前高位2022.2为压力:2
yali12_1=4.2801   
yali12_2=4.6387
yali12_3=5

g.df_price12=get_extras('acc_net_value',g.s12,end_date=datetime.datetime.now(),df=False,count=5)
last_price4= g.df_price[s4][-3]

current_price12 = g.df_price12[g.s12][-3]
current_price12_1 = g.df_price12[g.s12][-4]

#涨跌
zhangdie12=(current_price12-current_price12_1)/current_price12_1
zhangdie12= '{:.2%}'.format(zhangdie12)
jiancang_zhangdie12=(current_price12-buy12)/buy12
g.jiancang_zhangdie12='{:.2%}'.format(jiancang_zhangdie12)

#与支撑1、2、3区间幅度
zhangdie12_1=(zhicheng12_1-current_price12)/current_price12
zhangdie12_1='{:.2%}'.format(zhangdie12_1)
zhangdie12_2=(zhicheng12_2-current_price12)/current_price12
zhangdie12_2='{:.2%}'.format(zhangdie12_2)
zhangdie12_3=(zhicheng12_3-current_price12)/current_price12
zhangdie12_3='{:.2%}'.format(zhangdie12_3)

#与压力1、2、3区间幅度
yali_zhangdie12_1=(yali12_1-current_price12)/current_price12
yali_zhangdie12_1='{:.2%}'.format(yali_zhangdie12_1)
yali_zhangdie12_2=(yali12_2-current_price12)/current_price12
yali_zhangdie12_2='{:.2%}'.format(yali_zhangdie12_2)
yali_zhangdie12_3=(yali12_3-current_price12)/current_price12
yali_zhangdie12_3='{:.2%}'.format(yali_zhangdie12_3)

if current_price12<zhicheng12_1:
    if current_price12<zhicheng12_2:
        if current_price12<zhicheng12_3:
            g.jiankong12='3)广发纳斯达克100C:\n-建仓偏离度%s\n-前日收盘:%s,涨幅 %s \n-低于支撑位3:%s,收复需涨%s'%(g.jiancang_zhangdie12,current_price12,zhangdie12,zhicheng12_3,zhangdie12_3)
            #print('中证500昨日%s %s 低于支撑位3:%s %s'%(current_price11, zhangdie11,zhicheng11_3,zhangdie11_3)) 
        else:
            g.jiankong12='3)广发纳斯达克100C:\n-建仓偏离度%s\n-前日收盘:%s,涨幅 %s \n-低于支撑位2:%s,收复需涨%s\n-若再下跌%s,触及支撑位3:%s'%(g.jiancang_zhangdie12,current_price12,zhangdie12,zhicheng12_2,zhangdie12_2,zhangdie12_3,zhicheng12_3)
            #print('中证500昨日%s %s 低于支撑位2:%s %s'%(current_price11, zhangdie11,zhicheng11_2,zhangdie11_2))
    else:
        g.jiankong11='3)广发纳斯达克100C:\n-建仓偏离度%s\n-前日收盘:%s,涨幅 %s \n-低于支撑位1:%s,收复需涨%s\n-若再下跌%s,触及支撑位2:%s'%(g.jiancang_zhangdie12,current_price12,zhangdie12,zhicheng12_1,zhangdie12_1,zhangdie12_2,zhicheng12_2)
        #print('中证500昨日%s %s 低于 支撑位1:%s %s'%(current_price11, zhangdie11,zhicheng11_1,zhangdie11_1))
else:
    if current_price12>yali12_1:
        if current_price12>yali12_2:
            if current_price12>yali12_3:
                g.jiankong12='3)广发纳斯达克100C:\n-建仓偏离度%s\n-前日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位3:%s'%(g.jiancang_zhangdie12,current_price12,zhangdie12,yali_zhangdie12_3,yali12_3)
                #print('中证500昨日%s %s 高于压力位3:%s %s'%(current_price11, zhangdie11,yali11_3,yali_zhangdie11_3)) 
            else:
                g.jiankong12='3)广发纳斯达克100C:\n-建仓偏离度%s\n-前日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位2:%s\n-再涨%s,触及压力位3:%s'%(g.jiancang_zhangdie12,current_price12,zhangdie12,yali_zhangdie12_2,yali12_2,yali_zhangdie12_3,yali12_3)
                #print('中证500昨日%s %s 高于压力位2:%s %s'%(current_price11, zhangdie11,yali11_2,yali_zhangdie11_2))
        else:
            g.jiankong12='3)广发纳斯达克100C:\n-建仓偏离度%s\n-前日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位1:%s\n-再涨%s,触及压力位2:%s'%(g.jiancang_zhangdie12,current_price12,zhangdie12,yali_zhangdie12_1,yali12_1,yali_zhangdie12_2,yali12_2)
            #print('中证500昨日%s %s 高于 压力位1:%s %s'%(current_price11, zhangdie11,yali11_1,yali_zhangdie11_1))
    else:
        juli_zhicheng12_1='{:.2%}'.format((current_price12-zhicheng12_1)/zhicheng12_1)
        g.jiankong12='3)广发纳斯达克100C:\n-建仓偏离度%s\n-前日收盘:%s,涨幅 %s \n-若下跌%s,回踩支撑位1:%s\n-再涨%s,触及压力位1:%s'%(g.jiancang_zhangdie12,current_price12,zhangdie12,juli_zhicheng12_1,zhicheng12_1,yali_zhangdie12_1,yali12_1)
        #print('中证500昨日%s %s 在支撑位1:%s 上方%s'%(current_price11, zhangdie11,zhicheng11_1,juli_zhicheng11_1))
 
#13、设置要监控的标:恒生互联
g.s13 ='513330.XSHG'
#建仓点位
buy13=0.787
#RSI
RSI13=RSI(g.s13, check_date=context.current_dt.date(), N1=20, unit = '1d', include_now = True, fq_ref_date = None)
RSI13_1=RSI13[g.s13]
#RSI10='{:.2f}'.format(RSI10['000300.XSHG'])
#设置超买超卖点,以及提示
RSI13_2=60
RSI13_3=35
#print(RSI10_1)
if(RSI13_1>RSI13_2):
    RSI13_4=',RSI超买!注意风险'
elif(RSI13_1<RSI13_3):
    RSI13_4=',RSI超卖!安全进场'
else:
    RSI13_4=''    

#20天成交均量
vol13= get_bars(g.s13, count=20, unit='1d', fields=['volume'])
vol13_1= vol13['volume'][-1]

ma_vol13 = vol13['volume'].mean()
if(vol13_1>ma_vol13*1.2):
    vol13_2=',明显放量'
elif(vol13_1<ma_vol13*0.8):
    vol13_2=',成交萎缩'
else:
    vol13_2=''    
    
#价格20均线,count=20
price13= get_bars(g.s13, count=20, unit='1d', fields=['close'])
price13_1=price13['close'][-1]

ma_price13 = price13['close'].mean()
ma_zhangdie13=(price13_1-ma_price13)/ma_price13
ma_zhangdie13_1= '{:.2%}'.format(ma_zhangdie13)

if(ma_zhangdie13>0.03):
    prince13_2=',高于20日均价3%+'
elif(ma_zhangdie13<-0.04):
    prince13_2=',低于20日均价4%+'
else:
    prince13_2='' 

#设定支撑位,前低位2022.8,前前低位2022.4,以2022.3最大支撑位,当前预计最大跌幅-21.2%,分4笔建仓
zhicheng13_1=0.477
zhicheng13_2=0.402
zhicheng13_3=0.365

#设定压力位,前高位2022.6为压力位1,前前高位2022.1为压力:2,2021.11为压力位3
yali13_1=0.551   
yali13_2=0.597
yali13_3=0.697

close_data13= get_bars(g.s13, count=10, unit='1d', fields=['close'],)
current_price13 = close_data13['close'][-1]
current_price13_1 = close_data13['close'][-2]

#涨跌
zhangdie13=(current_price13-current_price13_1)/current_price13_1
zhangdie13= '{:.2%}'.format(zhangdie13)
jiancang_zhangdie13=(current_price13-buy13)/buy13
g.jiancang_zhangdie13='{:.2%}'.format(jiancang_zhangdie13)

#与支撑1、2、3区间幅度
zhangdie13_1=(zhicheng13_1-current_price13)/current_price13
zhangdie13_1='{:.2%}'.format(zhangdie13_1)
zhangdie13_2=(zhicheng13_2-current_price13)/current_price13
zhangdie13_2='{:.2%}'.format(zhangdie13_2)
zhangdie13_3=(zhicheng13_3-current_price13)/current_price13
zhangdie13_3='{:.2%}'.format(zhangdie13_3)

#与压力1、2、3区间幅度
yali_zhangdie13_1=(yali13_1-current_price13)/current_price13
yali_zhangdie13_1='{:.2%}'.format(yali_zhangdie13_1)
yali_zhangdie13_2=(yali13_2-current_price13)/current_price13
yali_zhangdie13_2='{:.2%}'.format(yali_zhangdie13_2)
yali_zhangdie13_3=(yali13_3-current_price13)/current_price13
yali_zhangdie13_3='{:.2%}'.format(yali_zhangdie13_3)

if current_price13<zhicheng13_1:
    if current_price13<zhicheng13_2:
        if current_price13<zhicheng13_3:
            g.jiankong13='4)恒生互联:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-低于支撑位3:%s,收复需涨%s'%(g.jiancang_zhangdie13,RSI13_4,vol13_2,prince13_2,current_price13,zhangdie13,zhicheng13_3,zhangdie13_3)
            #print('中证500昨日%s %s 低于支撑位3:%s %s'%(current_price11, zhangdie11,zhicheng11_3,zhangdie11_3)) 
        else:
            g.jiankong13='4)恒生互联:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-低于支撑位2:%s,收复需涨%s\n-若再下跌%s,触及支撑位3:%s'%(g.jiancang_zhangdie13,RSI13_4,vol13_2,prince13_2,current_price13,zhangdie13,zhicheng13_2,zhangdie13_2,zhangdie13_3,zhicheng13_3)
            #print('中证500昨日%s %s 低于支撑位2:%s %s'%(current_price11, zhangdie11,zhicheng11_2,zhangdie11_2))
    else:
        g.jiankong13='4)恒生互联:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-低于支撑位1:%s,收复需涨%s\n-若再下跌%s,触及支撑位2:%s'%(g.jiancang_zhangdie13,RSI13_4,vol13_2,prince13_2,current_price13,zhangdie13,zhicheng13_1,zhangdie13_1,zhangdie13_2,zhicheng13_2)
        #print('中证500昨日%s %s 低于 支撑位1:%s %s'%(current_price11, zhangdie11,zhicheng11_1,zhangdie11_1))
else:
    if current_price13>yali13_1:
        if current_price13>yali13_2:
            if current_price13>yali13_3:
                g.jiankong13='4)恒生互联:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位3:%s'%(g.jiancang_zhangdie13,RSI13_4,vol13_2,prince13_2,current_price13,zhangdie13,yali_zhangdie13_3,yali13_3)
                #print('中证500昨日%s %s 高于压力位3:%s %s'%(current_price11, zhangdie11,yali11_3,yali_zhangdie11_3)) 
            else:
                g.jiankong13='4)恒生互联:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位2:%s\n-再涨%s,触及压力位3:%s'%(g.jiancang_zhangdie13,RSI13_4,vol13_2,prince13_2,current_price13,zhangdie13,yali_zhangdie13_2,yali13_2,yali_zhangdie13_3,yali13_3)
                #print('中证500昨日%s %s 高于压力位2:%s %s'%(current_price11, zhangdie11,yali11_2,yali_zhangdie11_2))
        else:
            g.jiankong13='4)恒生互联:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩压力位1:%s\n-再涨%s,触及压力位2:%s'%(g.jiancang_zhangdie13,RSI13_4,vol13_2,prince13_2,current_price13,zhangdie13,yali_zhangdie13_1,yali13_1,yali_zhangdie13_2,yali13_2)
            #print('中证500昨日%s %s 高于 压力位1:%s %s'%(current_price11, zhangdie11,yali11_1,yali_zhangdie11_1))
    else:
        juli_zhicheng13_1='{:.2%}'.format((current_price11-zhicheng11_1)/zhicheng11_1)
        g.jiankong13='4)恒生互联:\n-建仓偏离度%s%s%s%s\n-昨日收盘:%s,涨幅 %s \n-若下跌%s,回踩支撑位1:%s\n-再涨%s,触及压力位1:%s'%(g.jiancang_zhangdie13,RSI13_4,vol13_2,prince13_2,current_price13,zhangdie13,juli_zhicheng13_1,zhicheng13_1,yali_zhangdie13_1,yali13_1)
        #print('中证500昨日%s %s 在支撑位1:%s 上方%s'%(current_price11, zhangdie11,zhicheng11_1,juli_zhicheng11_1)) 

#邮件正文内容框架    
zhengwen="%s\n\n\n二、昨日两市成交%s亿,环比%s\n%s\n\n%s\n\n%s\n\n%s \n\n\n三、规模指数T-1行情(月涨跌↓) \n%s\n\n----组合涨幅----\n%s \n\n\n四、主动基金T-1走势(月涨跌↓)\n%s\n\n----组合涨幅----\n%s\n\n\n五、风格指数T-1行情(综合排序)\n%s\n\n----对比大盘组合涨幅----\n%s\n\n\n六、行业板块T-1走势(月涨跌↓)\n %s\n\n\n七、美股T-3走势(月涨跌↓)\n %s\n\n\n八、稳债基金T-1走势(月涨跌↓)\n %s\n\n----组合涨幅----\n%s\n\n\n九、偏债基金T-3走势(月涨跌↓)\n %s\n\n----组合涨幅----\n%s\n\n\n十、上月北向资金top10\n %s" % (g.beiwang,g.chengjiaoe15_7,g.chengjiaoe15_8,g.jiankong10,g.jiankong11,g.jiankong12,g.jiankong13,g.df1_1,g.df1_2,g.df8_1,g.df8_2,g.df2,g.df1_2,g.df3_1,g.df4_1,g.df5_1,g.df5_2,g.df6_1,g.df6_2,g.df7_2)

def send_qq_email(subject,message):
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    #发送图片
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    from email.utils import parseaddr, formataddr
    
    ## 发送邮件
    sender = '303473726@qq.com' #发送的邮箱
    receiver = '303473726@qq.com' #要接受的邮箱(注:测试中发送其他邮箱会提示错误)
    smtpserver = 'smtp.qq.com'
    username = '303473726@qq.com' #你的邮箱账号
    passwor = 'fcj' #你的邮箱授权码。一个16位字符串

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

    server = smtplib.SMTP_SSL('smtp.qq.com')
    try :
        #server.connect() # ssl无需这条
        server.login(username, password) # 登陆
        server.sendmail(sender, receiver, msg.as_string()) #发送
        print('邮件发送成功')
    except:
        print('邮件发送失败')
    server.quit() 

#发送至邮箱时间由该程序的运行时间控制
send_qq_email(subject='【Daily】Summary push', message=zhengwen)

开盘时运行函数

def market_open(context):
print(‘###开盘运行’)

收盘后运行函数

def after_market_close(context):
print(‘###收盘运行’)

#send_qq_email(subject='【周】行情报告', message=('昨日大盘涨跌 %s' % g.result1,'昨日大盘涨跌 %s' % g.result2))

#log.info('一天结束')
#log.info('############################一天结束##################################')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值