Commit 319fff13 authored by Dr.李's avatar Dr.李

added more

parent 01f16109
...@@ -24,6 +24,15 @@ class Allocation(object): ...@@ -24,6 +24,15 @@ class Allocation(object):
self.maximum = maximum self.maximum = maximum
self.current = current self.current = current
pyFinAssert(self.minimum <= self.current, ValueError, "minimum qty should be lower than current")
pyFinAssert(self.maximum >= self.current, ValueError, "minimum qty should be greater than current")
def __repr__(self):
return "Allocation(code={0}, minimum={1}, maximum={2}, current={3})".format(self.code,
self.minimum,
self.maximum,
self.current)
class Portfolio(object): class Portfolio(object):
...@@ -39,6 +48,14 @@ class Portfolio(object): ...@@ -39,6 +48,14 @@ class Portfolio(object):
except KeyError: except KeyError:
return Allocation(code, 0, 0, 0) return Allocation(code, 0, 0, 0)
def __repr__(self):
return "Portfolio(name={0}, allocations={1})".format(self.name,
list(self.allocations.values()))
@property
def codes(self) -> List[int]:
return sorted(self.allocations.keys())
class Execution(object): class Execution(object):
...@@ -50,6 +67,11 @@ class Execution(object): ...@@ -50,6 +67,11 @@ class Execution(object):
self.qty = qty self.qty = qty
self.comment = comment self.comment = comment
def __repr__(self):
return "Execution(code={0}, qty={1}, comment={2})".format(self.code,
self.qty,
self.comment)
class Executions(object): class Executions(object):
...@@ -57,7 +79,11 @@ class Executions(object): ...@@ -57,7 +79,11 @@ class Executions(object):
name, name,
executions: List[Execution]=None): executions: List[Execution]=None):
self.name = name self.name = name
self.executions = {e.code: e.qty for e in executions} self.executions = executions
def __repr__(self):
return "Executions(name={0}, executions={1})".format(self.name,
self.executions)
class Asset(object): class Asset(object):
...@@ -71,20 +97,36 @@ class Asset(object): ...@@ -71,20 +97,36 @@ class Asset(object):
self.name = name self.name = name
if priority: if priority:
self.priority = set(priority) self.priority = set(priority)
else:
self.priority = set()
if forbidden: if forbidden:
self.forbidden = set(forbidden) self.forbidden = set(forbidden)
else:
self.forbidden = set()
self._validation() self._validation()
def _validation(self): def _validation(self):
for p in self.priority: for p in self.priority:
pyFinAssert(p not in self.forbidden, ValueError, "{0} in priority is in forbidden".format(p)) pyFinAssert(p not in self.forbidden, ValueError, "{0} in priority is in forbidden".format(p))
def __repr__(self):
return "Asset(code={0}, name={1}, priority={2}, forbidden={3})".format(self.code,
self.name,
self.priority,
self.forbidden)
class TargetPositions(object): class TargetPositions(object):
def __init__(self): def __init__(self,
self.targets = {} assets: List[Asset]=None,
qtys: List[int]=None):
if assets:
self.targets = {asset.code: (asset, qty) for asset, qty in zip(assets, qtys)}
else:
self.targets = {}
def add_asset(self, def add_asset(self,
asset: Asset, asset: Asset,
...@@ -100,6 +142,9 @@ class TargetPositions(object): ...@@ -100,6 +142,9 @@ class TargetPositions(object):
def codes(self) -> List[int]: def codes(self) -> List[int]:
return sorted(self.targets.keys()) return sorted(self.targets.keys())
def __repr__(self):
return "TargetPositions(assets={0}, qtys={1})".format(*zip(*self.targets.values()))
def handle_one_asset(pre_allocation: Allocation, def handle_one_asset(pre_allocation: Allocation,
asset: Asset, asset: Asset,
...@@ -159,5 +204,21 @@ def pass_through(target_pos: TargetPositions, ...@@ -159,5 +204,21 @@ def pass_through(target_pos: TargetPositions,
return Executions(p_name, executions), Portfolio(p_name, allocations), new_target_pos return Executions(p_name, executions), Portfolio(p_name, allocations), new_target_pos
if __name__ == '__main__':
asset1 = Asset(1, 'a')
asset2 = Asset(2, 'b')
asset3 = Asset(3, 'b')
target_pos = TargetPositions([asset1, asset2, asset3], [200, 300, 100])
allc1 = Allocation(1, 0, 100, 0)
allc2 = Allocation(2, 0, 400, 100)
allc2 = Allocation(3, 0, 400, 200)
portfolio = Portfolio('test1', [allc1, allc2])
executions, portfolio, target_pos = pass_through(target_pos, portfolio)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment