def test_cost_basis_calc_close_pos(self): history_args = ( 1, [10, 9, 11, 8, 9, 12, 13, 14], [200, -100, -100, 100, -300, 100, 500, 400], onesec, self.sim_params ) cost_bases = [10, 10, 0, 8, 9, 9, 13, 13.5] trades = factory.create_trade_history(*history_args) transactions = factory.create_txn_history(*history_args) pp = perf.PerformancePeriod(1000.0) for txn, cb in zip(transactions, cost_bases): pp.execute_transaction(txn) self.assertEqual(pp.positions[1].cost_basis, cb) for trade in trades: pp.update_last_sale(trade) pp.calculate_performance() self.assertEqual(pp.positions[1].cost_basis, cost_bases[-1])
def test_cost_basis_calc(self): history_args = ( 1, [10, 11, 11, 12], [100, 100, 100, 100], onesec, self.sim_params ) trades = factory.create_trade_history(*history_args) transactions = factory.create_txn_history(*history_args) pp = perf.PerformancePeriod(1000.0) average_cost = 0 for i, txn in enumerate(transactions): pp.execute_transaction(txn) average_cost = (average_cost * i + txn.price) / (i + 1) self.assertEqual(pp.positions[1].cost_basis, average_cost) for trade in trades: pp.update_last_sale(trade) pp.calculate_performance() self.assertEqual( pp.positions[1].last_sale_price, trades[-1].price, "should have a last sale of 12, got {val}".format( val=pp.positions[1].last_sale_price) ) self.assertEqual( pp.positions[1].cost_basis, 11, "should have a cost basis of 11" ) self.assertEqual( pp.pnl, 400 ) down_tick = factory.create_trade( 1, 10.0, 100, trades[-1].dt + onesec) sale_txn = create_txn( down_tick, 10.0, -100) pp.rollover() pp.execute_transaction(sale_txn) pp.update_last_sale(down_tick) pp.calculate_performance() self.assertEqual( pp.positions[1].last_sale_price, 10, "should have a last sale of 10, was {val}".format( val=pp.positions[1].last_sale_price) ) self.assertEqual( pp.positions[1].cost_basis, 11, "should have a cost basis of 11" ) self.assertEqual(pp.pnl, -800, "this period goes from +400 to -400") pp3 = perf.PerformancePeriod(1000.0) average_cost = 0 for i, txn in enumerate(transactions): pp3.execute_transaction(txn) average_cost = (average_cost * i + txn.price) / (i + 1) self.assertEqual(pp3.positions[1].cost_basis, average_cost) pp3.execute_transaction(sale_txn) trades.append(down_tick) for trade in trades: pp3.update_last_sale(trade) pp3.calculate_performance() self.assertEqual( pp3.positions[1].last_sale_price, 10, "should have a last sale of 10" ) self.assertEqual( pp3.positions[1].cost_basis, 11, "should have a cost basis of 11" ) self.assertEqual( pp3.pnl, -400, "should be -400 for all trades and transactions in period" )
def test_cost_basis_calc(self): trades = factory.create_trade_history( 1, [10, 11, 11, 12], [100, 100, 100, 100], self.onesec, self.trading_environment ) transactions = factory.create_txn_history( 1, [10, 11, 11, 12], [100, 100, 100, 100], self.onesec, self.trading_environment ) pp = perf.PerformancePeriod(1000.0) for txn in transactions: pp.execute_transaction(txn) for trade in trades: pp.update_last_sale(trade) pp.calculate_performance() self.assertEqual( pp.positions[1].last_sale_price, trades[-1].price, "should have a last sale of 12, got {val}".format( val=pp.positions[1].last_sale_price) ) self.assertEqual( pp.positions[1].cost_basis, 11, "should have a cost basis of 11" ) self.assertEqual( pp.pnl, 400 ) saleTxn = factory.create_txn( 1, 10.0, -100, self.dt + self.onesec * 4) down_tick = factory.create_trade( 1, 10.0, 100, trades[-1].dt + self.onesec) pp.rollover() pp.execute_transaction(saleTxn) pp.update_last_sale(down_tick) pp.calculate_performance() self.assertEqual( pp.positions[1].last_sale_price, 10, "should have a last sale of 10, was {val}".format( val=pp.positions[1].last_sale_price) ) self.assertEqual( round(pp.positions[1].cost_basis, 2), 11.33, "should have a cost basis of 11.33" ) #print "second period pnl is {pnl}".format(pnl=pp2.pnl) self.assertEqual(pp.pnl, -800, "this period goes from +400 to -400") pp3 = perf.PerformancePeriod(1000.0) transactions.append(saleTxn) for txn in transactions: pp3.execute_transaction(txn) trades.append(down_tick) for trade in trades: pp3.update_last_sale(trade) pp3.calculate_performance() self.assertEqual( pp3.positions[1].last_sale_price, 10, "should have a last sale of 10" ) self.assertEqual( round(pp3.positions[1].cost_basis, 2), 11.33, "should have a cost basis of 11.33" ) self.assertEqual( pp3.pnl, -400, "should be -400 for all trades and transactions in period" )
def test_cost_basis_calc(self): trades = factory.create_trade_history(1, [10, 11, 11, 12], [100, 100, 100, 100], onesec, self.sim_params) transactions = factory.create_txn_history(1, [10, 11, 11, 12], [100, 100, 100, 100], onesec, self.sim_params) pp = perf.PerformancePeriod(1000.0) for txn in transactions: pp.execute_transaction(txn) for trade in trades: pp.update_last_sale(trade) pp.calculate_performance() self.assertEqual( pp.positions[1].last_sale_price, trades[-1].price, "should have a last sale of 12, got {val}".format( val=pp.positions[1].last_sale_price)) self.assertEqual(pp.positions[1].cost_basis, 11, "should have a cost basis of 11") self.assertEqual(pp.pnl, 400) down_tick = factory.create_trade(1, 10.0, 100, trades[-1].dt + onesec) saleTxn = create_txn(down_tick, 10.0, -100) pp.rollover() pp.execute_transaction(saleTxn) pp.update_last_sale(down_tick) pp.calculate_performance() self.assertEqual( pp.positions[1].last_sale_price, 10, "should have a last sale of 10, was {val}".format( val=pp.positions[1].last_sale_price)) self.assertEqual(round(pp.positions[1].cost_basis, 2), 11.33, "should have a cost basis of 11.33") # print "second period pnl is {pnl}".format(pnl=pp2.pnl) self.assertEqual(pp.pnl, -800, "this period goes from +400 to -400") pp3 = perf.PerformancePeriod(1000.0) transactions.append(saleTxn) for txn in transactions: pp3.execute_transaction(txn) trades.append(down_tick) for trade in trades: pp3.update_last_sale(trade) pp3.calculate_performance() self.assertEqual(pp3.positions[1].last_sale_price, 10, "should have a last sale of 10") self.assertEqual(round(pp3.positions[1].cost_basis, 2), 11.33, "should have a cost basis of 11.33") self.assertEqual( pp3.pnl, -400, "should be -400 for all trades and transactions in period")
def test_cost_basis_calc(self): trades = factory.create_trade_history(1, [10, 11, 11, 12], [100, 100, 100, 100], self.onesec, self.trading_environment) transactions = factory.create_txn_history(1, [10, 11, 11, 12], [100, 100, 100, 100], self.onesec, self.trading_environment) pp = perf.PerformancePeriod({}, 0.0, 1000.0) for txn in transactions: pp.execute_transaction(txn) for trade in trades: pp.update_last_sale(trade) pp.calculate_performance() self.assertEqual( pp.positions[1].last_sale_price, trades[-1].price, "should have a last sale of 12, got {val}".format( val=pp.positions[1].last_sale_price)) self.assertEqual(pp.positions[1].cost_basis, 11, "should have a cost basis of 11") self.assertEqual(pp.pnl, 400) saleTxn = factory.create_txn(1, 10.0, -100, self.dt + self.onesec * 4) down_tick = factory.create_trade(1, 10.0, 100, trades[-1].dt + self.onesec) pp2 = perf.PerformancePeriod(copy.deepcopy(pp.positions), pp.ending_value, pp.ending_cash) pp2.execute_transaction(saleTxn) pp2.update_last_sale(down_tick) pp2.calculate_performance() self.assertEqual( pp2.positions[1].last_sale_price, 10, "should have a last sale of 10, was {val}".format( val=pp2.positions[1].last_sale_price)) self.assertEqual(round(pp2.positions[1].cost_basis, 2), 11.33, "should have a cost basis of 11.33") #print "second period pnl is {pnl}".format(pnl=pp2.pnl) self.assertEqual(pp2.pnl, -800, "this period goes from +400 to -400") pp3 = perf.PerformancePeriod({}, 0.0, 1000.0) transactions.append(saleTxn) for txn in transactions: pp3.execute_transaction(txn) trades.append(down_tick) for trade in trades: pp3.update_last_sale(trade) pp3.calculate_performance() self.assertEqual(pp3.positions[1].last_sale_price, 10, "should have a last sale of 10") self.assertEqual(round(pp3.positions[1].cost_basis, 2), 11.33, "should have a cost basis of 11.33") self.assertEqual( pp3.pnl, -400, "should be -400 for all trades and transactions in period")