買いシグナルを DatetimeIndex として提供して ohlc の引用符 DataFrame (調整された終値) をチェックすることで、pandas で簡単かつ迅速なバックテストを実行したいと考えていますが、これが正しいかどうかはわかりません。
明確にするために、保有期間全体にわたるすべてのスワッピング買いシグナル (および株式リターンも?) の累積リターンを計算したいと思います。その後、単純なシャープ関数を使用していくつかの計算を比較したいと思います。これは、パンダで購入信号をすばやく簡単にテストする正しい方法ですか?
どんな助けでも大歓迎です!
シグナル:
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
バックテスト:
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 シリーズまたは Datetimeindex) の強さを表すために、返品シリーズをどのように計算する必要があるかということです。