原理比较简单,使用强化学习来生成“因子表达式”——逆波兰表达式。然后把因子组合在一起做优化,评价标准仍然是传统的IC/IR这一套。
我们的基准是gplearn遗传算法挖因子。
Qlib加载数据,这里没有看出groupby(‘symbol’)
class Feature(Expression):
def __init__(self, feature: FeatureType) -> None:
self._feature = feature
def evaluate(self, data: StockData, period: slice = slice(0, 1)) -> Tensor:
assert period.step == 1 or period.step is None
if (period.start < -data.max_backtrack_days or
period.stop - 1 > data.max_future_days):
raise OutOfDataRangeError()
start = period.start + data.max_backtrack_days
stop = period.stop + data.max_backtrack_days + data.n_days - 1
return data.data[start:stop, int(self._feature), :]
def __str__(self) -> str: return '
无论是基于深度强化学习,还是gplearn遗传算法,只要是多标的,多个symbols同时计算,那么在进行表达式运算时,肯定要groupby symbol或者甚至groupby date。
否则rolling是有问题的。
目前的依赖包:torch的cuda版本是需要根据你本机的显卡的版本来确定的,我电脑上的驱动版本比较老,是10.2,因此只能安装较低版本的pytorch。
baostock==0.8.8 gym==0.26.2 matplotlib==3.3.4 numpy pandas==1.2.4 pyqlib #qlib==0.0.2.dev20 sb3_contrib==2.0.0 stable_baselines3==2.0.0 torch==1.10.2+cu102 --extra-index-url https://download.pytorch.org/whl/cu102 shimmy==1.1.0 fire tqdm loguru requests joblib scipy scikit-learn
经过一番折腾:
已经开始端对端挖因子了:
吾日三省吾身
做一件事情,意义很重要。
工作也好,创业也罢。
有时候做一件事,就是纯粹为赚钱,比如年轻时候想赚快钱,合理合法,也没有什么问题。
比如当年那么多年靠SEO做外贸,其实主体工作就是满世界发垃圾链接,做排名。
只不过长期主义的事情,需要一个更大更持久的意义。
先辈们是有信仰,甚至不惜牺牲个人生命为代价,在追求一些东西。
意义,可以是利益,更多不是。
意义是个人赋予的。
达芬奇创造的意义,爱迪生发明的意义,对于未知的渴求,对世界的好奇心。
+ self._feature.name.lower()
@property
def is_featured(self): return True
无论是基于深度强化学习,还是gplearn遗传算法,只要是多标的,多个symbols同时计算,那么在进行表达式运算时,肯定要groupby symbol或者甚至groupby date。
否则rolling是有问题的。
目前的依赖包:torch的cuda版本是需要根据你本机的显卡的版本来确定的,我电脑上的驱动版本比较老,是10.2,因此只能安装较低版本的pytorch。
经过一番折腾:
已经开始端对端挖因子了:
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103639
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!