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
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
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)
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
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)
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
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)