Commit c9c2c89c authored by Dr.李's avatar Dr.李

added general build portfolio interface

parent 1d36527e
...@@ -9,11 +9,15 @@ import numpy as np ...@@ -9,11 +9,15 @@ import numpy as np
from typing import Optional from typing import Optional
from typing import List from typing import List
from alphamind.data.neutralize import neutralize from alphamind.data.neutralize import neutralize
from alphamind.portfolio.longshortbulder import long_short_build
from alphamind.portfolio.rankbuilder import rank_build
from alphamind.portfolio.percentbuilder import percent_build
from alphamind.portfolio.linearbuilder import linear_build
def factor_processing(raw_factor: np.ndarray, def factor_processing(raw_factor: np.ndarray,
pre_process: Optional[List]=None, pre_process: Optional[List]=None,
risk_factors: Optional[np.ndarray]=None): risk_factors: Optional[np.ndarray]=None) -> np.ndarray:
new_factor = raw_factor new_factor = raw_factor
...@@ -27,6 +31,26 @@ def factor_processing(raw_factor: np.ndarray, ...@@ -27,6 +31,26 @@ def factor_processing(raw_factor: np.ndarray,
return new_factor return new_factor
def build_portfolio(er: np.ndarray,
builder: Optional[str]='long_short',
**kwargs) -> np.ndarray:
builder = builder.lower()
if builder == 'long_short':
return long_short_build(er, **kwargs)
elif builder == 'rank':
return rank_build(er, **kwargs)
elif builder == 'percent_build':
return percent_build(er, **kwargs)
elif builder == 'linear_prog':
status, _, weight = linear_build(er, **kwargs)
if status != 'optimal':
raise ValueError('linear programming optimizer in status: {0}'.format(status))
else:
return weight
if __name__ == '__main__': if __name__ == '__main__':
from alphamind.data.standardize import standardize from alphamind.data.standardize import standardize
......
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