MAINT: Reduce number of parameters for create_transaction.

create_transaction accepted both sid and order, which in all cases
was derived from the current event, so remove `sid` and `order`,
replacing them with event

If there is a scenario where sid and order need to be set independently
of each other, then the underlying Transaction object can be called
directly.

Looking towards making writing custom slippage models slightly easier
by removing the redundancy.
This commit is contained in:
Eddie Hebert
2013-06-10 15:36:58 -04:00
parent 4bde1e4c11
commit 7d26168359
2 changed files with 24 additions and 30 deletions
+19 -21
View File
@@ -41,8 +41,8 @@ oneday = datetime.timedelta(days=1)
tradingday = datetime.timedelta(hours=6, minutes=30)
def create_txn(sid, price, amount, dt):
return create_transaction(sid, amount, price, dt, "fakeuid")
def create_txn(event, price, amount):
return create_transaction(event, amount, price, "fakeuid")
def benchmark_events_in_range(sim_params):
@@ -130,7 +130,7 @@ class TestDividendPerformance(unittest.TestCase):
events[2].dt
)
txn = create_txn(1, 10.0, 100, events[0].dt)
txn = create_txn(events[0], 10.0, 100)
events.insert(0, txn)
events.insert(1, dividend)
results = calculate_results(self, events)
@@ -169,7 +169,7 @@ class TestDividendPerformance(unittest.TestCase):
)
events.insert(1, dividend)
txn = create_txn(1, 10.0, 100, events[3].dt)
txn = create_txn(events[3], 10.0, 100)
events.insert(4, txn)
results = calculate_results(self, events)
@@ -203,9 +203,9 @@ class TestDividendPerformance(unittest.TestCase):
events[3].dt
)
buy_txn = create_txn(1, 10.0, 100, events[0].dt)
buy_txn = create_txn(events[0], 10.0, 100)
events.insert(1, buy_txn)
sell_txn = create_txn(1, 10.0, -100, events[3].dt)
sell_txn = create_txn(events[3], 10.0, -100)
events.insert(4, sell_txn)
events.insert(0, dividend)
results = calculate_results(self, events)
@@ -240,9 +240,9 @@ class TestDividendPerformance(unittest.TestCase):
events[5].dt
)
buy_txn = create_txn(1, 10.0, 100, events[1].dt)
buy_txn = create_txn(events[1], 10.0, 100)
events.insert(1, buy_txn)
sell_txn = create_txn(1, 10.0, -100, events[3].dt)
sell_txn = create_txn(events[3], 10.0, -100)
events.insert(3, sell_txn)
events.insert(1, dividend)
results = calculate_results(self, events)
@@ -281,7 +281,7 @@ class TestDividendPerformance(unittest.TestCase):
pay_date
)
buy_txn = create_txn(1, 10.0, 100, events[1].dt)
buy_txn = create_txn(events[1], 10.0, 100)
events.insert(2, buy_txn)
events.insert(1, dividend)
results = calculate_results(self, events)
@@ -321,7 +321,7 @@ class TestDividendPerformance(unittest.TestCase):
events[3].dt
)
txn = create_txn(1, 10.0, -100, events[1].dt)
txn = create_txn(events[1], 10.0, -100)
events.insert(1, txn)
events.insert(0, dividend)
results = calculate_results(self, events)
@@ -411,7 +411,7 @@ class TestPositionPerformance(unittest.TestCase):
self.sim_params
)
txn = create_txn(1, 10.0, 100, self.dt + onesec)
txn = create_txn(trades[1], 10.0, 100)
pp = perf.PerformancePeriod(1000.0)
pp.execute_transaction(txn)
@@ -482,7 +482,7 @@ single short-sale transaction"""
trades_1 = trades[:-2]
txn = create_txn(1, 10.0, -100, self.dt + onesec)
txn = create_txn(trades[1], 10.0, -100)
pp = perf.PerformancePeriod(1000.0)
pp.execute_transaction(txn)
@@ -671,13 +671,12 @@ trade after cover"""
)
short_txn = create_txn(
1,
trades[1],
10.0,
-100,
self.dt + onesec
)
cover_txn = create_txn(1, 7.0, 100, self.dt + onesec * 6)
cover_txn = create_txn(trades[6], 7.0, 100)
pp = perf.PerformancePeriod(1000.0)
pp.execute_transaction(short_txn)
@@ -785,18 +784,17 @@ shares in position"
400
)
saleTxn = create_txn(
1,
10.0,
-100,
self.dt + onesec * 4)
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)
+5 -9
View File
@@ -14,7 +14,6 @@
# limitations under the License.
import abc
import pytz
import math
from copy import copy
@@ -100,12 +99,12 @@ class Transaction(object):
return py
def create_transaction(sid, amount, price, dt, order_id):
def create_transaction(event, amount, price, order_id):
txn = {
'sid': sid,
'sid': event.sid,
'amount': int(amount),
'dt': dt,
'dt': event.dt,
'price': price,
'order_id': order_id
}
@@ -146,7 +145,6 @@ class VolumeShareSlippage(SlippageModel):
def simulate(self, event, current_orders):
dt = event.dt
simulated_impact = 0.0
max_volume = self.volume_limit * event.volume
total_volume = 0
@@ -190,12 +188,11 @@ class VolumeShareSlippage(SlippageModel):
if order.direction * cur_amount > 0:
txn = create_transaction(
event.sid,
event,
cur_amount,
# In the future, we may want to change the next line
# for limit pricing
event.price + simulated_impact,
dt.replace(tzinfo=pytz.utc),
order.id
)
@@ -230,10 +227,9 @@ class FixedSlippage(SlippageModel):
return txns
txn = create_transaction(
event.sid,
event,
order.amount,
event.price + (self.spread / 2.0 * order.direction),
event.dt.replace(tzinfo=pytz.utc),
order.id
)