Вычислить составной доход series in Python

Приветствую всех, у меня есть две серии данных: ежедневная доходность необработанных цен на акции (положительные или отрицательные значения с плавающей точкой) и торговые сигналы (покупка = 1, продажа = -1 , нет торговли = 0).

Необработанные данные о ценах - это просто логарифм сегодняшней цены, деленной на вчерашнюю цену:

log(p_today / p_yesterday)

Пример:

raw_return_series = [ 0.0063 -0.0031 0.0024 ..., -0.0221 0.0097 -0.0015]

Ряд торговых сигналов выглядит следующим образом:

signal_series = [-1. 0. -1. -1. 0. 0. -1. 0. 0. 0.]

Чтобы получить дневную доходность на основе торговых сигналов:

daily_returns = [raw_return_series[i] * signal_series[i+1] for i in range(0, len(signal_series)-1)]

Эти ежедневные доходности могут выглядеть так:

[0.0, 0.00316, -0.0024, 0.0, 0.0, 0.0023, 0.0, 0.0, 0.0] # results in daily_returns; notice the 0s

Мне нужно использовать ряд daily_returns для вычисления ряда составных доходностей. Однако, учитывая, что в серии daily_returns 0 значений, мне нужно перенести последний ненулевой составной возврат «через время» на следующий ненулевой составной возврат.

Например, я вычисляю составной возврат как это (обратите внимание, я иду «назад» во времени):

compound_returns = [(((1 + compounded[i + 1]) * (1 + daily_returns[i])) - 1) for i in range(len(compounded) - 2, -1, -1)]

и результирующий список:

[0.0, 0.0, 0.0023, 0.0, 0.0, -0.0024, 0.0031, 0.0] # (notice the 0s)

Моя цель - перенести последний ненулевой возврат в накопление этих составных возвратов. То есть, поскольку возврат по индексу i зависит от возврата по индексу i + 1, возврат по индексу i + 1 не должен быть нулевым. Каждый раз, когда понимание списка встречает ноль в серии daily_return, оно по существу перезапускается.

9
задан Mike Pennington 30 May 2011 в 22:28
поделиться