13.量化交易python基础

1.yield函数
https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

#coding=UTF-8

from collections import OrderedDict
from collections import namedtuple,Iterable
from functools import partial
data_base = 20170118

price_str = '30.14, 29.58, 26.36, 32.56, 32.82'
price_array = price_str.split(',')
for i in range(len(price_array)):
    price_array[i] = float(price_array[i])

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





pp_array = [(price1, price2) for price1, price2 in zip(price_array[:-1],price_array[1:])]
change_array = map(lambda pp: reduce(lambda a,b: round((b - a)/a, 3), pp), pp_array)
change_array.insert(0,0)

stock_namedtuple = namedtuple('stock', ('date', 'price', 'change'))
stock_dict = OrderedDict((date,stock_namedtuple(date, price, change))
                         for date, price, change in zip(date_array,price_array,change_array))


class StockTradeDays(object):
    def __init__(self, price_array, start_date, date_array=None):
        self.__price_array = price_array
        self.__date_array = self._init_days(start_date, date_array)
        self.__change_array = self.__init_change()
        self.stock_dict = self._init_stock_dict()
    def __init_change(self):
        price_float_array = [float(price_str) for price_str in self.__price_array]
        pp_array = [(price1, price2) for price1, price2 in zip(price_float_array[:-1], price_float_array[1:])]
        change_array = map(lambda pp: reduce(lambda a, b: round((b - a) / a, 3), pp), pp_array)
        change_array.insert(0, 0)
        return change_array


    def _init_days(self, start_date, date_array):
        if date_array is None:
            date_array = [str(start_date+ind) for ind, _ in enumerate(self.__price_array)]
            return date_array

    def _init_stock_dict(self):
        stock_namedtuple = namedtuple('stock', ('date', 'price', 'change'))
        stock_dict = OrderedDict(
            (date, stock_namedtuple(date, price, change))
        for date, price , change in zip(
            self.__date_array, self.__price_array, self.__change_array
        ))
        return stock_dict
    def filter_stock(self, want_up=True, want_calc_sum=False):
        filter_func = (lambda day: day.change>0) if want_up else(lambda day: day.change<0)
        want_days = 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 = change_sum + day.change
        return change_sum

    def __str__(self):
        return str(self.stock_dict)
    __repr__ = __str__

    def __iter__(self):
        for key in self.stock_dict:
            yield self.stock_dict[key]

    def __getitem__(self, ind):
     date_key = self.__date_array[ind]
     return self.stock_dict[date_key]
    def __len__(self):
        return len(self.stock_dict)

date_base = 20170118
trade_days = StockTradeDays(price_array, date_base)
print(trade_days)

print trade_days.filter_stock()

2.@property
https://www.cnblogs.com/miqi1992/p/8343234.html
3.hasattr()
https://www.cnblogs.com/zanjiahaoge666/p/7475225.html
4.类方法和静态方法
https://www.cnblogs.com/ScvQ/p/7054513.html
5.itertools
https://github.com/bbfamily/abu/blob/master/ipython/第二章-量化语言——Python.ipynb
6.进程和线程
http://yangcongchufang.com/高级python编程基础/python-process-thread.html

https://www.jianshu.com/p/7ac73e9c7150
7.上下文管理器
https://www.jianshu.com/p/d53449f9e7e0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值