deap实战分钟级CTA因子挖掘,夏普比大于2

原创内容第634篇,专注量化投资、个人成长与财富自由

昨天咱们把大模型生成因子引入进来了,具体可以看这里:

干货:年化18.1%,大模型如何实现因子挖掘(附python代码和数据下载)

CTA有两种构建策略的方式,传统手工构建因子,在日内的策略,按照经验或者观察去设定进场、出场信号。

而机器学习则是机器去构建。

大家说遗产算法总是过拟合,其实人工构建本质上也是对过去的总结,一样过似合。

今天咱们重点来看看在分钟级数据上,遗传算法挖掘出择时因子的效果,以及通过择时策略看回测的效果。

单因子回测评价的核心代码:

def picktime_backtester(self, evaluate, inds):
    print('开始择时回测')
    df, names = self._calc_df(inds)
    results = []
    # 向量化回测
    # 计算每日收益
    for name in names:
        if name in df.columns:

            daily_returns = df['close'].pct_change()

            # 根据信号计算策略收益]
            signal = df[name]
            signal_80 = df[name].rolling(window=1000).apply(lambda x: np.percentile(x, 80))
            signal_20 = df[name].rolling(window=1000).apply(lambda x: np.percentile(x, 20))
            signal = np.where(signal > signal_80, 1, np.nan)
            signal = np.where(signal < signal_20, -1, signal)
            signal = pd.Series(signal, index=df.index)
            signal = signal.ffill()  # 这一步很关键在1后面的会前向填充,即持仓不变。
            signal = signal.fillna(0)

            strategy_returns = signal * daily_returns.shift(1)

            # 计算累积收益
            portfolio_value = (1 + strategy_returns).cumprod()

            # 计算投资组合的平均回报率
            mean_return = np.mean(strategy_returns)

            # 计算投资组合回报率的标准差
            std_dev = np.std(strategy_returns)

            # 计算夏普比率
            sharpe_ratio = (mean_return - 0) / std_dev
            results.append((portfolio_value, sharpe_ratio))
        else:
            results.append((0, 0))
    print(results)
    return results

择时回测的结果:

图片

信号delta(ADX(high, low, close, 330), 630)

图片

吾日三省吾身

打工是工业时代以来,最常见的谋生的方式。

出售时间,让渡风险。

从投资的角度看,夏普比(收益风险比)并不高,有点类似短期债券的投资风险。基本上不会亏本金,收益比存款高一些,波动不大。

创业自己承担风险,如果前期投入多,周期长,这里的风险还不小,但收益没有上限,就像股票投资。

其实还有一个中间态,就是尽量控制成本的——一人企业。

尽快形成商业闭环。

从业务形态上,最优的一定是互联网线上业务。

不受地域限制,零成本复制。

抖音到tiktok的复制难度,肯定远小于滴滴出海。

——找到一个你自己或者小团队就可以长期运转的互联网业务。你就自由了。

现在数字游民的口号——只上班不工作,就是这种状态的一种过渡。只不过他们没有自己的生意,还是帮别人做事情。

只要他们找到自己可以持续运转且能赚到钱的事情,这个模式就走通了。

历史文章:

干货:年化18.1%,大模型如何实现因子挖掘(附python代码和数据下载)

Quantlab5.7代码发布:使用年化收益来优化遗传算法因子挖掘

AI量化实验室——2024量化投资的星辰大海

关注我,一起财富自由~。

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
NSGA-II(Non-dominated Sorting Genetic Algorithm II)是一个经典的多目标优化算法。下面是使用PythonDEAP库实现NSGA-II的示例代码: ```python import random from deap import algorithms, base, creator, tools # 定义问题 creator.create("FitnessMulti", base.Fitness, weights=(-1.0, -1.0)) creator.create("Individual", list, fitness=creator.FitnessMulti) # 初始化种群 toolbox = base.Toolbox() toolbox.register("attr_float", random.uniform, -5, 5) toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_float, n=2) toolbox.register("population", tools.initRepeat, list, toolbox.individual) population = toolbox.population(n=50) # 定义评估函数 def evaluate(individual): return individual[0]**2 + individual[1]**2, (individual[0]-1)**2 + individual[1]**2 toolbox.register("evaluate", evaluate) # 定义遗传算子 toolbox.register("mate", tools.cxSimulatedBinaryBounded, eta=20, low=-5, up=5) toolbox.register("mutate", tools.mutPolynomialBounded, eta=20, low=-5, up=5, indpb=0.1) toolbox.register("select", tools.selNSGA2) # 进行优化 NGEN = 100 for gen in range(NGEN): offspring = algorithms.varAnd(population, toolbox, cxpb=0.7, mutpb=0.3) fits = toolbox.map(toolbox.evaluate, offspring) for fit, ind in zip(fits, offspring): ind.fitness.values = fit population = toolbox.select(offspring, k=len(population)) # 输出 Pareto 前沿 fronts = tools.sortNondominated(population, k=len(population)) for i, front in enumerate(fronts): print("Frontier", i) for ind in front: print(ind.fitness.values) ``` 在这个示例代码中,我们以一个简单的二元目标函数为例进行优化。首先,我们使用`creator`定义了一个多目标适应度函数和一个个体类。接着,我们使用`toolbox`注册了一个浮点数属性和一个个体初始化函数,以及一个`population`初始化函数。然后,我们定义了一个评估函数来计算每个个体的两个目标函数的值。最后,我们使用`toolbox`注册了遗传算子和选择算子,并且使用`algorithms`中的`varAnd`和`selNSGA2`函数来执行NSGA-II算法进行多目标优化。 这只是一个简单的示例代码,你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI量化投资实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值