Пример #1
0
 def simulation(self):
     print self.call_symbol, self.put_symbol
     relative_percentages = list(
         TradeSimulation.get_relative_percentages(self.percentages))
     trade_nodes = [TradeNode(self.call_symbol, self.start_date, 'buy', percentage=relative_percentages[0]), \
                   TradeNode(self.put_symbol, self.start_date, 'buy', percentage=relative_percentages[1])]
     return TradeSimulation.simulate(trade_nodes, self.start_date)
Пример #2
0
 def get_returns(self, condition, ma_window, print_trade_node=False):
     trade_nodes = []
     previous_condition = False
     conditions = condition(ma_window)
     dates = map(lambda x: x[0], self.vix_records)[ma_window:]
     for i in range(len(dates)):
         date = dates[i]
         if conditions[i]:
             if previous_condition is False:
                 # trade_nodes.append(TradeNode('VXX', date, 'sell'))
                 # trade_nodes.append(TradeNode('XIV', date, 'buy'))
                 trade_nodes.append(TradeNode('VXZ', date, 'sell'))
                 trade_nodes.append(TradeNode('ZIV', date, 'buy'))
                 previous_condition = True
         else:
             if previous_condition is True:
                 # trade_nodes.append(TradeNode('XIV', date, 'sell'))
                 # trade_nodes.append(TradeNode('VXX', date, 'buy'))
                 trade_nodes.append(TradeNode('ZIV', date, 'sell'))
                 trade_nodes.append(TradeNode('VXZ', date, 'buy'))
                 previous_condition = False
     returns = list(TradeSimulation.simulate(trade_nodes, dates[0]))
     if print_trade_node:
         for trade_node in trade_nodes:
             print trade_node
         max_draw_down = BackTestHelper.get_max_draw_down(
             map(lambda x: x[1], returns))
         print 'total return: %s' % returns[-1][1]
         print 'Max drawdown: %s' % max_draw_down
     return returns
Пример #3
0
 def get_returns(self, condition, ma_window, print_trade_node=False):
     trade_nodes = []
     hold_xiv = False
     hold_vxx = False
     conditions = condition(ma_window)
     dates = map(lambda x: x[0], self.vix_records)[ma_window:]
     for i in range(len(dates)):
         date = dates[i]
         long_vix = conditions[i]
         if long_vix:
             if hold_vxx:
                 trade_nodes.append(TradeNode('VXX', date, 'sell'))
                 hold_vxx = False
             if hold_xiv is False and self.bull_market_p(date):
                 trade_nodes.append(TradeNode('XIV', date,
                                              'buy'))  # short vxx
                 hold_xiv = True
         else:
             if hold_xiv:
                 trade_nodes.append(TradeNode('XIV', date, 'sell'))
                 hold_xiv = False
             if hold_vxx is False and self.bull_market_p(date):
                 trade_nodes.append(TradeNode('VXX', date, 'buy'))
                 hold_vxx = True
     returns = list(TradeSimulation.simulate(trade_nodes, dates[0]))
     if print_trade_node:
         for trade_node in trade_nodes:
             print trade_node
     return returns
Пример #4
0
 def simulation(self):
     trade_nodes = [
         TradeNode(self.option_symbol,
                   self.start_date,
                   'buy',
                   percentage=self.percentage)
     ]
     return TradeSimulation.simulate(trade_nodes, self.start_date,
                                     self.end_date)
Пример #5
0
    def get_returns(self,
                    ma_window=7,
                    momentum_window=10,
                    print_trade_node=False):
        trade_nodes = []
        hold_xiv = False
        hold_vxx = False
        roll_yield_conditions = self.condition_roll_yield(ma_window)
        momentum_xiv_conditions = self.condition_momentum(
            'XIV', momentum_window)[ma_window:]
        # momentum_vxx_conditions = self.condition_momentum('VXX', momentum_window)[ma_window:]
        dates = map(lambda x: x[0], self.vix_records)[ma_window:]
        for i in range(len(dates)):
            date = dates[i]
            if roll_yield_conditions[i]:
                if hold_vxx:
                    trade_nodes.append(TradeNode('VXX', date, 'sell'))
                    hold_vxx = False
                # if hold_xiv is False:
                #     trade_nodes.append(TradeNode('XIV', date, 'buy'))
                #     hold_xiv = True
                if momentum_xiv_conditions[i]:
                    if hold_xiv is False:
                        trade_nodes.append(TradeNode('XIV', date, 'buy'))
                        hold_xiv = True
                else:
                    if hold_xiv:
                        trade_nodes.append(TradeNode('XIV', date, 'sell'))
                        hold_xiv = False
            else:
                if hold_xiv is True:
                    trade_nodes.append(TradeNode('XIV', date, 'sell'))
                    hold_xiv = False
                if not hold_vxx:
                    trade_nodes.append(TradeNode('VXX', date, 'buy'))
                    hold_vxx = True

        returns = list(TradeSimulation.simulate(trade_nodes, dates[0]))
        if print_trade_node:
            for trade_node in trade_nodes:
                print trade_node
            max_draw_down = BackTestHelper.get_max_draw_down(
                map(lambda x: x[1], returns))
            print 'total return: %s' % returns[-1][1]
            print 'Max drawdown: %s' % max_draw_down
        return returns
Пример #6
0
 def get_returns(self, ma_window=8):
     trade_nodes = []
     previous_condition = False
     conditions = self.condition(ma_window)
     dates = map(lambda x: x[0], self.vix_records)[ma_window:]
     for i in range(len(dates)):
         date = dates[i]
         if conditions[i]:
             if previous_condition is False:
                 trade_nodes.append(TradeNode('VXX', date, 'sell'))
                 trade_nodes.append(TradeNode('XIV', date, 'buy'))
                 previous_condition = True
         else:
             if previous_condition is True:
                 trade_nodes.append(TradeNode('XIV', date, 'sell'))
                 trade_nodes.append(TradeNode('VXX', date, 'buy'))
                 previous_condition = False
     returns = list(TradeSimulation.simulate(trade_nodes, dates[0]))
     # for trade_node in trade_nodes:
     #    print trade_node
     return returns
Пример #7
0
 def run(self):
     trade_nodes = []
     previous_condition = False
     for i in range(len(self.dates)):
         #date = datetime.datetime.fromordinal(self.dates[i].toordinal())
         date = self.dates[i]
         if self.vxv_ma10[i] > self.vix_ma10[i]:
             if previous_condition is False:
                 #trade_nodes.append(TradeNode('VXX', date, 'sell'))
                 trade_nodes.append(TradeNode('XIV', date, 'buy'))
                 previous_condition = True
         else:
             if previous_condition is True:
                 trade_nodes.append(TradeNode('XIV', date, 'sell'))
                 #trade_nodes.append(TradeNode('VXX', date, 'buy'))
                 previous_condition = False
     returns = list(TradeSimulation.simulate(trade_nodes, self.dates[0]))
     #for [date, return_value] in returns:
     #    print date, return_value
     for trade_node in trade_nodes:
         print trade_node
     self.plot(returns)