打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

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

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

量化平台重要的是开发策略,无论是回测与实盘,一个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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
pyalgotrade教程1
pyalgotrade量化回测框架简单试用
每日例行观察高估的医药后续如何操作20200622
简易电池内阻测试仪制作
多传感器融合定位:基于滤波的融合方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服