Example #1
0
    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
Example #2
0
 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)
Example #4
0
 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
Example #5
0
 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
Example #6
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}
Example #7
0
 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'))
Example #8
0
    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)
Example #9
0
    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)
Example #12
0
 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"])