Beispiel #1
0
    def filter_stock(self, want_up=True, want_calc_sum = False):
        filter_func = (lambda p_day:p_day.change >0) if want_up else (lambda p_day: p_day.change<0)
        want_days = list(filter(filter_func, self.stock_dict.values()))

        if not want_calc_sum:
            return want_days

        change_sum = 0.0000
        for day in want_days:
            change_sum += day.change
        return change_sum
Beispiel #2
0
def filter_stock(stock_array_dict, want_up=True, want_calc_sum=False):
    if not isinstance(stock_array_dict, OrderedDict):
        raise TypeError('stock_array_dict must be OrderedDict!')
    
    # python中的三目表达式的写法
    filter_func = (lambda day: day.change > 0) if want_up else (lambda day: day.change < 0)
    # 使用filter_func做筛选函数
    want_days = list(filter(filter_func, stock_array_dict.values()))
    
    if not want_calc_sum:
        return want_days
    
    # 需要计算涨跌幅和
    change_sum = 0.0
    for day in want_days:
        change_sum += day.change
    return change_sum
Beispiel #3
0
Datei: c2.py Projekt: 3774257/abu
    def filter_stock(stock_array_dict, want_up=True, want_calc_sum=False):
        if not isinstance(stock_array_dict, OrderedDict):
            raise TypeError('stock_array_dict must be OrderedDict!')

        # python中的三目表达式的写法
        filter_func = (lambda p_day: p_day.change > 0) if want_up else (lambda p_day: p_day.change < 0)
        # 使用filter_func做筛选函数
        want_days = list(filter(filter_func, stock_array_dict.values()))

        if not want_calc_sum:
            return want_days

        # 需要计算涨跌幅和
        change_sum = 0.0
        for day in want_days:
            change_sum += day.change
        return change_sum
Beispiel #4
0
    def filter_stock(self, want_up=True, want_calc_sum=False):
        """
        筛选结果子集
        :param want_up: 是否筛选上涨
        :param want_calc_sum: 是否计算涨跌和
        :return:
        """
        # Python中的三目表达式的写法
        filter_func = (lambda p_day: p_day.change > 0) if want_up else (
            lambda p_day: p_day.change < 0)
        # 使用filter_func做筛选函数
        want_days = list(filter(filter_func, self.stock_dict.values()))

        if not want_calc_sum:
            return want_days

        # 需要计算涨跌幅和
        change_sum = 0.0
        for day in want_days:
            change_sum += day.change
        return change_sum
Beispiel #5
0
Datei: c2.py Projekt: 3774257/abu
    def filter_stock(self, want_up=True, want_calc_sum=False):
        """
        筛选结果子集
        :param want_up: 是否筛选上涨
        :param want_calc_sum: 是否计算涨跌和
        :return:
        """
        # Python中的三目表达式的写法
        filter_func = (lambda p_day: p_day.change > 0) if want_up else (
            lambda p_day: p_day.change < 0)
        # 使用filter_func做筛选函数
        want_days = list(filter(filter_func, self.stock_dict.values()))

        if not want_calc_sum:
            return want_days

        # 需要计算涨跌幅和
        change_sum = 0.0
        for day in want_days:
            change_sum += day.change
        return change_sum
Beispiel #6
0
Datei: c2.py Projekt: fuimaz/abu
def sample_223(show=True):
    """
    2.2.3 高阶函数
    :return:
    """
    stock_dict = sample_212(show=False)

    show_func = print if show else lambda a: a

    # 将字符串的的价格通过列表推导式显示转换为float类型
    # 由于stock_dict是OrderedDict所以才可以直接
    # 使用stock_dict.values()获取有序日期的收盘价格
    price_float_array = [float(price_str) for price_str in stock_dict.values()]
    # 通过将时间平移形成两个错开的收盘价序列,通过zip打包成为一个新的序列,
    # 通过[:-1]:从第0个到倒数第二个,[1:]:从第一个到最后一个 错开形成相邻
    # 组成的序列每个元素为相邻的两个收盘价格
    pp_array = [(price1, price2) for price1, price2 in zip(
        price_float_array[:-1], price_float_array[1:])]
    show_func(pp_array)
    # list for python3
    change_array = list(
        map(lambda pp: reduce(lambda a, b: round((b - a) / a, 3), pp),
            pp_array))
    # list insert插入数据,将第一天的涨跌幅设置为0
    change_array.insert(0, 0)
    show_func(change_array)

    price_str = '30.14, 29.58, 26.36, 32.56, 32.82'
    price_str = price_str.replace(' ', '')
    price_array = price_str.split(',')

    date_base = 20170118
    date_array = [str(date_base + ind) for ind, _ in enumerate(price_array)]

    # 使用namedtuple重新构建数据结构
    stock_namedtuple = namedtuple('stock', ('date', 'price', 'change'))
    # 通过zip分别从date_array,price_array,change_array拿数据组成
    # stock_namedtuple然后以date做为key组成OrderedDict
    stock_dict = OrderedDict(
        (date, stock_namedtuple(date, price, change))
        for date, price, change in zip(date_array, price_array, change_array))
    show_func(stock_dict)
    # list for python3
    up_days = list(filter(lambda day: day.change > 0, stock_dict.values()))
    show_func(up_days)

    def filter_stock(stock_array_dict, want_up=True, want_calc_sum=False):
        if not isinstance(stock_array_dict, OrderedDict):
            raise TypeError('stock_array_dict must be OrderedDict!')

        # python中的三目表达式的写法
        filter_func = (lambda p_day: p_day.change > 0) if want_up else (
            lambda p_day: p_day.change < 0)
        # 使用filter_func做筛选函数
        want_days = list(filter(filter_func, stock_array_dict.values()))

        if not want_calc_sum:
            return want_days

        # 需要计算涨跌幅和
        change_sum = 0.0
        for day in want_days:
            change_sum += day.change
        return change_sum

    # 全部使用默认参数
    show_func('所有上涨的交易日:{}'.format(filter_stock(stock_dict)))
    # want_up=False
    show_func('所有下跌的交易日:{}'.format(filter_stock(stock_dict, want_up=False)))
    # 计算所有上涨的总会
    show_func('所有上涨交易日的涨幅和:{}'.format(
        filter_stock(stock_dict, want_calc_sum=True)))
    # 计算所有下跌的总会
    show_func('所有下跌交易日的跌幅和:{}'.format(
        filter_stock(stock_dict, want_up=False, want_calc_sum=True)))
    return stock_dict
Beispiel #7
0
# In[27]:


# 使用namedtuple重新构建数据结构
stock_namedtuple = namedtuple('stock', ('date', 'price', 'change'))
# 通过zip分别从date_array,price_array,change_array拿数据组成
# stock_namedtuple然后以date做为key组成OrderedDict
stock_dict = OrderedDict((date, stock_namedtuple(date, price, change)) for date, price, change in zip(date_array, price_array, change_array))
stock_dict


# In[28]:


# list(filter) for python3 配合 six.moves.filter for python3
up_days = list(filter(lambda day: day.change > 0, stock_dict.values()))
up_days


# In[29]:


def filter_stock(stock_array_dict, want_up=True, want_calc_sum=False):
    if not isinstance(stock_array_dict, OrderedDict):
        raise TypeError('stock_array_dict must be OrderedDict!')
    
    # python中的三目表达式的写法
    filter_func = (lambda day: day.change > 0) if want_up else (lambda day: day.change < 0)
    # 使用filter_func做筛选函数
    want_days = list(filter(filter_func, stock_array_dict.values()))
    
Beispiel #8
0
Datei: c2.py Projekt: 3774257/abu
def sample_223(show=True):
    """
    2.2.3 高阶函数
    :return:
    """
    stock_dict = sample_212(show=False)

    show_func = print if show else lambda a: a

    # 将字符串的的价格通过列表推导式显示转换为float类型
    # 由于stock_dict是OrderedDict所以才可以直接
    # 使用stock_dict.values()获取有序日期的收盘价格
    price_float_array = [float(price_str) for price_str in stock_dict.values()]
    # 通过将时间平移形成两个错开的收盘价序列,通过zip打包成为一个新的序列,
    # 通过[:-1]:从第0个到倒数第二个,[1:]:从第一个到最后一个 错开形成相邻
    # 组成的序列每个元素为相邻的两个收盘价格
    pp_array = [(price1, price2) for price1, price2 in zip(price_float_array[:-1], price_float_array[1:])]
    show_func(pp_array)
    # list for python3
    change_array = list(map(lambda pp: reduce(lambda a, b: round((b - a) / a, 3), pp), pp_array))
    # list insert插入数据,将第一天的涨跌幅设置为0
    change_array.insert(0, 0)
    show_func(change_array)

    price_str = '30.14, 29.58, 26.36, 32.56, 32.82'
    price_str = price_str.replace(' ', '')
    price_array = price_str.split(',')

    date_base = 20170118
    date_array = [str(date_base + ind) for ind, _ in enumerate(price_array)]

    # 使用namedtuple重新构建数据结构
    stock_namedtuple = namedtuple('stock', ('date', 'price', 'change'))
    # 通过zip分别从date_array,price_array,change_array拿数据组成
    # stock_namedtuple然后以date做为key组成OrderedDict
    stock_dict = OrderedDict((date, stock_namedtuple(date, price, change)) for date, price, change in
                             zip(date_array, price_array, change_array))
    show_func(stock_dict)
    # list for python3
    up_days = list(filter(lambda day: day.change > 0, stock_dict.values()))
    show_func(up_days)

    def filter_stock(stock_array_dict, want_up=True, want_calc_sum=False):
        if not isinstance(stock_array_dict, OrderedDict):
            raise TypeError('stock_array_dict must be OrderedDict!')

        # python中的三目表达式的写法
        filter_func = (lambda p_day: p_day.change > 0) if want_up else (lambda p_day: p_day.change < 0)
        # 使用filter_func做筛选函数
        want_days = list(filter(filter_func, stock_array_dict.values()))

        if not want_calc_sum:
            return want_days

        # 需要计算涨跌幅和
        change_sum = 0.0
        for day in want_days:
            change_sum += day.change
        return change_sum

    # 全部使用默认参数
    show_func('所有上涨的交易日:{}'.format(filter_stock(stock_dict)))
    # want_up=False
    show_func('所有下跌的交易日:{}'.format(filter_stock(stock_dict, want_up=False)))
    # 计算所有上涨的总会
    show_func('所有上涨交易日的涨幅和:{}'.format(filter_stock(stock_dict, want_calc_sum=True)))
    # 计算所有下跌的总会
    show_func('所有下跌交易日的跌幅和:{}'.format(filter_stock(stock_dict, want_up=False, want_calc_sum=True)))
    return stock_dict