我现在有很多品种的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线的最低值作为回撤,而是应该用更有意义的值