def _dividend_ori_data(self, share_id, from_table, to_table, start_time, compare=">", yesterday_close=0): ori_data = self._get_daily_info(share_id, from_table, start_time, compare) if 0 == len(ori_data): return 0 if ori_data[0][6] == yesterday_close: return 0 ex_dividend_ori = [] pre_div_value = 1 for item in ori_data: if 0 == yesterday_close: ex_dividend_ori.append(item) yesterday_close = item[6] continue if len(ex_dividend_ori) > 0: yesterday_close = ex_dividend_ori[-1][6] ori_close = item[2] if ori_close == 0 or yesterday_close == 0: div_value = pre_div_value else: if yesterday_close == ori_close: ex_dividend_ori.append(item) continue div_value = yesterday_close / ori_close pre_div_value = div_value ex_dividend_ori.append([ item[0], item[1], item[2] * div_value, item[3] * div_value, item[4] * div_value, item[5] * div_value, item[6] * div_value, item[7], item[8], item[9] / div_value, item[10] ]) stock_conn_manager_obj = stock_conn_manager() conn = stock_conn_manager_obj.get_conn(share_id) if from_table != to_table: conn.insert_data(to_table, self._table_keys, ex_dividend_ori) else: for info_value in ex_dividend_ori: infos = {} for index in range(len(self._table_keys)): infos[self._table_keys[index]] = info_value[index] conn.insert_onduplicate(to_table, infos, ["time"]) conn.insert_onduplicate(to_table, { "close_ma5": 0, "time": ex_dividend_ori[-1][0] }, ["time"]) last_yesterday_close = ex_dividend_ori[-1][6] return last_yesterday_close
def _get_daily_info(self, share_id, table_name, start_time, compare): stock_conn_manager_obj = stock_conn_manager() conn_name = stock_conn_manager_obj.get_conn_name(share_id) data = fetch_data.get_data( fetch_data.select_db(conn_name, table_name, self._table_keys, {"time": [start_time, compare]}, extend="order by time desc")) return data
def _bak_single_market_maker_info(self, share_id, daily_data): daily_data_list = [] has_between_11_30_and_13_00 = False after_15_00 = False keys_list = [] for item in daily_data: item_list = list(item) date_str = item[0] today_11_30 = date_str[:date_str.find(" ")] + " 11:30:00" today_13_00 = date_str[:date_str.find(" ")] + " 13:00:00" today_15_00 = date_str[:date_str.find(" ")] + " 15:00:00" today_11_30_int = time.mktime( time.strptime(today_11_30, '%Y-%m-%d %H:%M:%S')) today_13_00_int = time.mktime( time.strptime(today_13_00, '%Y-%m-%d %H:%M:%S')) today_15_00_int = time.mktime( time.strptime(today_15_00, '%Y-%m-%d %H:%M:%S')) date_int = time.mktime(time.strptime(date_str, '%Y-%m-%d %H:%M:%S')) if date_int >= today_11_30_int and date_int < today_13_00_int: if has_between_11_30_and_13_00: continue else: has_between_11_30_and_13_00 = True if date_int >= today_15_00_int: if after_15_00: continue else: after_15_00 = True if date_int in keys_list: continue else: keys_list.append(date_int) item_list[0] = date_int daily_data_list.append(item_list) keys_array = [ "time", "price", "up_percent", "market_maker_net_inflow", "market_maker_net_inflow_per", "huge_inflow", "huge_inflow_per", "large_inflow", "large_inflow_per", "medium_inflow", "medium_inflow_per", "small_inflow", "small_inflow_per" ] share_market_maker_table_name = "market_maker_detail_" + share_id self._create_table_if_not_exist(share_id, share_market_maker_table_name) stock_conn_manager_obj = stock_conn_manager() conn = stock_conn_manager_obj.get_conn(share_id) conn.insert_data(share_market_maker_table_name, keys_array, daily_data_list)
def _get_start_time(self, share_id, table_name, ma_empty_start_time): stock_conn_manager_obj = stock_conn_manager() conn_name = stock_conn_manager_obj.get_conn_name(share_id) last_time = fetch_data.get_data(fetch_data.select_db(conn_name, table_name, ["time"], {"time":[ma_empty_start_time, "<="]}, extend="order by time desc limit 180")) if len(last_time) > 0: last_day = last_time[-1][0] tz = pytz.timezone('Asia/Shanghai') last_day_obj = datetime.datetime.fromtimestamp(last_day, tz) time_str = last_day_obj.strftime("%Y%m%d") return time.mktime(time.strptime(time_str, '%Y%m%d')) else: return ma_empty_start_time
def _get_ex_dividend_last_time(self, share_id, table_name): stock_conn_manager_obj = stock_conn_manager() conn_name = stock_conn_manager_obj.get_conn_name(share_id) data = fetch_data.get_data( fetch_data.select_db(conn_name, table_name, ["time"], {}, extend="order by time desc limit 1")) if len(data) > 0: last_day = data[0][0] return int(last_day) else: return 0
def _get_close_volume(self, share_id, table_name, start_time): stock_conn_manager_obj = stock_conn_manager() conn_name = stock_conn_manager_obj.get_conn_name(share_id) data = fetch_data.get_data(fetch_data.select_db(conn_name, table_name, ["time", "today_close", "volume"], {"time":[start_time, ">="]})) time_list = [] close_list = [] volume_list = [] for item in data: time_int = item[0] close = item[1] volume = item[2] time_list.append(time_int) close_list.append(close) volume_list.append(volume) return {"time":time_list, "close":close_list, "volume":volume_list}
def _get_start_time(self, share_id, table_name): stock_conn_manager_obj = stock_conn_manager() conn_name = stock_conn_manager_obj.get_conn_name(share_id) last_time = fetch_data.get_data( fetch_data.select_db(conn_name, table_name, ["time"], {}, extend="order by time desc limit 1")) if len(last_time) > 0: last_day = last_time[0][0] tz = pytz.timezone('Asia/Shanghai') last_day_obj = datetime.datetime.fromtimestamp(last_day, tz) while True: next_day_obj = last_day_obj + datetime.timedelta(days=1) if next_day_obj.weekday() < 5: break last_day_obj = next_day_obj time_str = next_day_obj.strftime("%Y%m%d") else: time_str = "19900101" return time.mktime(time.strptime(time_str, '%Y%m%d'))
def _save_data(self, share_id, table_name, data): into_db_columns = [ "time", "time_str", "today_close", "today_high", "today_low", "today_open", "yesterday_close", "pchg", "turnover_rate", "volume", "turnover" ] columns_count = len(into_db_columns) for item in data: if len(item) != columns_count: LOG_INFO("%s length is not match for column length %d" % (str(item), columns_count)) continue del item if 0 == len(data): return stock_conn_manager_obj = stock_conn_manager() conn = stock_conn_manager_obj.get_conn(share_id) conn.insert_data(table_name, into_db_columns, data)
def _get_average_info(self, share_id, table_name, period = 0): stock_conn_manager_obj = stock_conn_manager() conn_name = stock_conn_manager_obj.get_conn_name(share_id) periods = [5, 10, 20, 30, 60, 120] types = ["close_ma", "volume_ma"] columns = ["time", "today_close", "today_high", "today_low", "today_open", "yesterday_close", "pchg", "turnover_rate", "volume", "turnover"] for type_item in types: for period_item in periods: column_name = "%s%d" % (type_item, period_item) columns.append(column_name) extend_str = "order by time desc" if period > 0: extend_str = "%s limit %d" % (extend_str, period) data= fetch_data.get_data(fetch_data.select_db(conn_name, table_name, columns, {}, extend=extend_str)) infos = [] for data_item in data: info = {} for index in range(len(columns)): info[columns[index]] = data_item[index] infos.insert(0, info) return infos
def _bak_single_market_maker_info(self, share_id, daily_data): daily_data_list = [] has_between_11_30_and_13_00 = False after_15_00 = False keys_list = [] for item in daily_data: item_list = list(item) date_str = item[-2] + " " + item[-1] today_11_30 = date_str[:date_str.find(" ")] + " 11:30:00" today_13_00 = date_str[:date_str.find(" ")] + " 13:00:00" today_15_00 = date_str[:date_str.find(" ")] + " 15:00:00" today_11_30_int = time.mktime( time.strptime(today_11_30, '%Y-%m-%d %H:%M:%S')) today_13_00_int = time.mktime( time.strptime(today_13_00, '%Y-%m-%d %H:%M:%S')) today_15_00_int = time.mktime( time.strptime(today_15_00, '%Y-%m-%d %H:%M:%S')) date_int = time.mktime(time.strptime(date_str, '%Y-%m-%d %H:%M:%S')) if date_int >= today_11_30_int and date_int < today_13_00_int: if has_between_11_30_and_13_00: continue else: has_between_11_30_and_13_00 = True if date_int >= today_15_00_int: if after_15_00: continue else: after_15_00 = True if date_int in keys_list: continue else: keys_list.append(date_int) item_list.insert(0, date_int) del item_list[-1] del item_list[-1] daily_data_list.append(item_list) keys_array = [ "time", "today_open", "yesterday_close", "cur", "today_high", "today_low", "compete_buy_price", "compete_sale_price", "trade_num", "trade_price", "buy_1_num", "buy_1_price", "buy_2_num", "buy_2_price", "buy_3_num", "buy_3_price", "buy_4_num", "buy_4_price", "buy_5_num", "buy_5_price", "sale_1_num", "sale_1_price", "sale_2_num", "sale_2_price", "sale_3_num", "sale_3_price", "sale_4_num", "sale_4_price", "sale_5_num", "sale_5_price" ] share_trade_info_table_name = "trade_info_detail_" + share_id self._create_table_if_not_exist(share_id, share_trade_info_table_name) stock_conn_manager_obj = stock_conn_manager() conn = stock_conn_manager_obj.get_conn(share_id) conn.insert_data(share_trade_info_table_name, keys_array, daily_data_list)
def _create_table_if_not_exist(self, share_id, table_name): stock_conn_manager_obj = stock_conn_manager() conn_name = stock_conn_manager_obj.get_conn_name(share_id) prepare_table_obj = prepare_table(conn_name, "trade_info") prepare_table_obj.prepare(table_name)
def _save_data(self, share_id, table_name, data): if len(data) < 2: return stock_conn_manager_obj = stock_conn_manager() conn = stock_conn_manager_obj.get_conn(share_id) conn.update(table_name, data, ["time"])