vn.py官网
开源量化社区
Member
avatar
加入于:
帖子: 45
声望: 0

我在OKEX上跑CTA4小时策略,要用到最多90根的K线,但是初始化完的时候发现输出的变量很奇怪,一打印出来看才知道其实只初始化了前一天的数据,而不是load_bar(10)里设置的10天,请问这个是怎么回事??

Administrator
avatar
加入于:
帖子: 4871
声望: 283

OKEX下载历史分钟K线,只有1440根,也就是1天的长度

Member
avatar
加入于:
帖子: 45
声望: 0

用Python的交易员 wrote:

OKEX下载历史分钟K线,只有1440根,也就是1天的长度
1,OKEX不是也提供1小时的接口吗,也能下载1440根1小时的数据,那这样子我用4小时跑的时候ArrayManger会不会主动去下载1小时的数据去做初始化?如果只拿1分钟的数据来合成小时线的话历史数据是肯定不够的,只能合成6根4小时K线
2,如果接口的历史数据不够做做初始化的话实盘开始的时候要怎么办?等它自己缓存到足够初始化的数据再运行吗?

Member
avatar
加入于:
帖子: 45
声望: 0

description
我这样初始化后算出来的数值都是0,要怎么办

Member
avatar
加入于:
帖子: 140
声望: 13

数据不足,,arraymanger的初始化状态是false,不会计算指标。

Member
avatar
加入于:
帖子: 45
声望: 0

kingmo888 wrote:

数据不足,,arraymanger的初始化状态是false,不会计算指标。
okex也提供1小时的数据的接口,我要怎么在arraymanger运用他的历史数据 ?在vnstation上也能下载它的历史数据,我在初始化的时候要怎么运用

Member
avatar
加入于:
帖子: 470
声望: 24

杨恩源 wrote:

kingmo888 wrote:

数据不足,,arraymanger的初始化状态是false,不会计算指标。
okex也提供1小时的数据的接口,我要怎么在arraymanger运用他的历史数据 ?在vnstation上也能下载它的历史数据,我在初始化的时候要怎么运用
需要调用小时级别的数据请请在策略文件顶部导入Interval,并传入Interval.HOUR给bg实例

Member
avatar
加入于:
帖子: 45
声望: 0

需要调用小时级别的数据请请在策略文件顶部导入Interval,并传入Interval.HOUR给给bg实例
感谢您的回复,但这块我已经在代码里加进去了,结果还是初始化没有成功,我把数据打印出来发现无论什么周期它都是只运行刚好一天的数据

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    """"""
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)

    self.ccivalue_history = [0] * self.N
    self.Mean_history = [0] * self.NN
    self.atr_history = [0] * self.NN

    self.bg_4h = BarGenerator(self.on_bar, 1, self.on_4hour_bar, interval=Interval.HOUR)
    self.am = ArrayManager()

def on_init(self):
    """
    Callback when strategy is inited.
    """
    self.write_log("策略初始化")
    self.load_bar(20)

def on_start(self):
    """
    Callback when strategy is started.
    """
    self.write_log("策略启动")

def on_stop(self):
    """
    Callback when strategy is stopped.
    """
    self.write_log("策略停止")

def on_tick(self, tick: TickData):
    """
    Callback of new tick data update.
    """
    self.bg_4h.update_tick(tick)

def on_bar(self, bar: BarData):
    """
    Callback of new bar data update.
    """
    self.bg_4h.update_bar(bar)

def on_4hour_bar(self, bar: BarData):
    """"""
    self.cancel_all()

    am = self.am
    am.update_bar(bar)
    if not am.inited:
        return
Member
avatar
加入于:
帖子: 470
声望: 24

初始化默认使用分钟级别的数据,如果需要用小时级别数据初始化需要在load_bar函数里也传入小时的interval,如果还不成功可能是接口只提供一天的数据。
杨恩源 wrote:

需要调用小时级别的数据请请在策略文件顶部导入Interval,并传入Interval.HOUR给给bg实例
感谢您的回复,但这块我已经在代码里加进去了,结果还是初始化没有成功,我把数据打印出来发现无论什么周期它都是只运行刚好一天的数据

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    """"""
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)

    self.ccivalue_history = [0] * self.N
    self.Mean_history = [0] * self.NN
    self.atr_history = [0] * self.NN

    self.bg_4h = BarGenerator(self.on_bar, 1, self.on_4hour_bar, interval=Interval.HOUR)
    self.am = ArrayManager()

def on_init(self):
    """
    Callback when strategy is inited.
    """
    self.write_log("策略初始化")
    self.load_bar(20)

def on_start(self):
    """
    Callback when strategy is started.
    """
    self.write_log("策略启动")

def on_stop(self):
    """
    Callback when strategy is stopped.
    """
    self.write_log("策略停止")

def on_tick(self, tick: TickData):
    """
    Callback of new tick data update.
    """
    self.bg_4h.update_tick(tick)

def on_bar(self, bar: BarData):
    """
    Callback of new bar data update.
    """
    self.bg_4h.update_bar(bar)

def on_4hour_bar(self, bar: BarData):
    """"""
    self.cancel_all()

    am = self.am
    am.update_bar(bar)
    if not am.inited:
        return
Member
avatar
加入于:
帖子: 470
声望: 24

初始化默认使用分钟级别的数据,如果需要用小时级别数据初始化需要在load_bar函数里也传入小时的interval,如果还不成功可能是接口只提供一天的数据。
杨恩源 wrote:

需要调用小时级别的数据请请在策略文件顶部导入Interval,并传入Interval.HOUR给给bg实例
感谢您的回复,但这块我已经在代码里加进去了,结果还是初始化没有成功,我把数据打印出来发现无论什么周期它都是只运行刚好一天的数据

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    """"""
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)

    self.ccivalue_history = [0] * self.N
    self.Mean_history = [0] * self.NN
    self.atr_history = [0] * self.NN

    self.bg_4h = BarGenerator(self.on_bar, 1, self.on_4hour_bar, interval=Interval.HOUR)
    self.am = ArrayManager()

def on_init(self):
    """
    Callback when strategy is inited.
    """
    self.write_log("策略初始化")
    self.load_bar(20)

def on_start(self):
    """
    Callback when strategy is started.
    """
    self.write_log("策略启动")

def on_stop(self):
    """
    Callback when strategy is stopped.
    """
    self.write_log("策略停止")

def on_tick(self, tick: TickData):
    """
    Callback of new tick data update.
    """
    self.bg_4h.update_tick(tick)

def on_bar(self, bar: BarData):
    """
    Callback of new bar data update.
    """
    self.bg_4h.update_bar(bar)

def on_4hour_bar(self, bar: BarData):
    """"""
    self.cancel_all()

    am = self.am
    am.update_bar(bar)
    if not am.inited:
        return
Member
avatar
加入于:
帖子: 45
声望: 0

非常感谢感谢!去ctatemplate里看了下,原来load_bar的默认Interval真的只有MINUTE的数据,我加入self.load_bar(20, interval=Interval.HOUR)之后就能成功初始化了!
困扰了几天的问题解决了,真的非常谢谢!

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

沪公网安备 31011502017034号