我正在從加密交換中獲取時間序列資料并將它們存盤在資料幀中。我想在回測和實時交易中使用這個資料框。資料框有一個“關閉”價格列,我想檢查最后 4 個“關閉”價格是否嚴格增加。
所以如果給定的資料幀是:
index time open high low close volume
1 1618618500000 61648.9 61695.3 61188.4 61333.2 72.375605
2 1618619400000 61333.1 61396.4 61144.2 61200.0 52.882392
3 1618620300000 61200.0 61509.4 61199.9 61446.2 48.429485
4 1618621200000 61446.2 61764.7 61446.2 61647.4 83.822974
5 1635909300000 63006.2 63087.2 62935.0 63081.9 35.265568
6 1635910200000 63081.9 63214.5 62950.1 63084.0 41.213263
7 1635911100000 63084.0 63236.0 63027.6 63213.9 32.429295
8 1635912000000 63213.8 63213.8 63021.5 63024.1 47.032509
9 1635912900000 63024.1 63091.4 62852.1 62970.7 84.098123
10 1635904800000 63133.8 63133.8 62744.1 62874.7 85.604461
11 1635905700000 62874.7 62970.8 62853.0 62945.5 56.390176
12 1635906600000 62942.1 63089.9 62935.0 63089.9 44.340149
13 1635907500000 63089.9 63217.0 63013.6 63156.2 50.565914
14 1635908400000 63156.2 63156.2 62994.7 63006.2 60.634036
15 1635909300000 63006.2 63087.2 62935.0 63081.9 35.265568
16 1635910200000 63081.9 63214.5 62950.1 63084.0 41.213263
17 1635911100000 63084.0 63236.0 63027.6 63213.9 32.429295
18 1635912000000 63213.8 63213.8 63021.5 63024.1 47.032509
19 1635912900000 63024.1 63091.4 62852.1 62970.7 84.098123
然后我想做
index time open high low close volume monotonic_inc
1 1618618500000 61648.9 61695.3 61188.4 61333.2 72.375605 NAN
2 1618619400000 61333.1 61396.4 61144.2 61200.0 52.882392 NAN
3 1618620300000 61200.0 61509.4 61199.9 61446.2 48.429485 NAN
4 1618621200000 61446.2 61764.7 61446.2 61647.4 83.822974 NAN
5 1635909300000 63006.2 63087.2 62935.0 63081.9 35.265568 False
6 1635910200000 63081.9 63214.5 62950.1 63084.0 41.213263 True
7 1635911100000 63084.0 63236.0 63027.6 63213.9 32.429295 True
8 1635912000000 63213.8 63213.8 63021.5 63024.1 47.032509 False
9 1635912900000 63024.1 63091.4 62852.1 62970.7 84.098123 False
10 1635904800000 63133.8 63133.8 62744.1 62874.7 85.604461 False
11 1635905700000 62874.7 62970.8 62853.0 62945.5 56.390176 False
12 1635906600000 62942.1 63089.9 62935.0 63089.9 44.340149 False
13 1635907500000 63089.9 63217.0 63013.6 63156.2 50.565914 True
14 1635908400000 63156.2 63156.2 62994.7 63006.2 60.634036 False
15 1635909300000 63006.2 63087.2 62935.0 63081.9 35.265568 False
16 1635910200000 63081.9 63214.5 62950.1 63084.0 41.213263 False
17 1635911100000 63084.0 63236.0 63027.6 63213.9 32.429295 True
18 1635912000000 63213.8 63213.8 63021.5 63024.1 47.032509 False
19 1635912900000 63024.1 63091.4 62852.1 62970.7 84.098123 False
我不想使用 .iloc 或任何索引參考,而是更喜歡使用矢量化操作 因為我想在實時交易環境中使用我的程式,所以速度和記憶體效率很重要。
感謝您的時間,感謝您的努力。
我測驗了一個簡單的版本來檢查之前的收盤價:
dataframe['increasing'] = dataframe.apply(lambda x : 1 if dataframe['close'] > dataframe['close'].shift() else 0)
但這回傳了一個錯誤:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
uj5u.com熱心網友回復:
您可以計算diff并在布林值上使用rolling/ sum:
df['increasing'] = df['close'].diff().gt(0).rolling(3).sum().eq(3)
注意。我不確定您的示例輸出
uj5u.com熱心網友回復:
您可以使用視窗函式并檢查視窗上的單調性 -
def check_list_monotonic_increase(lst):
lst = list(lst)
return all(lst[i] < lst[i 1] for i in range(len(lst) - 1))
s = pd.Series(np.random.rand(10))
#0 0.963020
#1 0.121435
#2 0.694150
#3 0.269287
#4 0.390505
#5 0.641838
#6 0.771216
#7 0.909652
#8 0.791609
#9 0.382845
s.rolling(4).agg(check_list_monotonic_increase)
#0 NaN
#1 NaN
#2 NaN
#3 0.0
#4 0.0
#5 0.0
#6 1.0
#7 1.0
#8 0.0
#9 0.0
uj5u.com熱心網友回復:
df['increasing'] = np.where(df['close'] > df['close'].shift(), 1, 0)
此代碼將創建一個名為“increasing”的新列。當今天的“收盤”價格大于昨天的“收盤”價格時,它將顯示 1,如果不是,則顯示 0。
從numpy.where 檔案:
如果為 True,則產生 x,否則產生 y。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353681.html
