mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-10 15:17:00 +08:00
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:
+19
-21
@@ -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)
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user