def query_rt_wbottom(): print('in query_rt_wbottom') myconf = conf.CConf(str_conf_path) myconf.ReadConf() db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') db.connect_db() today = GetToday() list_ret = db.query_today_rt_strategy(today) db.disconnect_db() if list_ret is None: list_ret=('代码','探测时间') ################## 分页 ###################### req_page = request.args.get("page", 1) print('query_chipconcent ... req_page=', req_page) pager_obj = Pagination(req_page, len(list_ret), request.path, request.args, per_page_count=20) print(request.args) #根据分页的参数,截取部分数据显示 args_ret = list_ret[pager_obj.start:pager_obj.end] str_html = pager_obj.page_html() print(str_html) return render_template('query_realtime_wbottom.html', rt_value=args_ret, html=str_html)
def __init__(self, str_conf_path, log): self.log = log # 只处理数据,否则更新实时数据到数据库 self.just_process = False #更新一部分最新的k线数据;否则全部更新 self.b_updata_part = False # 测试获取多少只股票 self.stockCnt = 3651 # 从第几支股票开始 self.stockStart = 0 self.conf = conf.CConf(str_conf_path) self.work_path = os.getcwd() # 每次取200只,休眠x秒 #self.waitTime = 65 try: self.db = dbmgr.CDBMgr(self.conf.db_host, self.conf.db_username, self.conf.db_pwd, 'kdata') self.re = redis.Redis(host='127.0.0.1', port=6379, db=0) except Exception as e: print(e) log_h = os.path.basename(__file__) + ":" + __name__ + ":" + str( sys._getframe().f_lineno) + ": " self.log.error(log_h + str(e)) self.init()
def __init__(self, str_conf_path, log): self.log = log #self.name = self.__class__.__name__ #获取排行榜中多少条热点概念 myconf = conf.CConf(str_conf_path) myconf.ReadConf() #redis key值 self.key_start_day = 'key_w_start_day' self.key_end_day = 'key_w_end_day' self.key_stock_basic = 'key_stock_basic' self.key_today = 'key_today' self.cur_open = 0 self.cur_close = 0 self.cur_high = 0 self.cur_low = 0 self.db = None self.re = None try: self.db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') self.re = redis.Redis(host='127.0.0.1', port=6379, db=0) except Exception as e: print(e) log_h = os.path.basename(__file__) + ":" + __name__ + ":" + str(sys._getframe().f_lineno) + ": " self.log.error(log_h+str(e)) self.wbottom = wbottom.CWBotton(self.db, self.log)
def __init__(self, str_conf_path, log): #配置文件 self.myconf = conf.CConf(str_conf_path) self.myconf.ReadConf() self.log = log self.scheduler = myScheduler() self.rt_hotspot = rt_hotspot.CRT_Hotspot(str_conf_path, log) self.rt_quotes = rt_quotes.CRT_Quotes(str_conf_path, log) self.dataservice = dataservice.CDataServiceMysql(str_conf_path, log) self.rt_chipconcent = rt_chipconcent.CRT_ChipConcent( str_conf_path, log) self.setting = setting.CSetting(str_conf_path, log) self.rt_wbottom = rt_wbottom.CRT_WBottom(str_conf_path, log) self.rt_hottrace = rt_hottrace.CRT_HotTrace(str_conf_path, log) self.re = None try: self.re = redis.Redis(host='127.0.0.1', port=6379, db=0) except Exception as e: print(e) log_h = os.path.basename(__file__) + ":" + __name__ + ":" + str( sys._getframe().f_lineno) + ": " self.log.error(log_h + str(e)) #设置系统参数 self.setting.set_config()
def query_chipconcent(): print('in query_chipconcent') myconf = conf.CConf(str_conf_path) myconf.ReadConf() db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') db.connect_db() #当天日期 now_time = datetime.datetime.now() today = now_time.strftime('%Y-%m-%d') #today = '2019-08-16' list_ret = db.query_chipconcent(today) db.disconnect_db() if list_ret is None: list_ret=('代码','名称','间隔','time','day','num') ################## 分页 ###################### req_page = request.args.get("page", 1) print('query_chipconcent ... req_page=', req_page) pager_obj = Pagination(req_page, len(list_ret), request.path, request.args, per_page_count=20) print(request.args) #根据分页的参数,截取部分数据显示 args_ret = list_ret[pager_obj.start:pager_obj.end] str_html = pager_obj.page_html() print(str_html) return render_template('query_chipconcent.html', rt_value=args_ret, html=str_html)
def __init__(self, str_conf_path, log): self.log = log #self.name = self.__class__.__name__ myconf = conf.CConf(str_conf_path) myconf.ReadConf() self.db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') print('CRT_Hotspot ... ', self.db)
def __init__(self, str_conf_path, log): self.log = log self.db = None self.myconf = conf.CConf(str_conf_path) self.myconf.ReadConf() try: self.db = dbmgr.CDBMgr(self.myconf.db_host, self.myconf.db_username, self.myconf.db_pwd, 'kdata') self.db.connect_db() except Exception as e: print(e) log_h = os.path.basename(__file__) + ":" + __name__ + ":" + str( sys._getframe().f_lineno) + ": " self.log.error(log_h + str(e))
def statistics(): ############################################################################################## # 配置文件路径 cur_path = os.getcwd() print(cur_path) str_conf_path = cur_path + '/../../conf/conf.ini' # 日志唯一 g_conf = conf.CConf(str_conf_path) filename_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S') log_filename = cur_path + '/../../' + g_conf.log_dir + '/backtest_' + filename_time + '.log' log = tools.CLogger(g_conf.app_name, log_filename, 1).getLogger() ############################################################################################## backtest = CBackTestBycode(str_conf_path, log) backtest.strategy.statistics()
def main(): # 配置文件路径 cur_path = os.getcwd() print(cur_path) str_conf_path = cur_path + '/../../conf/conf.ini' # 日志唯一 g_conf = conf.CConf(str_conf_path) filename_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S') log_filename = cur_path + '/' + g_conf.log_dir + '/../../tide_system_' + filename_time + '.log' g_log = tools.CLogger(g_conf.app_name, log_filename, 1).getLogger() dataservice = CDataServiceMysql(str_conf_path, g_log) dataservice.aps_dataservice_update() # 更新的起始时间 '''str_start_day = '20171201'
def __init__(self, str_conf_path, log): self.log = log #获取排行榜中多少条热点概念 self.top_ChipC_num = 20 self.conf = conf.CConf(str_conf_path) self.conf.ReadConf() self.db = None self.re = None try: self.db = dbmgr.CDBMgr(self.conf.db_host, self.conf.db_username, self.conf.db_pwd, 'kdata') self.re = redis.Redis(host='127.0.0.1', port=6379, db=0) except Exception as e: print(e) log_h = os.path.basename(__file__) + ":" + __name__ + ":" + str( sys._getframe().f_lineno) + ": " self.log.error(log_h + e)
def query_bt_w(): print('in query_bt_w') myconf = conf.CConf(str_conf_path) myconf.ReadConf() db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') db.connect_db() list_ret = db.query_rangebacktest_wbottom('20190101', GetToday()) db.disconnect_db() ################## 分页 ###################### req_page = request.args.get("page", 1) print('query_bt_w ... req_page=', req_page) pager_obj = Pagination(req_page, len(list_ret), request.path, request.args, per_page_count=20) print(request.args) #根据分页的参数,截取部分数据显示 args_ret = list_ret[pager_obj.start:pager_obj.end] str_html = pager_obj.page_html() print(str_html) return render_template('query_backtest_wbotton.html', wb_value=args_ret, html=str_html)
def config(): print('in config') myconf = conf.CConf(str_conf_path) myconf.ReadConf() #起始日期 start_year = myconf.s_bt_startday[0:4] start_mouth = myconf.s_bt_startday[4:6] start_day = myconf.s_bt_startday[6:8] start = start_year+'-'+start_mouth+'-'+start_day print('start:'+start) #终止日期 end_year = myconf.s_bt_endday[0:4] end_mouth = myconf.s_bt_endday[4:6] end_day = myconf.s_bt_endday[6:8] end = end_year+'-'+end_mouth+'-'+end_day print('end:' + end) return render_template('conf.html')
def __init__(self, str_conf_path, log): #cur_time = datetime.datetime.now() #log_filename = datetime.datetime.strftime(cur_time, '%Y%m%d_%H%M%S') #self.log_name = 'log/limitconcept'+log_filename self.conf = conf.CConf(str_conf_path) self.log = log self.db = None self.re = None try: self.db = dbmgr.CDBMgr(self.conf.db_host, self.conf.db_username, self.conf.db_pwd, 'kdata') self.re = redis.Redis(host='127.0.0.1', port=6379, db=0) except Exception as e: print(e) log_h = os.path.basename(__file__) + ":" + __name__ + ":" + str( sys._getframe().f_lineno) + ": " self.log.error(log_h + e) self.__Init()
def process(process_cnt, cur_idx): print(cur_idx) ############################################################################################## # 配置文件路径 cur_path = os.getcwd() print(cur_path) str_conf_path = cur_path + '/../../conf/conf.ini' # 日志唯一 g_conf = conf.CConf(str_conf_path) filename_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S') log_filename = cur_path + '/../../' + g_conf.log_dir + '/backtest_' + filename_time + '.log' log = tools.CLogger(g_conf.app_name, log_filename, 1).getLogger() ############################################################################################## backtest = CBackTestBycode(str_conf_path, log) #回测时间范围:起始日期到最近一个交易日 start_day = '20180101' backtest.process(start_day, process_cnt, cur_idx)
def __init__(self, str_conf_path, log): #self.name = self.__class__.__name__ #获取排行榜中多少条热点概念 self.top_consept_num = 20 self.top_trade_num = 20 myconf = conf.CConf(str_conf_path) myconf.ReadConf() self.log = log self.db = None self.re = None self.pBaseInfo = baseinfo.CBaseinfo() try: self.db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') self.re = redis.Redis(host='127.0.0.1', port=6379, db=0) self.pBaseInfo.read_excel() except Exception as e: print(e) log_h = os.path.basename(__file__) + ":" + __name__ + ":" + str( sys._getframe().f_lineno) + ": " self.log.error(log_h + str(e))
def query_rt_hottrade(): print('in query_rt_hottrade') myconf = conf.CConf(str_conf_path) myconf.ReadConf() db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') db.connect_db() list_ret = db.query_allhottrade() db.disconnect_db() if list_ret is None: list_ret=('行业','0','000') ################## 分页 ###################### req_page = request.args.get("page", 1) print('query_rt_hottrade ... req_page=', req_page) pager_obj = Pagination(req_page, len(list_ret), request.path, request.args, per_page_count=20) print(request.args) #根据分页的参数,截取部分数据显示 args_ret = list_ret[pager_obj.start:pager_obj.end] str_html = pager_obj.page_html() print(str_html) return render_template('query_realtime_hottrade.html', rt_value=args_ret, html=str_html)
def GetDB(): myconf = conf.CConf(str_conf_path) myconf.ReadConf() db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') db.connect_db() return db
import os import redis import pickle #任务调度,阻塞 #from flask_apscheduler import APScheduler as myScheduler #from apscheduler.schedulers.background import BackgroundScheduler as myScheduler app = Flask(__name__) #配置文件路径 cur_path = os.getcwd() print(cur_path) str_conf_path = cur_path + '/conf/conf.ini' #日志唯一 g_conf = conf.CConf(str_conf_path) filename_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S') log_filename = cur_path+'/'+g_conf.log_dir+'/tide_system_'+filename_time+'.log' g_log = tools.CLogger(g_conf.app_name, log_filename, 1).getLogger() #任务调度 schedulermgr = schedulermgr.CSchedulerMgr(str_conf_path, g_log) schedulermgr.start() def GetDB(): myconf = conf.CConf(str_conf_path) myconf.ReadConf() db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') db.connect_db() return db
def query_rt_hotconspt_one(conspt): print('query_rt_hotconspt_one...', conspt) #数据 myconf = conf.CConf(str_conf_path) myconf.ReadConf() db = dbmgr.CDBMgr(myconf.db_host, myconf.db_username, myconf.db_pwd, 'kdata') db.connect_db() trade_day = db.query_last_tradeday(10) #trade_day = pd.DataFrame(list(result), columns=['trade_day']) # 加载股票概念 pBaseInfo = baseinfo.CBaseinfo() pBaseInfo.read_excel() #conspt_df = pd.DataFrame(columns=['date', 'count']) list_date = list() list_count = list() for day in trade_day: codes = db.query_limit(day[0]) print('limit num=', len(codes)) count = 0 #遍历所有code for code in codes: #去除.SZ .SH的后缀 str_code = code[0][0:6] my_stock_info = pBaseInfo.get_stock_info(str_code) if my_stock_info is None: print(code, ' is not exist!aps_hotspot') continue consepts = my_stock_info.get_conseption() #查询的概念是否在list中 if conspt in consepts: count = count + 1 list_date.append(day[0]) list_count.append(count) print(day[0]) ''' list_date = ['20190813', '20190814', '20190815', '20190816', '20190819'] list_count = [8, 8, 6, 11, 19] d = {'date': list_date, 'count': list_count} conspt_df = pd.DataFrame(d) print(conspt_df)''' db.disconnect_db() #############################################绘图 #中文乱码问题 #myfont = FontProperties(fname=r'/smb/share/hdf5test/venv/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/simhei.ttf') #mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['font.sans-serif'] = ['simhei'] mpl.rcParams['font.family'] = 'sans-serif' mpl.rcParams['axes.unicode_minus'] = False # 生成figure对象,相当于准备一个画板 fig = plt.figure(figsize=(8, 3)) # 生成axis对象,相当于在画板上准备一张白纸,111,11表示只有一个表格,第3个1,表示在第1个表格上画图 ax = fig.add_subplot(111) plt.title(conspt) plt.xlabel(u'交易日') plt.ylabel(u'涨停数量') #将字符串的日期,转换成日期对象 xs = [datetime.datetime.strptime(d, '%Y%m%d').date() for d in list_date] #日期对象作为参数设置到横坐标,并且使用list_date中的字符串日志作为对象的标签(别名) #x坐标的刻度值 ar_xticks = np.arange(1, len(list_date)+1, step=1) plt.xticks(ar_xticks, list_date, rotation=45, fontsize=10) plt.yticks(np.arange(0, 30, step=2), fontsize=10) ax.plot(ar_xticks, list_count, color='r') #下方图片显示不完整的问题 plt.tight_layout() #在点阵上方标明数值 for x, y in zip(ar_xticks, list_count): plt.text(x, y + 0.3, str(y), ha='center', va='bottom', fontsize=10) #fmt = mdates.DateFormatter('%Y%m%D') #xs = [datetime.datetime.strptime(d, '%Y%m%d').date() for d in conspt_df['date']] #plt.plot(xs, conspt_df['count'], 'o-') #plt.savefig('ttt.png') # figure 保存为二进制文件 buffer = BytesIO() plt.savefig(buffer) plot_data = buffer.getvalue() # 将matplotlib图片转换为HTML imb = base64.b64encode(plot_data) # 对plot_data进行编码 ims = imb.decode() imd = "data:image/png;base64," + ims return render_template('query_realtime_hotconspt_one.html', img=imd)