如何找到股票每个交易日的低点?

Posted

技术标签:

【中文标题】如何找到股票每个交易日的低点?【英文标题】:How to find the lows of a stock for each trading day? 【发布时间】:2021-04-10 09:41:23 【问题描述】:

所以我有一个包含 Microsoft 分钟股票数据的 csv。我试图找到每个交易日的低点。代码如下:

ticker='MSFT'
df = pd.read_csv('/Volumes/Seagate Portable/S&P 500 List/.txt'.format(ticker))
df.columns = ['Extra', 'Dates', 'Open', 'High', 'Low', 'Close', 'Volume']
df.Dates = pd.to_datetime(df.Dates)
df.set_index(df.Dates, inplace=True)
df.drop(['Extra', 'High', 'Volume', 'Dates', 'Open'], axis=1, inplace=True)
df = df.between_time('9:30', '16:00')
df['Low'] = df.Low.groupby(by=[df.index.day]).min()
df

输出是:

                     Low    Close
Dates       
2020-01-02 09:30:00 NaN 158.610
2020-01-02 09:31:00 NaN 158.380
2020-01-02 09:32:00 NaN 158.620
2020-01-02 09:33:00 NaN 158.692
2020-01-02 09:34:00 NaN 158.910
... ... ...
2020-12-18 15:56:00 NaN 218.700
2020-12-18 15:57:00 NaN 218.540
2020-12-18 15:58:00 NaN 218.710
2020-12-18 15:59:00 NaN 218.150
2020-12-18 16:00:00 NaN 218.500

所以问题是低点充满了 NaN 值,我想这是因为我错过了使用 groupby。我也试过:

ticker='MSFT'
df = pd.read_csv('/Volumes/Seagate Portable/S&P 500 List/.txt'.format(ticker))
df.columns = ['Extra', 'Dates', 'Open', 'High', 'Low', 'Close', 'Volume']
df.Dates = pd.to_datetime(df.Dates)
df.set_index(df.Dates, inplace=True)
df.drop(['Extra', 'High', 'Volume', 'Dates', 'Open'], axis=1, inplace=True)
df = df.between_time('9:30', '16:00')
df = df.groupby(by=[df.index.day]).min()
df

对此的输出是:

         Low    Close
Dates       
1   150.8200    150.9800
2   150.3600    150.8400
3   152.1900    152.2800
4   165.6200    165.7000
5   165.6900    165.8200
6   156.0000    156.0700
7   157.3200    157.3500
8   157.9491    158.0000
9   150.0000    150.2700
10  152.5800    152.7950
11  151.1500    151.1930
12  138.5800    138.7600
13  140.7300    140.8700
14  161.7200    161.7500
15  162.5700    162.6300
16  135.0000    135.3300
17  135.0000    135.3400
18  135.0200    135.2600
19  139.0000    139.1300
20  135.8600    136.5900
21  166.1102    166.2100
22  165.6800    165.6900
23  132.5200    132.7100
24  141.2700    141.6481
25  144.4400    144.8102
26  148.3700    149.7000
27  149.2000    149.2700
28  152.0000    153.8152
29  165.6900    165.7952
30  150.0100    152.7200
31  156.5600    157.0450

问题在于它找到了收盘价和开盘价的低点。此外,总共只有 31 行,尽管应该有更多行,因为这是 2020 年全年的数据集。我假设这样做我分组错误,因为我查看了前 31 天每天的收盘价,并且有不可能这些都是那些日子的最低点。所以问题是如何在不影响收盘列的情况下找到每天的低点,并避免上述问题?

【问题讨论】:

"dates" 是你的索引还是列? 这是我的索引,虽然我相信它因为 groupby 函数而改变了 【参考方案1】:

试试这个:

unique_dates = list(set([str(date).split()[0] for date in df.index]))

min_values_daily = [min(df.loc[df.index==date].Close) for date in unique_dates] 

最后,创建一个新的数据框:

low_data = pd.DataFrame(
     'date': unique_dates,
     'low': min_values_daily
)

【讨论】:

这给了我错误TypeError: unhashable type: 'numpy.ndarray' 是的,我修好了。我的错误是在 .loc 中使用 () 而不是 [] 好的,我没有收到任何错误,但是输出是一个每分钟都有一个低值的数据帧。它们是不同的,这让我相信它只是打印出每分钟的低点,而不是找到每一天的低点。有没有办法解决这个问题? 请在评论中打印出变量 unique_list。我想错误来自那里 好的,根据您的代码,我能够找到一个可行的解决方案,所以我将其标记为答案

以上是关于如何找到股票每个交易日的低点?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到A股的所有股票的代码?比如网址或URL等

matlab 如何从wind中获取股票数据 收盘 开盘 最高 最低 交易量

股票交易

自研股票智能分析报警软件更新链接

量化交易多因子的筛选阶段介绍

半量化交易