Beispiel #1
0
class Strategy(object):
    def __init__(self, balance, log=False, commission=.0002, flat_rate=8):
        self.portfolio = Portfolio(balance, commission, flat_rate)
        self._log = log
        self._today_data = None
        self.day = 0

    def run(self, data_stream):
        for i in range(data_stream.shape[1]):
            self._today_data = data_stream.iloc[:, i, :]
            self.observe_datum(data_stream.iloc[:, i, :])
            self.act()
            self.day += 1

    def observe_datum(self, datum):
        raise NotImplementedError

    def log(self, string):
        if self._log:
            print(string)

    def liquidate(self):
        for ticker in self.portfolio.tickers():
            self.sell_max(ticker)

    def act(self):
        raise NotImplementedError

    def price(self, tickers):
        return self._today_data['Adj Close'][tickers]

    def value(self, correct=True):
        datum = self._today_data
        return self.portfolio.value(datum, correct)

    def sell(self, ticker, shares=1):
        self.portfolio.sell(ticker, self.price(ticker), shares)

    def sell_max(self, ticker):
        self.portfolio.sell_max(ticker, self.price(ticker))

    def buy(self, ticker, shares=1):
        self.portfolio.buy(ticker, self.price(ticker), shares)

    def buy_max(self, ticker, weight=1.):
        self.portfolio.buy_max(ticker, self.price(ticker), weight)

    def batch_buy(self, tickers, weights):
        if type(weights) is dict:
            weights = [weights[ticker] for ticker in tickers]
        if sum(weights) > 1:
            weights = [w / sum(weights) for w in weights]

        self.portfolio.batch_buy(tickers, self.price(tickers), weights)
Beispiel #2
0
class Strategy(object):
    def __init__(self, balance, log=False, commission=.0002, flat_rate=8):
        self.portfolio = Portfolio(balance, commission, flat_rate)
        self._log = log
        self._today_data = None
        self.day = 0

    def run(self, data_stream):
        for i in range(data_stream.shape[1]):
            self._today_data = data_stream.iloc[:, i, :]
            self.observe_datum(data_stream.iloc[:, i, :])
            self.act()
            self.day += 1

    def observe_datum(self, datum):
        raise NotImplementedError

    def log(self, string):
        if self._log:
            print(string)

    def liquidate(self):
        for ticker in self.portfolio.tickers():
            self.sell_max(ticker)

    def act(self):
        raise NotImplementedError

    def price(self, tickers):
        return self._today_data['Adj Close'][tickers]

    def value(self, correct=True):
        datum = self._today_data
        return self.portfolio.value(datum, correct)

    def sell(self, ticker, shares=1):
        self.portfolio.sell(ticker, self.price(ticker), shares)

    def sell_max(self, ticker):
        self.portfolio.sell_max(ticker, self.price(ticker))

    def buy(self, ticker, shares=1):
        self.portfolio.buy(ticker, self.price(ticker), shares)

    def buy_max(self, ticker, weight=1.):
        self.portfolio.buy_max(ticker, self.price(ticker), weight)

    def batch_buy(self, tickers, weights):
        if type(weights) is dict:
            weights = [weights[ticker] for ticker in tickers]
        if sum(weights) > 1:
            weights = [w / sum(weights) for w in weights]

        self.portfolio.batch_buy(tickers, self.price(tickers), weights)