鱼C论坛

 找回密码
 立即注册
查看: 2354|回复: 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
您好!根据您的需求,我给出了一个解决方案。在这个方案中,我们首先需要找到每个日期是否为交易日,然后将“准备提交日期”转换为“股票交易日”。以下是一个示例代码:
import pandas as pd
from datetime import datetime, timedelta

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)

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

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

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

print(df)

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

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

希望对您有所帮助!如果您有任何疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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)

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

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

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

print(df)

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

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

希望对您有所帮助!如果您有任何疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬好,我想知道你用的是哪个chatgpt镜像站?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我不用镜像站,用的是官方的站
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你没被封?
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

没有呀,你咋就被封了,你不是因为网络问题访问不了官方的站吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

https://fishc.com.cn/thread-226483-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-17 11:05:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

6楼楼主在求救
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

def is_tradeday(date):

@isdkz
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


他应该不是求助,是找到了更好的方法,我可以给出代码解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

用他的帖子内容问问机器人
想知道小甲鱼最近在做啥?请访问 -> 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() 函数并打印结果。

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

# 定义接受日期作为输入的 is_tradeday() 函数
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

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

# 打印交易日
print(tdate)

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

执行代码后,您应该看到输出:
2023-04-17

这表明 2023 年 4 月 15 日之后的下一个交易日是 2023 年 4 月 17 日。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 09:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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