Beispiel #1
0
def action(file_list, ini_list):
    for sector, portfolio_list in prep(*ini_list):
        portfolio_list = pd.DataFrame(portfolio_list)
        logging.debug(portfolio_list)
        logging.info(sector)
        ret = {}
        for key, data in HELPER.partition(portfolio_list):
            results = HELPER.transform(key, data)
            logging.info(results)
            key_list = sorted(results)
            value_list = map(lambda x: results[x], key_list)
            key_list = map(lambda x: "{}_{}".format(sector, x), key_list)
            results = dict(zip(key_list, value_list))
            ret.update(results)
        yield sector, ret
Beispiel #2
0
def load(file_list, value_list):
    ret = {}
    for name, data in STOCK_TIMESERIES.read(file_list, value_list):
        if len(data) < 7 * FINANCE.YEAR:
            logging.info(
                "{} of length {} rejected for being less than {}".format(
                    name, len(data), 7 * FINANCE.YEAR))
            continue
        data = MONTECARLO.find(data['Adj Close'], period=FINANCE.YEAR)
        #filter stocks that have less than a year
        sharpe = data.get('sharpe', 0)
        if sharpe == 0:
            continue
        #filter stocks that have negative returns
        returns = data.get('returns', 0)
        if returns <= 0:
            logging.info(
                "{} of returns {} rejected for being unprofitable".format(
                    name, returns))
            continue
        key_list = data.keys()
        value_list = map(lambda x: data[x], key_list)
        value_list = map(lambda x: round(x, 2), value_list)
        msg = dict(zip(key_list, value_list))
        logging.info((name, msg))
        ret[name] = data
    return ret
 def getSharpe(cls, stock_list, data):
     ret = map(lambda d: SHARPE.find(data[d], period=FINANCE.YEAR),
               stock_list)
     ret = dict(zip(stock_list, ret))
     ret = pd.DataFrame(ret).T
     logging.info(ret.head(3))
     logging.info(ret.tail(3))
     return ret
def prototype(file_list, stock_list):
    name_list, _ret = load(file_list, stock_list)
    ret = FINANCE.graphDailyReturns(_ret)
    value_list = map(lambda x: _ret[x], name_list)
    value_list = map(lambda data: data.sort_index(inplace=True), value_list)
    value_list = map(
        lambda data: MONTECARLO.find(
            data, risk_free_rate=0.02, period=FINANCE.YEAR, span=0),
        value_list)
    sharpe = dict(zip(name_list, value_list))
    return name_list, ret, sharpe
 def is_stock_invalid(cls, name, data) :
     ret = MONTECARLO.find(data['Adj Close'], period=FINANCE.YEAR)
     sharpe = ret.get('sharpe',0)
     if sharpe <= 1.01 :
        logging.info("{} of sharpe ratio {} rejected for being less stable than SPY".format(name,sharpe))
        return True, None
     returns = ret.get('returns',0)
     if returns <= 0.04 :
        logging.info("{} of returns {} rejected for being less profitable than bonds".format(name,returns))
        return True, None
     return False, ret
Beispiel #6
0
def process(file_list, value_list):
    ret = {}
    for name, data in STOCK_TIMESERIES.read(file_list, value_list):
        data.sort_index(inplace=True)
        data = data['Adj Close']
        data = MONTECARLO.find(data,
                               risk_free_rate=0.02,
                               period=FINANCE.YEAR,
                               span=0)

        # filter stocks that have less than a year
        sharpe = data.get('sharpe', 0)
        if sharpe == 0: continue
        ret[name] = data
    return ret
def load(file_list, value_list):
    ret = {}
    for name, data in STOCK_TIMESERIES.read(file_list, value_list):
        data = MONTECARLO.find(data['Adj Close'], period=FINANCE.YEAR)
        #filter stocks that have less than a year
        sharpe = data.get('sharpe', 0)
        if sharpe == 0: continue
        #filter stocks that have negative returns
        returns = data.get('returns', 0)
        if returns <= 0: continue
        key_list = data.keys()
        value_list = map(lambda x: data[x], key_list)
        value_list = map(lambda x: round(x, 2), value_list)
        msg = dict(zip(key_list, value_list))
        logging.info((name, msg))
        ret[name] = data
    return ret
Beispiel #8
0
def main(stock_list):
    name, spy_data, file_list = prep()

    annual = MONTECARLO.YEAR()
    _ret, _dev, _sharpe, _length = annual.single(spy_data['Adj Close'])
    logging.info("{} return {}, dev {}, sharpe {} length {}".format(
        name, _ret, _dev, _sharpe, _length))

    perf_list = init(*ini_list)
    for name, data in action(perf_list):
        ret, dev, sharpe, length = annual.single(data['Adj Close'])
        flag_long = length > 250
        flag_stable = dev < 3 * _dev
        flag_profit = ret > _ret
        flag_sharpe = sharpe > _sharpe
        if flag_long and flag_stable and flag_profit and flag_sharpe:
            logging.info("{} return {}, dev {}, sharpe {}, length {}".format(
                name, ret, dev, sharpe, length))
        del data
Beispiel #9
0
 def demo_sharpe(data, path):
     pt_list = map(lambda name: "legend_" + name, ticker_list)
     pt_list = list(pt_list)
     labels = dict(zip(ticker_list, pt_list))
     labels['^GSPC'] = 'SNP500'
     logging.info(type(data))
     _data = map(
         lambda stock: MONTECARLO.find(
             data[stock], span=2 * FINANCE.YEAR, period=FINANCE.YEAR), data)
     _data = list(_data)
     data = dict(zip(ticker_list, _data))
     data = pd.DataFrame(data, columns=ticker_list)
     logging.debug(data)
     POINT.plot(data,
                labels=labels,
                x='risk',
                y='returns',
                ylabel="Returns",
                xlabel="Risk",
                title="Sharpe Ratio",
                alpha=0.3)
     save(path, loc="lower right")