程式

在python中將時間條轉換為刻度條或成交量條

  • May 30, 2020

最近我開始閱讀Marcos Lopez de Prado的《金融機器學習進展》 。yfinance在第二章中,作者定義了一些基本的金融資料結構,如刻度條、成交量條等。我想知道如何將使用lib for獲取的一系列外匯數據的每日收益轉換python 3.7為任何類型的這些條德普拉多提到。

下面,我將留下我用來獲取數據的片段。

import yfinance as yf

df = yf.Ticker("BRL=X").history(period='max').Close.pct_change().dropna()

正如我在評論中提到的,報價數據是單個報價和交易;雅虎只有每日數據。打個比方,你總是可以讓一張高畫質照片更加模糊和像素化,但你不能為一張糟糕的照片添加細節和清晰度。每日數據只是單個報價的匯總,因此您無法從每日數據中獲取單個報價。

您將需要不同的報價數據來源,這些來源通常是商業的。(畢竟,供應商會賣給專業交易員。)

話雖如此,一旦你得到了一些分時數據,聚合就非常簡單了。我在這裡包含了一些Pandas程式碼以供後代使用;這假設一個交易數據框包含價格大小列,由時間戳索引。

時間條

只要給你想要的頻率。以下是五分鐘柱的範例:

trades.groupby(pd.Grouper(freq="5min")).agg({'price': 'ohlc', 'size': 'sum'})

刻度條

我們將定義一個輔助函式來四捨五入到最接近的整數:

def bar(xs, y): return np.int64(xs / y) * y

然後按數據框行號的條形分組。下面是一個 10 刻度條的範例:

trades.groupby(bar(np.arange(len(trades)), 10)).agg({'price': 'ohlc', 'size': 'sum'})

音量條

按累積交易量的條形分組。以下是交易n股的範例:

trades.groupby(bar(np.cumsum(trades['size']), n)).agg({'price': 'ohlc', 'size': 'sum'}

引用自:https://quant.stackexchange.com/questions/54471