Commit 1d36527e authored by Dr.李's avatar Dr.李

added factor analysis module

parent 8ef605f0
# -*- coding: utf-8 -*-
"""
Created on 2017-5-25
@author: cheng.li
"""
import numpy as np
from typing import Optional
from typing import List
from alphamind.data.neutralize import neutralize
def factor_processing(raw_factor: np.ndarray,
pre_process: Optional[List]=None,
risk_factors: Optional[np.ndarray]=None):
new_factor = raw_factor
if pre_process:
for p in pre_process:
new_factor = p(new_factor)
if risk_factors is not None:
new_factor = neutralize(risk_factors, new_factor)
return new_factor
if __name__ == '__main__':
from alphamind.data.standardize import standardize
from alphamind.data.winsorize import winsorize_normal
raw_factor = np.random.randn(1000, 1)
pre_process = [winsorize_normal, standardize]
risk_factors = np.ones((1000, 1))
new_factor = factor_processing(raw_factor,
pre_process,
risk_factors)
print(new_factor.sum())
\ No newline at end of file
# -*- coding: utf-8 -*-
"""
Created on 2017-5-25
@author: cheng.li
"""
import unittest
import numpy as np
from alphamind.data.winsorize import winsorize_normal
from alphamind.data.standardize import standardize
from alphamind.data.neutralize import neutralize
from alphamind.analysis.factoranalysis import factor_processing
class TestFactorAnalysis(unittest.TestCase):
def setUp(self):
self.raw_factor = np.random.randn(1000, 1)
self.risk_factor = np.random.randn(1000, 3)
def test_factor_processing(self):
new_factor = factor_processing(self.raw_factor)
np.testing.assert_array_almost_equal(new_factor, self.raw_factor)
new_factor = factor_processing(self.raw_factor,
pre_process=[standardize, winsorize_normal])
np.testing.assert_array_almost_equal(new_factor, winsorize_normal(standardize(self.raw_factor)))
new_factor = factor_processing(self.raw_factor,
pre_process=[standardize, winsorize_normal],
risk_factors=self.risk_factor)
np.testing.assert_array_almost_equal(new_factor, neutralize(self.risk_factor,
winsorize_normal(standardize(self.raw_factor))))
if __name__ == '__main__':
unittest.main()
\ No newline at end of file
......@@ -21,6 +21,7 @@ from alphamind.tests.portfolio.test_linearbuild import TestLinearBuild
from alphamind.tests.settlement.test_simplesettle import TestSimpleSettle
from alphamind.tests.analysis.test_riskanalysis import TestRiskAnalysis
from alphamind.tests.analysis.test_perfanalysis import TestPerformanceAnalysis
from alphamind.tests.analysis.test_factoranalysis import TestFactorAnalysis
if __name__ == '__main__':
......@@ -33,6 +34,7 @@ if __name__ == '__main__':
TestLinearBuild,
TestSimpleSettle,
TestRiskAnalysis,
TestPerformanceAnalysis],
TestPerformanceAnalysis,
TestFactorAnalysis],
alpha_logger)
runner.run()
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