Files
cbpred/docs/abstract.md
2026-08-23 10:45:28 +08:00

59 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

我现在有很多品种的K线数据,需要你帮我训练一个机器学习模型,基于8H级别的K线
提取特征,输入最近18个K线(提取bar特征,比如阴线阳线,实体占比,实体的中心位置),
预测未来6个K线的最大回调幅度(相比预测时最新收盘价),有80%概率命中的位置最佳,或者最大回调幅度的大概80%位置。
应该用统一的模型预测所有品种,每个品种的还要提取一些特异信息,比如:
1. 最近18个K线的成交量排名(统一基于法币)
2. 训练数据中所有ATR/价格,降序,前20%的中位数
保留最新10个月的数据作为测试数据,使用此前的数据作为训练数据
核心目标是只使用K线数据,提取特征,结合品种独有特点,训练统一的模型,预测给定品种在任意时刻后续的回调幅度。
特征的选择上面只是一些示例,你应该根据K线特点,考虑还有哪些特征可以构造,哪些比较重要
比如或许可以结合一些指标,比如布林带之类的,但是注意使用指标提取特征时务必注意要进行归一化,确保不同品种的特征可比。
训练数据的某些特征是可以事先提取的,比如上面说到品种的所有训练数据的ATR/价格中位数,这样的特征应该是属于品种独有的特征,每个特征只提取一两个值表示即可,不应该采样过于复杂的数据避免过拟合。
然后在训练模型时,优先使用随机森林算法,也可以对比其他模型算法;
测试数据按品种随机划分为两部分,一部分作为验证集,一部分作为测试集。
我们的K线数据是通过 /home/ctyun/ban/banbot 项目下载维护到postgresql中的
应该只关注U本位合约中的USDT的品种,且上市至少2年;
先通过banbot获取所有符合的品种,下载它的8H的K线确保数据库中完整。
然后基于品种导出数据,方便python进行处理分析。
然后考虑如何构造特征,如何组织和处理数据作为训练友好的数据格式
然后创建多种机器学习模型,进行模型训练,使用验证集进行验证调优
最后统一使用测试集测试,给出最佳的模型
然后使用最佳模型,再次不断反思特征如何优化,考虑banbot支持的指标,重新处理数据重新训练
这个特征重新处理并训练的过程要重复3次;
最后给我输出最佳特征提取方法,以及模型的测试结果。
模型预测的未来6个K线的最大回调幅度,应该使用未来6个K线的lowestLow,这里可以尝试绝对误差和平方误差,或者其他你认为有必要常识的误差计算方法。
首先是,模型训练时必须输出进度,不能一直无限等待;
另外,其实大部分品种,它只是在少部分波动很大的时候才会有大幅回撤,这时候模型的输出才有意义,但波动大的只占K线的或许20%或者10%以内;训练数据中应该剔除波动太小的时候,这时候没有意义,不需要关注;我想到的一个方法是,可以用ATR在过去200个K线中的排名来度量波动大小,排名不够前的直接忽略,你实际找十来个品种的数据检测观察下,看看取前10%还是20%或者其他比例;然后对所有的训练数据处理后再继续。
实际上不同品种的回撤幅度差异很大,而且和他们所处的阶段有关系;在刚开始上升的时候,多半未来6个k线的最低点依然高于当前的收盘价,但这时候也不应该直接输出0,而是应该根据过往该品种的特征,输出一个符合当下的大概可能的回撤,这个应该作为真实值,这样计算的损失和误差就不会特别大,导致过低估计回撤了;或许你也可以考虑其他方法。总之不应该完全用未来6个k线的最低值作为回撤,而是应该用更有意义的值