-
Notifications
You must be signed in to change notification settings - Fork 213
/
dynamic_crp.py
35 lines (26 loc) · 985 Bytes
/
dynamic_crp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import numpy as np
from .. import tools
from ..algo import Algo
class DynamicCRP(Algo):
# use logarithm of prices
PRICE_TYPE = "ratio"
def __init__(self, n=None, min_history=None, **kwargs):
self.n = n
self.opt_weights_kwargs = kwargs
if min_history is None:
if n is None:
min_history = 252
else:
min_history = n
super().__init__(min_history=min_history)
def init_weights(self, columns):
m = len(columns)
self._importances = np.zeros(m)
# use uniform weights until you get enough history
return self.opt_weights_kwargs.get("max_leverage", 1.0) * np.ones(m) / m
def step(self, x, last_b, history):
# update frequency
self.opt_weights_kwargs["freq"] = tools.freq(history.index)
hist = history.iloc[-self.n :] if self.n else history
ws = tools.opt_weights(hist, **self.opt_weights_kwargs)
return ws