利用量化平台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('############################一天结束##################################')