从零开始实现一个量化回测系统(二)

本文介绍了如何使用积木式的策略构造方法来实现一个量化回测系统,将策略分解为可复用的子策略,如只运行一次、选择所有股票和等权买入。通过组合这些子策略,构建了"买入并持有"的量化投资策略。作者强调了这种积木式策略的优势在于复用和迭代,并计划进一步完善交易落地和风险收益分析功能。
摘要由CSDN通过智能技术生成

持续行动1期 42/100,“AI技术应用于量化投资研资”之可转债投资。

今天继续“从零实现一个量化回测系统”系列。

前篇把骨架搭建起来了,现在要实现量化之核心要策略。

策略就是根据输入的市场数据,设定的规则发出买或卖的指令。

01 积木式写策略

我的策略写法与传统不太一样,传统上来就是给一个on_bar函数,自己写策略吧,如同我们在pyalgotrade里看到的例子那样。

pyalgotrade量化回测框架简单试用

我把常用的策略变成策略块,然后只需要组合起来,就可以实现一个策略。

比如“买入并持有”,我们拆解成三个子策略,这些子策略是可以复用的:

一、只在第一天运行一次

class RunOnce:
    def __init__(self):
        super(RunOnce, self).__init__()
        self.done = False
 
    # 返回True表示后续的策略都不执行了,相当于是一个开关
    def __call__(self, context):
       done = self.done
       self.done = True
       return done

二、股票池里所有的股票

当天的bar的index,写到context['selected']里

class SelectAll:
    def __init__(self):
        pass
    def __call__(self, context):
        df_bar = context['bar']
        context['selected'] = list(df_bar.index)
        return False

三、等权买入

等权分配是比较常见的策略,从上一步得到的“selected”列表,来生成权重weights=[code: 比例]。

class WeightEqually:
    def __init__(self):
        pass
    def __call__(self, context):
        selected = context["selected"]
        n = len(selected)
        if n > 0:
            context['weights'] = {code: 1 / n for code in selected}
        else:
            context['weights'] = {}
        return False

我们engine的step函数需要加上算子的执行:

def step(self, index, date):
    df_bar = self.df.loc[date]
    if type(df_bar) is pd.Series:
        df_bar = df_bar.to_frame().T

    df_bar.index = df_bar['code']
    df_bar.sort_index(ascending=True, inplace=True)
    self.acc.update_bar(date, df_bar)

    #收盘后,再执行交易(近似模拟)
    context = {
        'bar': df_bar
    }
    for algo in self.algo_list:
        done = algo(context)
        if done:
            break

如此,我们把三个算子整合起来,就实现了“买入并持有”的策略:

e = Engine(init_cash=100000, datafeed=feed)
e.run(algo_list=[RunOnce(), SelectAll(), WeightEqually()])

积木式的好处多多,可以复用,可以积累。

明天可以把买卖交易落地到Account里,并且可以对回测的风险、收益策略进行分析,并且可视化呈现出来。

关于投资的思考

投资也是门派林立,正统的如价值投资派,有点像武林中的名门正牌,基金经理多与少都号称自己的是价值投资。价值投资的心法是公司价值为锚,在价格低于其内在价值里买入,并在价格高估时卖出。另外一派是技术面派,所有信息都反应在价格里了,所以,只管看价格趋势,高估还可以更高,只要市场疯狂;低估还可以更低,恐慌情绪一旦形成。

其实都有道理,这是周期的不同阶段。

价格围绕价值如钟摆,群体的不理性把这个过程放大。技术派赌的是往右摆的过程,指望有高点退场;而基本面牌买在左边,越低越买,然后在市场回归时卖出。

量化派则吸收前两者心法中一切可以量化的信息。

量化派更接近科学,可以积累可以传承,可以优化,可以迭代。

最近文章:

从零开始实现一个量化回测系统(一)

pyalgotrade量化回测框架简单试用

飞狐,科技公司CTO,用AI技术做量化投资;以投资视角观历史,解时事;专注个人成长与财富自由。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI量化投资实验室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值