vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 29
声望: 0

看文档写的策略中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
description
今天早上的,咱也不知道这策略是写对了还是写错了,反正什么都没有……

description

【问题2.】数据记录开启的时候,只开启K线记录,本地数据库是不会增加数据的,需要同时开启Tick记录才会增加……(数字货币交易所都提供了1分钟的k线记录,能不能直接从api获取?是在网关文件里面修改么?)

Administrator
avatar
加入于:
帖子: 4122
声望: 229

数字货币的接口,都是提供从API获取数据的功能,但是OKEX提供的历史数据只有2000根左右,很短,你可以计算下是否够合成你要的时间周期

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3