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

added evolver

parent e01c676b
...@@ -35,7 +35,7 @@ n_bins = 5 ...@@ -35,7 +35,7 @@ n_bins = 5
horizon = map_freq(freq) horizon = map_freq(freq)
start_date = '2012-01-01' start_date = '2012-01-01'
end_date = '2017-11-20' end_date = '2017-11-21'
dates = makeSchedule(start_date, dates = makeSchedule(start_date,
end_date, end_date,
......
# -*- coding: utf-8 -*-
"""
Created on 2017-11-23
@author: cheng.li
"""
import numpy as np
def evolve_positions(positions: np.ndarray, dx_ret: np.ndarray) -> np.ndarray:
# assume return is log return
simple_return = np.exp(dx_ret)
evolved_positions = positions * simple_return
leverage = np.abs(positions).sum()
evolved_positions = evolved_positions * leverage / np.abs(evolved_positions).sum()
return evolved_positions
# -*- coding: utf-8 -*-
"""
Created on 2017-11-23
@author: cheng.li
"""
import unittest
import numpy as np
from alphamind.portfolio.evolver import evolve_positions
class TestEvolver(unittest.TestCase):
def test_evolve_positions_with_all_positive_position(self):
positions = np.array([0.2, 0.2, 0.8])
dx_returns = np.array([0.06, 0.04, -0.10])
simple_return = np.exp(dx_returns)
curr_pos = positions * simple_return
expected_pos = curr_pos / curr_pos.sum() * positions.sum()
calculated_pos = evolve_positions(positions, dx_returns)
np.testing.assert_array_almost_equal(expected_pos, calculated_pos)
def test_evolve_positions_with_negative_position(self):
positions = np.array([0.2, 0.3, -0.8])
dx_returns = np.array([0.06, 0.04, -0.10])
simple_return = np.exp(dx_returns)
curr_pos = positions * simple_return
expected_pos = curr_pos / np.abs(curr_pos).sum() * np.abs(positions).sum()
calculated_pos = evolve_positions(positions, dx_returns)
np.testing.assert_array_almost_equal(expected_pos, calculated_pos)
\ No newline at end of file
...@@ -16,6 +16,7 @@ from alphamind.tests.data.test_standardize import TestStandardize ...@@ -16,6 +16,7 @@ from alphamind.tests.data.test_standardize import TestStandardize
from alphamind.tests.data.test_winsorize import TestWinsorize from alphamind.tests.data.test_winsorize import TestWinsorize
from alphamind.tests.data.test_quantile import TestQuantile from alphamind.tests.data.test_quantile import TestQuantile
from alphamind.tests.portfolio.test_constraints import TestConstraints from alphamind.tests.portfolio.test_constraints import TestConstraints
from alphamind.tests.portfolio.test_evolver import TestEvolver
from alphamind.tests.portfolio.test_longshortbuild import TestLongShortBuild from alphamind.tests.portfolio.test_longshortbuild import TestLongShortBuild
from alphamind.tests.portfolio.test_rankbuild import TestRankBuild from alphamind.tests.portfolio.test_rankbuild import TestRankBuild
from alphamind.tests.portfolio.test_percentbuild import TestPercentBuild from alphamind.tests.portfolio.test_percentbuild import TestPercentBuild
...@@ -41,6 +42,7 @@ if __name__ == '__main__': ...@@ -41,6 +42,7 @@ if __name__ == '__main__':
TestWinsorize, TestWinsorize,
TestQuantile, TestQuantile,
TestConstraints, TestConstraints,
TestEvolver,
TestLongShortBuild, TestLongShortBuild,
TestRankBuild, TestRankBuild,
TestPercentBuild, TestPercentBuild,
......
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