Category: Uncategorized

  • 均线选股用前复权

    这是因为你在用 akshare 抓取A股历史行情数据,其中: pythonCopyEditdf = ak.stock_zh_a_hist(symbol=code, period=”daily”, adjust=”qfq”) 这一行代码的作用是: 📌 含义拆解 参数 说明 symbol=code 股票代码,比如 “000001.SZ”。你可以循环传入不同的股票代码。 period=”daily” 表示获取的是日线数据(可选还有 “weekly”, “monthly” 等)。 adjust=”qfq” 复权方式,qfq 表示前复权,保持价格连贯性(推荐用于技术分析)。 ✅ 为什么用 adjust=”qfq”(前复权)? 在股票历史数据中,有分红送股、拆股等事件,会让“收盘价”出现突变。 前复权(qfq) 会将历史价格向前调整,以便股价曲线连续、平滑,更适合用于: 例如,假如 2024 年公司送股 10 股,股价从 20 元瞬间掉到 10 元: ✅ 如果不复权会怎样? 🎯 总结 使用: pythonCopyEditak.stock_zh_a_hist(symbol=code, period=”daily”, adjust=”qfq”) 是因为你希望获得: Read more

  • 为什么多头分析不用后复权?

    很好的问题!你提到的“为什么不是后复权”,其实触及到了技术分析 vs 实际投资的核心区别。 🔍 前复权 vs 后复权:核心差别 项目 前复权(qfq) 后复权(hfq) 调整方向 把历史价格调整到当前价位 把当前价格调整到历史价位 适用场景 ✅ 技术分析、趋势判断、绘图 ✅ 模拟买入持仓后资产增长,用于真实投资回测 图形走势 平滑连续,技术指标不会突跳 当前价格会变小,历史价格更接近真实当时买入成本 示例 历史价格被“调低”,跟现价连贯 当前价格被“调高”,用于还原你当年买入时的走势 均线分析 ✅ 推荐(用于判断多头排列等) ❌ 不推荐(会让均线走势偏离真实结构) 🎯 为什么技术分析用前复权? 技术指标(如均线、MACD、布林带、你现在提到的多头排列)强调的是价格形态的连续性。 使用**前复权(qfq)**的优势: ❌ 为什么后复权不适合技术分析? ✅ 那什么时候用“后复权”? 如果你是为了: 那就该用: pythonCopyEditadjust=”hfq” # 后复权 ✍️ 总结一句话: 技术分析(均线、多头排列、K线分析)用前复权,回测资产收益/策略净值用后复权。 Read more

  • 所以股价变换,sigmoid,softmax,tanh都不好

    你说得很有道理:在处理股价这类回归问题(连续值预测)时,sigmoid、softmax、tanh 这些非线性函数通常不是首选的变换方式**。 🚫 为什么这些激活函数不适合直接处理股价: 函数 范围 用途 为什么不适合预测股价 sigmoid (0, 1) 二分类/概率输出 会把数值压缩到 (0,1),丢失价格尺度信息 tanh (-1, 1) 中心对称/情绪类模型 同样压缩幅度大,难以还原价格本身 softmax 所有值加和为1 多分类,输出概率分布 完全不适合回归,输出的是类别分布概率 ✅ 那股价处理用什么? 预测股价属于回归问题,目标是还原一个真实的连续值。 推荐方法: 方法 说明 不加激活函数 回归模型最后一层通常直接输出线性值 标准化/归一化输入 比如 MinMaxScaler 或 StandardScaler log return 对数收益率,适合处理价格的相对变化 🎯 所以应该怎么做? Read more

  • 模型保存

    ✅ 用 .pth 保存的只是模型的权重参数(state_dict)❌ 并不会保存模型的结构(即 class MyModel(nn.Module): … 的代码) ✅ 解决方法:保存整个模型对象(包括结构 + 权重) PyTorch 提供了另一种方式: pythonCopyEdit# 保存完整模型对象(包含结构和参数) torch.save(model, ‘models/full_model.pt’) 加载时: pythonCopyEdit# 加载完整模型(不需要再次定义 class) model = torch.load(‘models/full_model.pt’) model.eval() ✅ 优点 vs 缺点 方法 保存结构 灵活性 推荐用途 torch.save(model.state_dict()) ❌ 高 通常训练 & 复现 torch.save(model) ✅ 低 快速部署 / demo ❗ 需要注意的是:torch.save(model) 这种方式使用了 Python 的 pickle,因此保存/加载时 模型定义代码必须在内存中或不能缺失依赖环境,对长期部署和迁移性略差。 ✅ Read more

  • 股票数据如何分训练集和测试集

    ✅ 方法一:固定比例按时间划分(推荐) 比如你有 N 条时间序列样本,按比例切分(例如 80% 训练,20% 测试): pythonCopyEdit# 假设 X 是 (num_samples, window_size, feature_dim) num_samples = X_tensor.shape[0] train_size = int(num_samples * 0.8) X_train = X_tensor[:train_size] y_train = y_tensor[:train_size] X_test = X_tensor[train_size:] y_test = y_tensor[train_size:] ✅ 保持了时间的因果性,训练集早于测试集。 ✅ 方法二:滑动预测 + 留一法(适合在线预测) 每次训练一个滑动窗口,测试的是窗口后面的数据点(适合逐步更新模型)。 例如: textCopyEdit训练用 X[:t],测试 X[t] 然后滑动到 t+1,再训练 X[:t+1],测试 X[t+1] 这个适合模拟真实交易环境,但对训练时间要求较高。 ✅ 方法三:多步预测场景下使用验证集 如果你要做 多步预测(multi-step Read more