gplearn引入自定义函数

后续咱们会在几块重点领域发力:

1、数据,给大家提供好数据(含脚本),日线,或者分钟线,期货,ETF,可转债,加密货币等。——这一块持续积累。现在我们已经有期货“主连”合约的日线脚本,大家也可以自己下载更新数据。——以CSV的形式存储,方便大家自己更新。

CSVDataloader升级,可以指定目录,以及特定的子集合,比如csi300=沪深300成份股,比如ETF重点行业。

2、因子表达式,可以兼容gplearn的函数计算,这样表达式算出来与gplearn的表达式同构。可以使用gplearn的make_functions。也可以自动标注label。

gplearn默认只支持单标的时间序列,扩充为支持3D数据

3、因子合成,使用树模型lightGBM或者lightGBM的Ranker,对多支标的进行排序。

单因子回测以及多因子轮动模块,可以固定下来模板。

图片

日拱一卒:gplearn引入自定义函数

from scipy.stats import rankdata
def _rolling_rank(data):
    value = rankdata(data)[-1]

    return value


def _rolling_prod(data):
    return np.prod(data)


def _ts_sum(data):
    window = 10
    value = np.array(pd.Series(data.flatten()).rolling(window).sum().tolist())
    value = np.nan_to_num(value)

    return value


def _sma(data):
    window = 10
    value = np.array(pd.Series(data.flatten()).rolling(window).mean().tolist())
    value = np.nan_to_num(value)

    return value


def _stddev(data):
    window = 10
    value = np.array(pd.Series(data.flatten()).rolling(window).std().tolist())
    value = np.nan_to_num(value)

    return value


def _ts_rank(data):
    window = 10
    value = np.array(pd.Series(data.flatten()).rolling(10).apply(_rolling_rank).tolist())
    value = np.nan_to_num(value)

    return value


def _product(data):
    window = 10
    value = np.array(pd.Series(data.flatten()).rolling(10).apply(_rolling_prod).tolist())
    value = np.nan_to_num(value)

    return value


def _ts_min(data):
    window = 10
    value = np.array(pd.Series(data.flatten()).rolling(window).min().tolist())
    value = np.nan_to_num(value)

    return value


def _ts_max(data):
    window = 10
    value = np.array(pd.Series(data.flatten()).rolling(window).max().tolist())
    value = np.nan_to_num(value)

    return value


def _delta(data):
    value = np.diff(data.flatten())
    value = np.append(0, value)

    return value


def _delay(data):
    period = 1
    value = pd.Series(data.flatten()).shift(1)
    value = np.nan_to_num(value)

    return value


def _rank(data):
    value = np.array(pd.Series(data.flatten()).rank().tolist())
    value = np.nan_to_num(value)

    return value


def _scale(data):
    k = 1
    data = pd.Series(data.flatten())
    value = data.mul(1).div(np.abs(data).sum())
    value = np.nan_to_num(value)

    return value


def _ts_argmax(data):
    window = 10
    value = pd.Series(data.flatten()).rolling(10).apply(np.argmax) + 1
    value = np.nan_to_num(value)

    return value


def _ts_argmin(data):
    window = 10
    value = pd.Series(data.flatten()).rolling(10).apply(np.argmin) + 1
    value = np.nan_to_num(value)

    return value


# make_function函数群
delta = make_function(function=_delta, name='delta', arity=1)
delay = make_function(function=_delay, name='delay', arity=1)
rank = make_function(function=_rank, name='rank', arity=1)
scale = make_function(function=_scale, name='scale', arity=1)
sma = make_function(function=_sma, name='sma', arity=1)
stddev = make_function(function=_stddev, name='stddev', arity=1)
product = make_function(function=_product, name='product', arity=1)
ts_rank = make_function(function=_ts_rank, name='ts_rank', arity=1)
ts_min = make_function(function=_ts_min, name='ts_min', arity=1)
ts_max = make_function(function=_ts_max, name='ts_max', arity=1)
ts_argmax = make_function(function=_ts_argmax, name='ts_argmax', arity=1)
ts_argmin = make_function(function=_ts_argmin, name='ts_argmin', arity=1)
ts_sum = make_function(function=_ts_sum, name='ts_sum', arity=1)

gplearn引入自定义函数是比较简单的,当然私募公司的积累,很多也在这些函数上。

大家更加关心的问题是:这是单支股票,如何进行多支股票的因子挖掘呢?

后文再分享

吾日三省吾身

真理在大炮的射程范围内。

放之四海而皆准。

可笑之事,就是如果你弱小,你还尝试跟人讲道理,谈规则。

新年唯一要做的,花心思的事情,10倍努力,去追求目标。

日拱一卒,功不唐捐。

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

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

相关推荐

发表回复

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