重构:开源的“积木式”量化系统与恒定市值网格策略

本文介绍了如何构建一个开源的积木式量化交易系统,专注于策略开发。通过实例展示了从简单的收盘价输出到实现恒定市值网格策略的过程,强调了系统的灵活性和可扩展性。系统支持股票、指数等多种资产,允许用户通过组合基础功能模块(算子)来构建复杂策略。通过对比,显示了恒定市值策略相比简单持有可以获得更高的收益。
摘要由CSDN通过智能技术生成

最近由于工作忙,开源项目暂放下了一会。

目前工作理顺了,可以开始维护。

优化一下项目定位,之前希望打造一个桌面版,这个目标去掉。

量化平台重要的是开发策略,无论是回测与实盘,一个gui界面都不是必须的。

定位:专注聚焦开发一个开源的“积木式”量化系统

不同于传统strategy需要繁琐的定义和计算各种指标,同时也区别于完全界面可视化的功能受限,而是把通用功能块实现为“算子”,这样大部分的常见策略就可以通过“拼装”的方式来实现。

自动获取数据之类的,暂时不提供,会内置一些csv存储的数据供回测使用。

设计的目标,可以兼容股票、指数,ETF、可转债,主动基金,BTC

只要是时间序列就可以。

下面是一个hello world的例子,与pyalgotrade或者backtrader差不多。

from engine.strategy import Strategy
from engine.datafeed import CSVDatafeed
import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)


class MyStrategy(Strategy):
    def __init__(self, feed):
        super(MyStrategy, self).__init__(feed)

    def onbar(self, index, date, df_bar):
        instrument = '000300.SH'
        if index == 0:
            self.acc.order_buy_mv(instrument, 100000)

        se = df_bar.loc[instrument]
        print(se['date'], '\t', se['close'])
        print(self.acc.get_total_mv())


feed = CSVDatafeed()
feed.add_data('000300.SH', '../datas/000300.SH.csv')

s = MyStrategy(feed=feed)
s.run()

我们只做了一件事,就是把沪深300每天的收盘价给打出来,同时第1天的时候买入并持有。

10万块钱进去,长期持有期末市值是165321。

而我们使用“恒定市值网格”策略,

就是当市值超过11万时,买掉1万,而市值低于9万时,买入1万,维护市值恒定,被动地低买高卖。

from engine.strategy import Strategy
from engine.datafeed import CSVDatafeed
import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)


# 恒定市值维护
class FixMarketValueStrategy(Strategy):
    def __init__(self, feed):
        super(FixMarketValueStrategy, self).__init__(feed)
        self.fix_mv = 100000.0
    def onbar(self, index, date, df_bar):
        print(date)
        instrument = '000300.SH'
        if index == 0:
            self.acc.order_buy_mv(instrument, 100000)

        # 取当前市值,若超过设定值,比如5万的10%,即55000,则卖掉5000,反之买入差额的部分
        # 取当前instrument的持仓市值,
        curr_mv = self.acc.get_instrument_mv(instrument)
        print(date, '当前持仓:{}'.format(curr_mv),'现金:{}'.format(self.acc.curr_cash))

        if curr_mv >= 1.1 * self.fix_mv:
            gap = curr_mv - self.fix_mv  # +5000
            self.acc.order_sell_mv(instrument, gap)
        elif curr_mv <= 0.9 * self.fix_mv:
            gap = self.fix_mv - curr_mv
            self.acc.order_buy_mv(instrument, gap)


feed = CSVDatafeed()
feed.add_data('000300.SH', '../datas/000300.SH.csv')

s = FixMarketValueStrategy(feed=feed)
s.run()
print(s.acc.get_total_mv())

期末的总市值是176080,比买入一直持有要高。

而且要知道,我们很早差不多把本金抽回来了,这个本金本身再投资的收益是没有计算在内的,投资讲求模糊的正确。

今天只是做框架的演示,明天继续把详细指标计算出来,定量的对比。

代码已经同步到gitee里了。

https://gitee.com/ailabx/ailabx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI量化投资实验室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值