Как выполнить простое тестирование сигнала в пандах Python

Я хочу провести простое и быстрое тестирование на пандах, предоставив сигналы покупки в качестве DatetimeIndex для проверки против котировок Ohlc DataFrame (скорректированная цена закрытия), и я не уверен, правильно ли я это делаю.

Чтобы быть ясным, я хочу рассчитать совокупную доходность всех сигналов покупки свопа (а также доходности акций?) За весь период владения. После этого я хочу сравнить несколько расчетов с помощью простой функции Шарпа. Является ли это правильным способом быстро и легко проверить пинг покупки на пандах?

Любая помощь очень ценится!

сигналы:

In [216]: signal
Out[216]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2000-08-21, ..., 2013-07-09]
Length: 21, Freq: None, Timezone: UTC

OHLC:

In [218]:
df.head()
Out[218]:
open    high    low close   volume  amount
Date                        
2000-01-14 00:00:00+00:00    6.64    6.64    6.06    6.08    74500   4.91
2000-01-17 00:00:00+00:00    6.30    6.54    6.25    6.40    45000   5.17
2000-01-18 00:00:00+00:00    7.56    8.75    7.51    8.75    250200  7.07

Backtest:

analysis = pd.DataFrame(index=df.index)
#calculate returns of adjusted close price
analysis["returns"] = df['amount'].pct_change()
#set signal returns to quote returns where there is a signal DatetimeIndex and ffill
analysis["signal"] = nan
analysis["signal"][signal] = analysis["returns"][signal]
analysis["signal"] = analysis["signal"].fillna(method="ffill")
#calculation of signal returns
trade_rets = analysis["signal"].shift(1)*analysis["returns"]

ожидаемый результат (значения buy_returns не верны):

Out[2]:
returns buy_returns
Date        
2000-08-21 00:00:00+00:00    -0.153226  -0.076613
2001-02-12 00:00:00+00:00    0.000000    0.000000
2002-10-29 00:00:00+00:00    0.246155    0.030769
2003-02-12 00:00:00+00:00    0.231884    0.014493
2003-03-12 00:00:00+00:00    1.548386    0.048387

Мой вопрос на самом деле заключается в том, как мне рассчитать серии возвратов, чтобы представить силу предоставленного сигнала покупки (True/ False Series или Datetimeindex) в пандах?

1 ответ

У вас недостаточно информации для проведения тестирования на истории. Ваша "стратегия" в настоящее время просто имеет значение True или False. Когда это правда, сколько вы хотите купить? Если это правда два раза подряд, значит ли это, что покупай и держи или покупай одновременно? Ложь означает ликвидировать или не покупать?

Вам нужно:

  1. Переведите ваш сигнал в "количество в t"
  2. Затем проверьте, каков результат удержания этого количества.
  3. Не забывайте измерять

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

Другие вопросы по тегам