vn.py官网
开源量化社区
Member
avatar
加入于:
帖子: 50
声望: 0
    self.cancel_all()

    am = self.am
    am.update_bar(bar)
    if not am.inited:
        return
    high = am.high_array[-self.M:]
    close = am.close_array[-self.M:]
    low = am.low_array[-self.M:]

我用am.close_array加载历史数据,为什么输出来的high跟low是正常的序列,只有close返回的全是0,bar.close_price也是0 ??

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

请问用的是什么版本?请打印一下收到的数据,并附上输出结果的图

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

青青子荆 wrote:

请问用的是什么版本?请打印一下收到的数据,并附上输出结果的图
2.5.5版本

description
X跟Y是:
high = am.high_array[-self.M:]
close = am.close_array[-self.M:]
low = am.low_array[-self.M:]

    self.X = high[-10:]
    self.Y = close[-10:]
Member
avatar
加入于:
帖子: 50
声望: 0

还是我load_bar的时候的问题 ?
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, 4, 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(10)
    self.load_bar(10, interval=Interval.HOUR)
Member
avatar
加入于:
帖子: 470
声望: 25

有可能是你传进来的bar数据有问题,可以打印排查一下。
还有就是你在on_init()里load了两次,要删掉一个。

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

青青子荆 wrote:

有可能是你传进来的bar数据有问题,可以打印排查一下。
还有就是你在on_init()里load了两次,要删掉一个。
应该是版本的问题,我重新下了2.1.1的VNstation,close_array就没问题了,相同的代码2.2.5版本的就有值

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

你说的2.5.5是VN Station的版本,请看一下VN Trader的界面上方版本是多少,是最新的2.2.0版本出现了这一问题吗?用的数据是哪个交易所的什么品种?

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

青青子荆 wrote:

你说的2.5.5是VN Station的版本,请看一下VN Trader的界面上方版本是多少,是最新的2.2.0版本出现了这一问题吗?用的数据是哪个交易所的什么品种?
不好意思看错了,是2.2.0版有问题,就是官网下载的那个。
我用的是OKEX交易所的季度交割合约数据,BTC\ETH\LTC测close全都有问题

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

我们这边测试了一下是可以正常加载的。

description

如果你这边问题依然存在,请去query_history函数下打印一下数据试试看。

description

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

青青子荆 wrote:

我们这边测试了一下是可以正常加载的。

description

如果你这边问题依然存在,请去query_history函数下打印一下数据试试看。

description
不是,我在VNstation上下载下来的也是没问题,但在策略层上打印出来的时候就都是0了

Member
avatar
加入于:
帖子: 3164
声望: 185

我们这边加载也是没问题的,请打印一下数据试试看
description
description

Member
加入于:
帖子: 29
声望: 0

确实存在问题。
我在自带的atr_rsi_strategy策略上改用1h线,用币安永续合约接口测试,发现用的最新的2.3.0,打印出来的收盘价就是0,其它指标计算也不对。换成以前的版本2.1.8就可以。好像是从2.1.9开始不行了。必须是1h策略。请排查下吧

description

description

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

最新的2.3.0版本又出现这个问题了,close都是0,而high跟low这些bar的数据就正常,麻烦老师们排查下
把数据直接下载下来是没问题的,但程序里面close = am.close_array[-self.M:]接口获取出来的close数据就都是0值

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

description

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

我们这边使用最新2.3.0版本测试是可以正常读取close数值的。

description

description

Member
avatar
加入于:
帖子: 50
声望: 0
        # 如果请求失败则终止循环
        if resp.status_code // 100 != 2:
            msg = f"获取历史数据失败,状态码:{resp.status_code},信息:{resp.text}"
            self.gateway.write_log(msg)
            break
        else:
            data: dict = resp.json()

            if not data["data"]:
                m = data["msg"]
                msg = f"获取历史数据为空,{m}"
                break
            print(data)

okex_gateway那里print出来的close确实是有,但我策略里面用am.close_array[-self.M:]获取close_array,再打印出来,数据就没有了,都是0值,而high、low是正常的。bar.close_price也是0值

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

还有就是,CTA启动之后,k线更新bar.close_price就开始有数值了,但历史的bar.close_price还是0,所以我不知道是不是arraymanger的问题

Member
加入于:
帖子: 29
声望: 0

经测试补充说明下:分钟级别没有问题,1小时级别有问题。我是在自带的atr_rsi_strategy策略上改用1h线。

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

xiaohe wrote:

我们这边加载也是没问题的,请打印一下数据试试看
description
description

请按照这张图,在on_bar()里打印一下数据排查。

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

description
close返回的是0

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

沪公网安备 31011502017034号