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
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!