长期年化18.82%: lightGBM全球资产多因子配置策略【研报复现】

Dataloader缓存

加载160个因子,10几支大类资产,这个计算还是需要一点时间,尤其在我们频繁运行的时候,需要等待,这里我们实现了load_alpha, 从因子集里加载,同时加上的缓存机制,连同运算好的因子值,我们会缓存到hdf5里,下一次直接加载到Dataframe里即可。

def load_alpha(self, alpha: AlphaBase, cache=True):
if cache:
if os.path.exists(config.DATA_DIR.joinpath('cache').joinpath('cache.h5').resolve()):
with pd.HDFStore(config.DATA_DIR.joinpath('cache').joinpath('cache.h5').resolve()) as s:
if '/factors' in s.keys():
df = s['factors']
return df
else:
print('选择cache,但cache文件不存在')

fields, names = alpha.get_all_features_names()
df = self.load(fields, names)
if cache:
print('定入cache...')
print(df)
with pd.HDFStore(config.DATA_DIR.joinpath('cache').joinpath('cache.h5').resolve()) as s:
s['factors'] = df
return df

包含回测也可以直接加载数据了:

图片

图片

投资认知体系

 昨天有一个星球的小伙伴问我,有没有财富自由。

我反问——“你认为自由的标准是什么?”

他说——1000个吧。

我估计应该是在北上这样的一线城市,这个数字比较有代表性。

我的回答是,星球里应该有很多人都有吧。

——毕竟 ,北京有房的人,差不多都有这个数。

其实,也许他说的本意是自由可长期投资现金流。

之前我说过一个财富自由的入门标准——500,10%。让账户自动运转:构建一个稳健的长期年化10%(回撤小于6%)的大类资产组合

这里还有一重逻辑,就是这500或1000,是通过投资,还是储蓄,还是通过创业或者其他方式获得的。

投资是这样,本金越大,需要的收益率要求越低,风险越低。

投资当然有意义,但——我向来不建议,你本金很小的时候,希望以小博大。

另外还有人给我留言说,星球既然收费,能不能保证赚钱,被我劝退了。

不是说我们策略也好,系统也罢,当然能赚钱。

但投资是一个无限游戏。有时候会回撤,需要耐心等待。

这就是投资认知体系的一部分。

吾日三省吾身

时间真是公平的,无论你是谁,贫穷或富有,都是24小时每天。

但时间又不是公平的,有人善于利用,创造巨大的财富和价值;而有人就需要通过消遣来打发时间。

等待,无论如何都是一件难受的事情。

拿破仑攻城略地,他最讨厌的事情,恐怕也是等待。

等待着实很消耗心力。

当然,可以通过阅读,写作,做有价值的事情,来把它有意义填满。

昨天咱们把lightGBM对全球大类资产进行训练,主体流程已经走通。

【代码发布】Quantlab4.3:lightGBM应用于全球大类资产的多因子智能策略(代码+数据)

"""模型保存"""
from config import DATA_DIR
model.booster_.save_model(DATA_DIR.joinpath('models').joinpath('lgb_regressor.txt'))

在昨天代码的基础上,加一行代码,即可以把训练好的模型保存到本地。

其实就是一些参数,可以直接保存成txt的格式,可以打开来查开。

图片

现在我们可以通过加载特定的模型来回测(暂时先不考虑WFA,也就是先不考虑滚动训练)。

加载已经训练的模型如下:

def load_model(model_name):
from config import DATA_DIR
import lightgbm as lgb model = lgb.Booster(model_file=DATA_DIR.joinpath('models').joinpath(model_name).resolve()) return model

这是机器学习预测的效果:

图片

图片

新增模型加载与预测的代码:

df = CSVDataloader(config.DATA_DIR_QUOTES.resolve(), symbols=task.symbols, start_date=task.start_date).load(
    task.features, task.feature_names)
del df['amount']
df.dropna(inplace=True)


if task.model_name:
    df['pred'] = model.predict(df[task.feature_names])
    #df['pred']=df.groupby('symbol', group_keys=False).apply(lambda x: calculate_pred(x, task.feature_names, model))


s = bt.Strategy(task.name, task.get_algos(df))
s_bench = bt.Strategy('等权-买入并持有', [
    bt.algos.SelectAll(),
    bt.algos.WeighEqually(),
    bt.algos.Rebalance(),
])

吾日三省吾身

生活中,有些事情,不必急——关键是急也没有用。

日子就是这么一天天过。

有些事情结束,有新的事情开始。

也许有意外,也会有惊喜。

不确定性构成新常态。

认真地活在当下,过好每一个当下。

关心自己可以掌控的事情。

其余的事情,允许一切发生的心态。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103242
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 26 日
下一篇 2024 年 7 月 26 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注