鱼C论坛

 找回密码
 立即注册
查看: 3269|回复: 13

[已解决]关于求股票交易日的问题,求帮忙,谢谢

[复制链接]
发表于 2023-4-17 10:34:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import pandas as pd

data = [["2022-12-21",""],["2022-12-20",""],["2022-12-19",""],
["2022-12-18",""],["2022-12-17",""],
["2022-12-16",""],["2022-12-12",""]]
columns = ["准备提交日期","股票交易日"]
df = pd.DataFrame(data, columns=columns)

df
#想把准备提交日期转化为股票交易日,即准备日当天如果是交易日,那股票交易日就等于准备日
                                  如果准备日不是交易日,就计算准备日后几天是交易日,如准备日是2023/4/15日,那交易日就是2023/4/17

求大师帮忙,谢谢
最佳答案
2023-4-17 10:36:58
您好!根据您的需求,我给出了一个解决方案。在这个方案中,我们首先需要找到每个日期是否为交易日,然后将“准备提交日期”转换为“股票交易日”。以下是一个示例代码:

  1. import pandas as pd
  2. from datetime import datetime, timedelta

  3. data = [["2022-12-21",""],["2022-12-20",""],["2022-12-19",""],
  4. ["2022-12-18",""],["2022-12-17",""],
  5. ["2022-12-16",""],["2022-12-12",""]]
  6. columns = ["准备提交日期","股票交易日"]
  7. df = pd.DataFrame(data, columns=columns)

  8. # 判断是否为交易日
  9. def is_trading_day(date):
  10.     # 周六、周日为非交易日
  11.     if date.weekday() >= 5:
  12.         return False
  13.     # TODO: 您可以在此处添加其他非交易日的判断逻辑,例如法定节假日
  14.     return True

  15. # 获取下一个交易日
  16. def get_next_trading_day(date):
  17.     while not is_trading_day(date):
  18.         date += timedelta(days=1)
  19.     return date

  20. # 转换准备提交日期为股票交易日
  21. for index, row in df.iterrows():
  22.     prepared_date = datetime.strptime(row['准备提交日期'], '%Y-%m-%d').date()
  23.     trading_day = get_next_trading_day(prepared_date)
  24.     df.at[index, '股票交易日'] = trading_day.strftime('%Y-%m-%d')

  25. print(df)
复制代码


此代码中,我定义了两个辅助函数,分别用于判断给定日期是否为交易日(is_trading_day),以及查找给定日期后的第一个交易日(get_next_trading_day)。然后在主循环中,我使用这两个函数将“准备提交日期”转换为“股票交易日”。

请注意,这个示例中我只考虑了周六和周日为非交易日,如果需要考虑其他非交易日,例如法定节假日,您需要在 is_trading_day 函数中添加相应的逻辑。

希望对您有所帮助!如果您有任何疑问,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-17 10:36:58 | 显示全部楼层    本楼为最佳答案   
您好!根据您的需求,我给出了一个解决方案。在这个方案中,我们首先需要找到每个日期是否为交易日,然后将“准备提交日期”转换为“股票交易日”。以下是一个示例代码:

  1. import pandas as pd
  2. from datetime import datetime, timedelta

  3. data = [["2022-12-21",""],["2022-12-20",""],["2022-12-19",""],
  4. ["2022-12-18",""],["2022-12-17",""],
  5. ["2022-12-16",""],["2022-12-12",""]]
  6. columns = ["准备提交日期","股票交易日"]
  7. df = pd.DataFrame(data, columns=columns)

  8. # 判断是否为交易日
  9. def is_trading_day(date):
  10.     # 周六、周日为非交易日
  11.     if date.weekday() >= 5:
  12.         return False
  13.     # TODO: 您可以在此处添加其他非交易日的判断逻辑,例如法定节假日
  14.     return True

  15. # 获取下一个交易日
  16. def get_next_trading_day(date):
  17.     while not is_trading_day(date):
  18.         date += timedelta(days=1)
  19.     return date

  20. # 转换准备提交日期为股票交易日
  21. for index, row in df.iterrows():
  22.     prepared_date = datetime.strptime(row['准备提交日期'], '%Y-%m-%d').date()
  23.     trading_day = get_next_trading_day(prepared_date)
  24.     df.at[index, '股票交易日'] = trading_day.strftime('%Y-%m-%d')

  25. print(df)
复制代码


此代码中,我定义了两个辅助函数,分别用于判断给定日期是否为交易日(is_trading_day),以及查找给定日期后的第一个交易日(get_next_trading_day)。然后在主循环中,我使用这两个函数将“准备提交日期”转换为“股票交易日”。

请注意,这个示例中我只考虑了周六和周日为非交易日,如果需要考虑其他非交易日,例如法定节假日,您需要在 is_trading_day 函数中添加相应的逻辑。

希望对您有所帮助!如果您有任何疑问,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 10:44:07 | 显示全部楼层
isdkz 发表于 2023-4-17 10:36
您好!根据您的需求,我给出了一个解决方案。在这个方案中,我们首先需要找到每个日期是否为交易日,然后将 ...

大佬好,我想知道你用的是哪个chatgpt镜像站?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 10:54:09 | 显示全部楼层
歌者文明清理员 发表于 2023-4-17 10:44
大佬好,我想知道你用的是哪个chatgpt镜像站?

我不用镜像站,用的是官方的站
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 10:54:31 | 显示全部楼层
isdkz 发表于 2023-4-17 10:54
我不用镜像站,用的是官方的站

你没被封?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-17 11:02:09 | 显示全部楼层
import exchange_calendars as xcals

def is_tradeday(date):
    xshg = xcals.get_calendar('XSHG')
    if xshg.is_session(date):
        trade_date = date
    else:
        trade_date = xshg.date_to_session(date, direction='next').strftime("%Y-%m-%d")
    return trade_date


tdate = is_tradeday('2023/4/15')

print(tdate)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 11:02:44 | 显示全部楼层

没有呀,你咋就被封了,你不是因为网络问题访问不了官方的站吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 11:04:11 | 显示全部楼层
isdkz 发表于 2023-4-17 11:02
没有呀,你咋就被封了,你不是因为网络问题访问不了官方的站吗?

https://fishc.com.cn/thread-226483-1-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 11:05:29 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 11:06:30 | 显示全部楼层
isdkz 发表于 2023-4-17 11:05
好吧,我就被封了两个小号,问题不大

6楼楼主在求救
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 11:11:36 | 显示全部楼层
futui 发表于 2023-4-17 11:02
import exchange_calendars as xcals

def is_tradeday(date):

@isdkz
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 11:12:13 | 显示全部楼层


他应该不是求助,是找到了更好的方法,我可以给出代码解释
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 11:13:10 | 显示全部楼层
isdkz 发表于 2023-4-17 11:12
他应该不是求助,是找到了更好的方法

用他的帖子内容问问机器人
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 11:13:45 | 显示全部楼层
futui 发表于 2023-4-17 11:02
import exchange_calendars as xcals

def is_tradeday(date):

在此代码片段中,使用了 exchange_calendars 库来确定给定日期是否是上海证券交易所(XSHG)的交易日。

is_tradeday() 函数接受一个日期作为输入,并检查它是否是交易日。如果是交易日,则返回该日期。

如果不是交易日,则返回下一个交易日。然后,代码使用输入日期 '2023/4/15' 调用 is_tradeday() 函数并打印结果。

以下是带有注释的代码,以便更好地理解:

  1. import exchange_calendars as xcals

  2. # 定义接受日期作为输入的 is_tradeday() 函数
  3. def is_tradeday(date):
  4.     # 获取上海证券交易所的日历
  5.     xshg = xcals.get_calendar('XSHG')
  6.    
  7.     # 检查输入日期是否为交易日
  8.     if xshg.is_session(date):
  9.         trade_date = date
  10.     else:
  11.         # 如果不是交易日,则获取下一个交易日
  12.         trade_date = xshg.date_to_session(date, direction='next').strftime("%Y-%m-%d")
  13.    
  14.     # 返回交易日
  15.     return trade_date

  16. # 用输入日期调用 is_tradeday() 函数
  17. tdate = is_tradeday('2023/4/15')

  18. # 打印交易日
  19. print(tdate)
复制代码


请注意,输入日期格式应与库的预期格式保持一致(例如 "YYYY-MM-DD")。在上面的示例中,您提供的日期为 '2023/4/15'。我建议将其更改为 '2023-04-15' 以保持一致:

  1. tdate = is_tradeday('2023-04-15')
复制代码


执行代码后,您应该看到输出:

  1. 2023-04-17
复制代码


这表明 2023 年 4 月 15 日之后的下一个交易日是 2023 年 4 月 17 日。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 20:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表