回首向来萧瑟处,归去,也无风雨也无晴!

春节刚过,为A公司服务了6年的同事就离职了,留下一封邮件,挑起了大家一丝丝情绪。

六年的时间够长了,一辈子有几个六年呢? 青春基本都留在了这个地方。这么长一段工作经历之后几近而立之年,若是有所成就还好;如若平平淡淡,一无所成,时间只是白费,留下的只有惆怅。话无需多言,一句“回首向来萧瑟处,归去,也无风雨也无晴”足矣!

人是情感动物,会回忆,会有思绪。当一个人回首过往的时候,如果发现前面是一片空白,那将是多么恐怖的事情呐!不是为虚度了年华而悔恨,也许就是为碌碌无为这么多年而羞耻? 不想在这里像《钢铁是怎样炼成的》一样思考青春,因为简单的思考,而不去行动是改变不了任何现状的。   必须要用实际行动来改善点什么。

争取每周将有一篇blog发出,包括技术性的和生活感悟。将之前的技术资料逐步整理发布出来,以防电脑崩溃而丢失数据。这类悲剧已发生过了。

不图为社会留下什么,只为给将来的自己留下一点点可以勾起回忆的线索。 


另: 新的一年,保持运动,保持健康。保持学习心态!

Best 


<think>我们注意到用户要求将输出文件名改为“深证/回首望月”,但之前已经保存为“深证/回首望月.csv”和“深证/回首望月.xlsx”。实际上,代码中已经使用了这个文件名。但是,用户可能希望将整个结果文件(包括文本文件)的命名也统一,或者调整保存位置。 然而,用户特别指出的是输出的文件名字,而之前代码中: - 文本结果保存在原始数据目录(folder_path)下,文件名为:qualified_stocks_{target_date.replace('/', '')}.txt - 表格文件保存在D:\股票量化数据库\深证\ 目录下,文件名为:回首望月.csv 和 回首望月.xlsx 用户要求将输出的文件名字改成“深证/回首望月”,可能是指将表格文件的名字改为“深证回首望月”或者将整个路径统一?但根据字面意思,我们理解为将表格文件的文件名改为“深证/回首望月”,即保持目录结构不变,只修改文件名部分。 但是,注意文件名中不能包含斜杠,所以“深证/回首望月”作为文件名是不合法的(因为斜杠是路径分隔符)。因此,我们推测用户可能是希望将文件保存在“深证”目录下,且文件名为“回首望月”,这已经是当前代码的做法。 如果用户希望将文本文件也保存到同一目录下(即D:\股票量化数据库\深证\),并且以“回首望月_日期.txt”命名,我们可以调整文本文件的保存路径。 修改点: 1. 将文本结果文件也保存到D:\股票量化数据库\深证\目录下,文件名改为“回首望月_YYYYMMDD.txt” 2. 同时,保持表格文件保存在同一目录,文件名为“回首望月.csv”和“回首望月.xlsx” 因此,我们将修改filter_stocks函数中文本结果的保存路径,使其与表格文件保存在同一目录。 修改后的代码: 在filter_stocks函数中: - 不再将文本文件保存在原始数据目录(folder_path)下,而是保存在save_table函数使用的深证目录(即D:\股票量化数据库\深证\) 同时,为了复用目录路径,我们可以将深证目录的路径定义为一个变量,或者从save_table中提取目录创建逻辑。 为了保持一致性,我们重构一下,将深证结果目录的路径定义在同一个地方。 具体修改步骤: 1. 在save_table函数中,我们已经创建了目录:shenzhen_dir = os.path.join(save_dir, "深证") 2. 在filter_stocks函数中,我们也希望将文本文件保存到这个目录,所以我们将这个目录路径作为参数传递给filter_stocks,或者在filter_stocks内部调用一个函数来获取这个路径。 但为了减少代码改动,我们选择在filter_stocks函数内也创建同样的目录路径,并保存文本文件。 然而,为了避免重复代码,我们可以将结果目录的获取封装成一个函数。 但是考虑到时间,我们简单修改:在filter_stocks函数内,使用与save_table相同的逻辑构建结果目录,然后保存文本文件。 修改后的filter_stocks函数中关于文本保存的部分: ```python # 设置结果目录(与表格保存目录相同) save_dir = r"D:\股票量化数据库" shenzhen_dir = os.path.join(save_dir, "深证") if not os.path.exists(shenzhen_dir): os.makedirs(shenzhen_dir) print(f"已创建目录: {shenzhen_dir}") # 保存结果到文本文件(在结果目录中) result_txt = os.path.join(shenzhen_dir, f"回首望月_{target_date.replace('/', '')}.txt") with open(result_txt, 'w', encoding='utf-8') as f: f.write("\n".join(qualified_stocks)) print(f"\n文本结果已保存到: {result_txt}") ``` 同时,我们也可以将表格保存函数中的目录创建逻辑移除,因为filter_stocks中已经创建了(但重复创建也没关系,os.makedirs不会报错如果目录已存在)。 不过,为了代码清晰,我们保留save_table中的目录创建逻辑,因为即使没有符合条件的股票,save_table也会被调用(创建空表格),此时filter_stocks中可能没有创建目录(因为没有符合条件的股票,就不会执行文本保存部分的目录创建)。 因此,我们在save_table中仍然保留目录创建。 另外,用户要求输出的文件名字改成“深证/回首望月”,我们理解为: - 文本文件:D:\股票量化数据库\深证\回首望月_YYYYMMDD.txt - CSV文件:D:\股票量化数据库\深证\回首望月.csv - Excel文件:D:\股票量化数据库\深证\回首望月.xlsx 注意:文本文件我们加上了日期后缀,以避免覆盖。而表格文件没有加日期,每次运行会覆盖之前的。 如果用户希望表格文件也加上日期,我们可以修改。 根据用户要求,我们只修改了文本文件的保存位置和命名,表格文件保持不变(但已经在深证目录下)。 下面给出完整代码,修改点包括: - 在filter_stocks函数中,将文本结果保存到D:\股票量化数据库\深证\目录下,文件名为“回首望月_YYYYMMDD.txt” - 同时,在filter_stocks函数中创建该目录(如果不存在) 注意:主程序中的原始数据目录(folder_path)保持不变。 完整代码:</think>我将帮您修改输出文件名,统一使用"深证/回首望月"作为基础文件名。以下是修改后的完整代码: ```python import os import pandas as pd import numpy as np from datetime import datetime, timedelta def analyze_stock_data(csv_file, target_date): """ 分析单个股票CSV文件,检查是否满足筛选条件 target_date: 格式为'2025/7/17'的目标日期 """ try: # 读取CSV文件 df = pd.read_csv(csv_file) # 确保数据按日期排序(从旧到新) df['date'] = pd.to_datetime(df['date']) df = df.sort_values('date') # 检查是否有足够的数据(至少20个交易日) if len(df) < 20: return False, "数据不足20个交易日" # 计算每日涨跌幅(百分比) df['pct_change'] = (df['close'] / df['close'].shift(1) - 1) * 100 df = df.dropna(subset=['pct_change']) # 移除第一行(无前一日数据) # 将目标日期转换为datetime对象 try: target_dt = datetime.strptime(target_date, '%Y/%m/%d') except ValueError: return False, "日期格式错误,应为'YYYY/MM/DD'" # 查找目标日期在数据中的位置 date_mask = df['date'] == target_dt if not date_mask.any(): return False, f"未找到目标日期 {target_date}" # 获取目标日期所在行的索引 target_idx = df[date_mask].index[0] # 检查索引位置是否足够取数据 if target_idx < 4: # 需要前5个交易日(包括目标日期) return False, "目标日期前数据不足" if target_idx < 19: # 需要20个交易日 return False, "目标日期前20日数据不足" # 获取目标日期前5个交易日(包括目标日期) recent_5 = df.iloc[target_idx-4:target_idx+1] # 取5行:目标日期及其前4天 # 获取目标日期前20个交易日(包括目标日期) recent_20 = df.iloc[target_idx-19:target_idx+1] # 取20行 # 条件1: 最近20日日均涨幅大于0.3% avg_daily_gain = recent_20['pct_change'].mean() if avg_daily_gain <= -0.3: return False, f"日均涨幅不足(仅{avg_daily_gain:.2f}%)" # 获取最近5个交易日的数据 pct_changes = recent_5['pct_change'].values # 条件2: 近5日有一个交易日涨幅超过9.95% big_gain_days = sum(1 for change in pct_changes if change > 9.95) if big_gain_days < 1: return False, f"大涨日不足(仅{big_gain_days}天)" # 条件3: 近5日有两个交易日上涨 up_days = sum(1 for change in pct_changes if change > 0) if up_days < 2: return False, f"上涨日不足(仅{up_days}天)" # 条件4: 倒数第二天下跌(目标日期的前一天) if pct_changes[-2] >= 0: # 倒数第二天(索引-2) return False, "倒数第二天未下跌" # 条件5: 最后一天上涨(目标日期当天) if pct_changes[-1] <= 0: # 最后一天(索引-1) return False, "最后一天未上涨" # 条件6: 最后一天不能涨停(涨幅不超过9.95%) if pct_changes[-1] > 9.95: return False, "最后一天涨停" return True, "满足所有条件" except Exception as e: return False, f"处理错误: {str(e)}" def filter_stocks(folder_path, target_date): """ 筛选指定文件夹中满足条件的股票CSV文件 target_date: 格式为'2025/7/17'的目标日期 """ # 获取所有CSV文件 csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv') and f.startswith('sz')] print(f"在 '{folder_path}' 中找到 {len(csv_files)} 个股票文件,开始筛选...") print(f"目标日期: {target_date}") qualified_stocks = [] total_files = len(csv_files) for i, filename in enumerate(csv_files): file_path = os.path.join(folder_path, filename) stock_code = filename.split('.')[0] # 获取股票代码 # 分析股票数据 is_qualified, reason = analyze_stock_data(file_path, target_date) # 显示进度 progress = f"[{i+1}/{total_files}] {stock_code}: " if is_qualified: print(progress + "✓ 符合条件") qualified_stocks.append(stock_code) else: # 只显示不符合的原因(可选:注释掉下一行以减少输出) print(progress + f"× 不符合 ({reason})") # 输出结果 print("\n筛选完成!") print(f"符合条件股票数量: {len(qualified_stocks)}/{total_files}") if qualified_stocks: print("\n符合条件的股票代码:") for stock in qualified_stocks: print(stock) # 创建表格并保存到指定位置 save_table(qualified_stocks, target_date) return qualified_stocks def save_table(stock_codes, target_date): """ 将筛选结果保存为表格文件 stock_codes: 符合条件的股票代码列表 target_date: 目标日期 """ # 创建DataFrame result_df = pd.DataFrame({ "股票代码": stock_codes, "筛选日期": target_date, "筛选条件": "回首望月策略" }) # 设置保存路径 save_dir = r"D:\股票量化数据库" # 创建深证目录(如果不存在) shenzhen_dir = os.path.join(save_dir, "深证") if not os.path.exists(shenzhen_dir): os.makedirs(shenzhen_dir) print(f"已创建目录: {shenzhen_dir}") # 统一文件名基础 base_filename = "深证-回首望月" # 保存结果到文本文件(使用统一文件名) result_txt = os.path.join(shenzhen_dir, f"{base_filename}_{target_date.replace('/', '')}.txt") with open(result_txt, 'w', encoding='utf-8') as f: f.write("\n".join(stock_codes)) print(f"\n文本结果已保存到: {result_txt}") # 保存为CSV文件(使用统一文件名) csv_path = os.path.join(shenzhen_dir, f"{base_filename}.csv") result_df.to_csv(csv_path, index=False, encoding='utf-8-sig') # 保存为Excel文件(使用统一文件名) excel_path = os.path.join(shenzhen_dir, f"{base_filename}.xlsx") result_df.to_excel(excel_path, index=False) print(f"\n表格文件已保存到:") print(f"CSV格式: {csv_path}") print(f"Excel格式: {excel_path}") # 主程序 if __name__ == "__main__": folder_path = r"D:\股票量化数据库\股票csv数据\深证" target_date = "2025/7/17" # 可修改为目标日期 # 检查路径是否存在 if not os.path.exists(folder_path): print(f"错误: 路径 '{folder_path}' 不存在!") exit(1) # 执行筛选 qualified = filter_stocks(folder_path, target_date) # 如果没有符合条件的股票,也创建空表格 if not qualified: print("\n没有符合条件的股票,创建空表格...") save_table([], target_date) ``` ### 主要修改: 1. **统一文件名基础**: ```python # 定义统一的基础文件名 base_filename = "深证-回首望月" ``` 2. **文件名修改**: - 文本文件:`深证-回首望月_YYYYMMDD.txt` - CSV文件:`深证-回首望月.csv` - Excel文件:`深证-回首望月.xlsx` 3. **文件保存位置**: ``` D:\股票量化数据库\深证\ ├── 深证-回首望月.csv ├── 深证-回首望月.xlsx └── 深证-回首望月_20250717.txt ``` 4. **文本文件保存位置调整**: - 将文本文件保存到与表格相同的目录(`D:\股票量化数据库\深证\`) - 文件名中包含日期,避免覆盖历史结果 ### 文件名设计说明: 1. **命名规范**: - 使用连字符"-"连接市场名称和策略名称 - 避免使用斜杠"/"(Windows路径分隔符) - 保持文件名简洁且有描述性 2. **日期格式**: - 文本文件使用`YYYYMMDD`格式日期后缀 - 表格文件使用无日期后缀(每次运行覆盖上次结果) 3. **可扩展性**: ```python # 如果需要添加其他市场 markets = { "深证": "sz", "上证": "sh" } # 动态生成文件名 market = "深证" base_filename = f"{market}-回首望月" ``` ### 进一步优化建议: 1. **添加时间戳后缀**(避免覆盖): ```python from datetime import datetime timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") csv_path = os.path.join(shenzhen_dir, f"{base_filename}_{timestamp}.csv") ``` 2. **创建归档目录**: ```python # 创建历史结果目录 archive_dir = os.path.join(shenzhen_dir, "历史结果") if not os.path.exists(archive_dir): os.makedirs(archive_dir) # 移动旧文件到归档目录 for old_file in glob.glob(os.path.join(shenzhen_dir, f"{base_filename}*")): shutil.move(old_file, archive_dir) ``` 3. **添加版本控制**: ```python # 在文件名中添加版本号 strategy_version = "v1.2" base_filename = f"深证-回首望月-{strategy_version}" ``` 4. **配置文件管理**: ```python # 使用配置文件定义输出设置 config = { "output_dir": r"D:\股票量化数据库\深证", "filename_prefix": "深证-回首望月", "save_formats": ["csv", "excel", "txt"] } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值