コード例 #1
0
 def momentum_vote(self, prices_to_date):
     rolling_momentum = indicators.rolling_momentum(prices_to_date[-(self.mom_window + 2):], self.mom_window).ix[-1]
     if rolling_momentum > 0.32:
         return 1
     if rolling_momentum < 0.32:
         return -1
     return 0
コード例 #2
0
    def testPolicy(self, symbol = "IBM", \
        sd=dt.datetime(2009,1,1), \
        ed=dt.datetime(2010,1,1), \
        sv = 10000):

        # here we build a fake set of trades
        # your code should return the same sort of data
        start = sd - dt.timedelta(days=60)
        dates = pd.date_range(start, ed)
        data = ut.get_data([symbol], dates)
        data.fillna(method="ffill", inplace=True)
        data.fillna(method="bfill", inplace=True)
        prices = indicators.normalized_prices(data[symbol])
        trades = pd.DataFrame(index=prices[sd:].index, columns=[symbol])

        self.rsi = indicators.rolling_rsi(prices, 5)
        self.bollinger_bands = indicators.bollinger_bands(prices, 15)
        self.momentum = indicators.rolling_momentum(prices, 2)

        action = 2
        holding = 0
        for i in range(len(trades)):
            prices_to_date = prices[:trades.index[i]]
            state = self.create_state(trades.index[i], prices_to_date, action)
            action = self.learner.querysetstate(state)
            if action is 0:
                trades.ix[i] = -1000 - holding
                holding = -1000
            if action is 1:
                trades.ix[i] = 1000 - holding
                holding = 1000
            if action is 2:
                trades.ix[i] = 0
        return trades
コード例 #3
0
    def testPolicy(self, symbol, sd, ed, sv):
        dates = pd.date_range(sd, ed)
        data = util.get_data([symbol], dates)
        data.fillna(method="ffill", inplace=True)
        data.fillna(method="bfill", inplace=True)
        prices = indicators.normalized_prices(data[symbol])

        trades = pd.DataFrame(index=prices.index, columns=[symbol])
        trades[:] = 0
        momentum = indicators.rolling_momentum(prices, 2)
        buy_days = []
        sell_days = []
        # when momentum is positive, buy on the last day its positive and vice versas
        for i in range(1, len(momentum) -1):
            if momentum[i] >=0 and momentum[i+1] < 0:
                sell_days.append(i)
            elif momentum[i] <=0 and momentum[i+1] > 0:
                buy_days.append(i)
        if buy_days[0] < sell_days[0]:
            trades.ix[0] = -1000
        else:
            trades.ix[0] = 1000

        for i in buy_days:
            trades.ix[i] = 2000
        for i in sell_days:
            trades.ix[i] = -2000
        return trades
コード例 #4
0
    def addEvidence(self, symbol = "IBM", \
        sd=dt.datetime(2008,1,1), \
        ed=dt.datetime(2009,1,1), \
        sv = 10000):
        self.cash = sv
        start = sd - dt.timedelta(days=60)
        dates = pd.date_range(start, ed)
        data = ut.get_data([symbol], dates)
        data.fillna(method="ffill", inplace=True)
        data.fillna(method="bfill", inplace=True)
        prices = indicators.normalized_prices(data[symbol])

        self.bollinger_bands = None
        self.momentum = None

        self.rsi = indicators.rolling_rsi(prices, 5)
        self.bollinger_bands = indicators.bollinger_bands(prices, 15)
        self.momentum = indicators.rolling_momentum(prices, 2)

        self.mom_mean = self.momentum.mean()
        self.mom_std = self.momentum.std()

        last_action = 2
        current_state = self.create_state(sd, prices[:sd], last_action)
        action = self.learner.querysetstate(current_state)
        trades = pd.DataFrame(index=prices[sd:].index, columns=[symbol])
        keepgoing = True
        iteration = 0
        while keepgoing:
            for i in trades.index:
                reward = self.get_reward(action, last_action, prices[:i])
                last_action = action
                current_state = self.create_state(i, prices[:i], last_action)
                action = self.learner.query(current_state, reward)
            cr = self.cash / sv - 1
            if cr == self.cr or iteration == 20:
                keepgoing = False
            self.cr = cr
            iteration += 1