最近由于工作忙,开源项目暂放下了一会。
目前工作理顺了,可以开始维护。
优化一下项目定位,之前希望打造一个桌面版,这个目标去掉。
量化平台重要的是开发策略,无论是回测与实盘,一个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
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/104221
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!