看文档写的策略中K线可以通过BG函数合成15分钟K线的例子,自己照着折腾了好久好像没成功。不知道要怎么写才对,我想合成4H级别的,这样写对么?
self.bg = BarGenerator(self.on_bar,window=4,on_window_bar=self.on_bar,interval=Interval.HOUR)
self.am = ArrayManager(150)
这4个小时中的Tick记录全在内存中缓存么?不能直接从数字货币交易所获取么?(我记得OK 火币都可以提供4H的K线数据的。。。)
在github上看到个大神写的合成1H级别的k线,跑了一晚上好像没啥数据(估计是失败了)。。。
代码如下:
from vnpy.app.cta_strategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
class DeM15mTrader(CtaTemplate):
"""演示用的5分钟均线"""
# 策略作者
author = "demo-胡同学 Trader归零策略"
def init(self, cta_engine, strategy_name, vt_symbol, setting):
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
self.bg5min = BarGenerator(self.on_bar,
window=5,
on_window_bar=self.on_5min_bar,
interval=Interval.MINUTE)
self.bg1H = BarGenerator(self.on_bar,
window=1,
on_window_bar=self.on_1H_bar,
interval=Interval.HOUR)
self.am5min = ArrayManager(150)
self.am1H = ArrayManager(150)
def on_tick(self, tick: TickData):
self.bg1H.update_tick(tick)
self.bg5min.update_tick(tick)
def on_bar(self,bar:BarData):
self.bg1H.update_bar(bar)#将1小时K线合成1小时K线
self.bg5min.update_bar(bar)#将1分钟K线合成5分钟K线
def on_1H_bar(self, bar: BarData):
print("Run begin hour...")
self.am1H.update_bar(bar)
if not self.am1H.inited:
return
am1H = self.am1H
print("Run in hour...") #这里是试过用self.write_log("跑了1H了,好累") 也是没记录出来
------------------------------------------猜测可能是本地数据不够----------------
开始前20200226230304.png
今天早上的,咱也不知道这策略是写对了还是写错了,反正什么都没有……
【问题2.】数据记录开启的时候,只开启K线记录,本地数据库是不会增加数据的,需要同时开启Tick记录才会增加……(数字货币交易所都提供了1分钟的k线记录,能不能直接从api获取?是在网关文件里面修改么?)