最近由于工作忙,开源项目暂放下了一会。
目前工作理顺了,可以开始维护。
优化一下项目定位,之前希望打造一个桌面版,这个目标去掉。
量化平台重要的是开发策略,无论是回测与实盘,一个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
联系客服