LGB机器学习预测数字货币涨跌
1. 模型选择
LGB全名LigthGBM是boosting集合模型中的新进成员,它和xgboost一样是对GBDT的高效实现,很多方面会比xgboost表现的更为优秀。原理上它和GBDT及xgboot类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。
一开始选择的是LSTM,不过经过各种折腾,对我这个新手小白都不好解决欠拟合和过拟合
参考了以下文章后选择了LGB
文章:
2. 数据来源
我这边选择的是爬取币安给出的2020年至今的几大主流币历史合约K线数据,周期为5m
主流币选择,看总市值排行选择出来的币:
'BTCUSDT',
'ETHUSDT',
'LTCUSDT',
'BNBUSDT',
'XMRUSDT',
'XRPUSDT',
'XTZUSDT',
'ADAUSDT',
'BCHUSDT',
3. 模型问题
LGB可以解决多分类问题、线性问题、二分类问题,我这边选择的是二分类问题
也就是下一根收盘价大于这一根收盘价标记为1,反之为0,让LGB去预测分类
代码:
features['label'] = ((features['next_close'] / features['Close'] - 1) > 0)
features['label'] = features['label'].astype('int')
4. 模型特征
在我每天尝试几个指标,尝试了几十个指标(说多了都是泪,每个指标Talib没有的得自己实现,实现后再慢慢调参):
最后组合出来了以下做为特征:
'close_tf',
'vol_tf',
'high_tf',
'low_tf',
'hlc_tf',
'zhenfu',
'macd',
'adx',
'rsi',
'dpo',
5. 数据处理
处理就是把缺少数据的行给删除
我还做了以下尝试,效果都没优化:
- 删除涨幅小的数据,删除后预测效果更差了
- 删除inf值的数据,删除后预测效果更差了
LGB不像神经网络需要对异常值很敏感,所以就不处理其他的了
然后再划分出训练集和测试集
训练集:20200101-20210601
测试集:20210601-20211101
6. 模型训练
代码:
import lightgbm as lgb
param = {
'num_leaves': 31,
'learning_rate': 0.06,
"boosting": "gbdt",
"metric": 'auc',
'device': 'gpu',
"verbosity": -1,
}
trn_data = lgb.Dataset(trn, label=trn_label)
val_data = lgb.Dataset(val, label=val_label)
num_round = 500
#clf = lgb.train(param, trn_data, num_round, valid_sets=[trn_data, val_data])
clf = lgb.train(param, trn_data, num_round)
#clf.save_model("v6_8-25.txt")
test_lgb = clf.predict(val, num_iteration=clf.best_iteration)
pd.DataFrame({
'column': feature_col,
'importance': clf.feature_importance(),
}).sort_values(by='importance', ascending=False)
参数为第一篇文章所给的参数,在这里感谢下他的分享
训练结果:
正确率为52.2%
6. 模型回测
模型训练完,那么就让他在测试集表现一下如何
回测设置:双边万4%,杠杠5,不复利
因为手续费的问题
这里设置的为预测下一根K线涨跌概率大于63%才开仓
要不然会赔的裤衩子都不剩,如果有手续费为0的账号那么55%概率就可以开仓了
退出条件为5m走完就平仓
回测结果:
7. 结语
我做量化以来踩过3个坑,其中这个机器学习就占了两个
- 我做了一个策略,回测今年每个月都有一次30%以上的大回撤并且2020年无法盈利,还是让它上线了,前面翻倍,后面本金腰斩
- 一开始做这个机器学习,测试集只用了80天,年初也无法盈利,导致过拟合本金腰斩
- 最后呢 机器学习终于做出来了,杠杠开太大25倍,本金腰斩,哈哈哈哈
唯一没赔钱的一次还是靠爬交易所公告,找即将上线的新币梭哈的
因为水平有限,我现在做量化暂时不用机器学习这种方式了
原因是我的水平只能做类似黑盒测试,无法了解他的运行原理,导致我无法再优化它
不要灰心,这个模型到现在11月20日也是盈利的状态,什么时候失效就不知道了
并且做机器学习的这几个月让我知道了很多指标的计算方式和使用方式
可以尝试根据自己对指标的认知做策略了,策略稳定盈利后再来剖析机器学习
最后给打算接触的一些建议:
- 不要尝试预测价格,否则最优结果永远是上一根K线收盘价,预测涨跌、收益率
- 初学者做这个很难分辨策略是不是过拟合了(大佬除外)
- 可以尝试预测高频,高频数据的拟合更加容易
- 也可以去试试NLP自然语言处理,爬各种动态新闻,先行一步入场,做庄家肚子里的蛔虫