当我们需要将分钟数据转换为日常数据时,我们使用以下代码
df.resample('D').apply({'low': lambda s: s.min(),'high': lambda s: s.max(),'volume': lambda s: s.sum()}).dropna() 它每天给我一支日用的蜡烛。现在我要看的不是给我一根蜡烛,而是给我那天所有的蜡烛(每日一支),中间状态。
假设一天从9:30开始,在16:00关闭,因此第一个每日蜡烛将具有9:30分钟的打开/高/低/关闭,在9:31打开将是9:30关闭将是9:31,高,低将被比较并相应地更新。
这是我需要的市场回放功能,以便用户可以看到谁每天的烛光是在一天中的数据开始得到变化。
任何帮助都将不胜感激。
发布于 2020-06-12 18:55:43
我第一次误解了你的问题,现在为你提供一个新的答案。
首先,让我们获取一些数据:
import yfinance as yf
ticker = "msft"
df = yf.download(ticker, period="4d", interval="1m",)
df = df.loc[:, ["Open", "High", "Low", "Close", "Volume"]]让我们创建一个名为df1的新数据帧,它将保存您的结果。由于这是最后一段数据,因此每个条形图的结束线都是相同的,因此我们将从这条线开始。
df1 = pd.DataFrame()
df1["Close"] = df["Close"]如果我们按日期分组,那么open将始终是该日期的第一个值。
df1["Open"] = df.groupby(pd.Grouper(level=0, freq="D"))["Open"].transform("first")到目前为止,我们有:
Close Open
Datetime
2020-06-10 09:30:00-04:00 191.260 191.125
2020-06-10 09:31:00-04:00 191.260 191.125
2020-06-10 09:33:00-04:00 191.405 191.125
2020-06-10 09:34:00-04:00 191.490 191.125
2020-06-10 09:35:00-04:00 191.510 191.125
... ... ...
2020-06-15 15:55:00-04:00 188.690 184.580
2020-06-15 15:56:00-04:00 188.700 184.580
2020-06-15 15:57:00-04:00 188.610 184.580
2020-06-15 15:58:00-04:00 188.470 184.580
2020-06-15 15:59:00-04:00 189.170 184.580使用扩展来计算低值和高值。
df1["Low"] = (
df.groupby(pd.Grouper(level=0, freq="D"))["Low"].expanding().min().droplevel(0)
)
df1["High"] = (
df.groupby(pd.Grouper(level=0, freq="D"))["High"].expanding().max().droplevel(0)
)最后,可以使用cumsum over groupby date来计算体积。
df1["Volume"] = df.groupby(pd.Grouper(level=0, freq="D"))["Volume"].cumsum()您的最终数据帧如下所示:
print(df1[["Open", "High", "Low", "Close", "Volume"]])
Open High Low Close Volume
Datetime
2020-06-10 09:30:00-04:00 191.125 191.390 191.010 191.260 965121
2020-06-10 09:31:00-04:00 191.125 191.450 191.010 191.260 1112327
2020-06-10 09:33:00-04:00 191.125 191.590 191.010 191.405 1433916
2020-06-10 09:34:00-04:00 191.125 191.590 191.010 191.490 1566392
2020-06-10 09:35:00-04:00 191.125 191.800 191.010 191.510 1759454
... ... ... ... ... ...
2020-06-15 15:55:00-04:00 184.580 190.820 184.010 188.690 26253657
2020-06-15 15:56:00-04:00 184.580 190.820 184.010 188.700 26477100
2020-06-15 15:57:00-04:00 184.580 190.820 184.010 188.610 26738140
2020-06-15 15:58:00-04:00 184.580 190.820 184.010 188.470 27120167
2020-06-15 15:59:00-04:00 184.580 190.820 184.010 189.170 27933060
[1421 rows x 5 columns]https://stackoverflow.com/questions/62340772
复制相似问题