VeighNa量化社区
你的开源社区量化交易平台
JasonXU's Avatar
Member
在线
14 帖子
声望: 0

在vnpy社区版3.8.0, 我写了一个策略,监控27个商品,就是同一个策略,应用到多个symbol。发现如下异常:

  1. 早上9:00开盘,大商所和郑商所的品种(symbol)接收tick异常,分钟线和小时线无法合成。 策略用米筐数据初始化,行情订阅正常,所有策略实例初始化正常。 vnpy主界面行情正常刷新
  2. 早上9:00开盘,同一个策略的监控上期所和广期所品种的实例正常。
  3. 夜盘,晚上9:00开盘,所有行情都接收正常,分钟线和小时线合成正常,包括大商所和郑商所

我昨天特意到8:55以后初始化策略实例,发现郑商所的品种可以接收tick,大商所还是不行。上期所和广期所OK。 我的猜想:

  1. CTP的问题,夜盘OK,早盘不正常,仅仅是大商所和郑商所。 我还试过,早盘9:00以后再初始化策略,所有symbol接收正常。
  2. 多线程问题,我是批量初始化,而且是一个策略多个symbol。

请高手指点哪里出问题了?

使用VNStation 3.1 安装后,发现MongoDB导入数据异常。 表现为数据可以插入,但是bar_overview统计出错。具体代码出错位置就是统计bar数量 Cousor.count()报错,说是没有这个函数。

对比VNstation 3.0, 发现pymongo版本不同。使用老的pymongo==3.12.3替换后,正常。 后来发现是Cousor.count()失效了。 请及时团队更新这个问题

description

我也发现这个问题。 数据下载,存入mongodb的时候不带时区(没有按照MongoDB官方推荐的用UTC存)。 数据存取时候做了相应转换,没有问题。

但是回测过程中, 在MongoManager批量读取的时候,开始时间和结束时间需要带时区。 逻辑是OK的,但是给大家提个醒。

engine = BacktestingEngine()
engine.set_parameters(
    vt_symbols=option_vt_symbols,
    interval=Interval.MINUTE,
   start=datetime(2021, 1, 1, 8, 30, 0).astimezone(get_localzone()),
    end=datetime(2021, 1, 20, 15, 30, 0).astimezone(get_localzone()),
    rates=option_rates,
    slippages=slippages,
    sizes=sizes,
    priceticks=priceticks,
    capital=1_000_000,
)

策略代码中,收盘1%的报价间隔也超出仿真环境报价范围。需要改小,比如改为0.5%的报价间隔

        if self.pos > 0:
            self.sell(bar.close_price * 0.995, abs(self.pos))  # 原来1%的差距太大。在仿真环境超出报价范围
        elif self.pos < 0:
            self.cover(bar.close_price * 1.005, abs(self.pos))   # 原来1%的差距太大。在仿真环境超出报价范围

中金所 仿真环境的限制, 如上楼。还是影响了IF的仿真。

本地停止单对分钟线上日内交易有价值。我把策略逻辑改为非本地停止单,策略效果大大退步。本地停止单可以在本bar完成,而非停止单要本bar完成后的下一个ticket才触发。

我自己稍微修改了一下,CtaEngine类的check_stop_order()函数。在原来的代码下面增加了一段。这里 CtaEngine.sim_trade 是类变量,可以用来做全局变量,控制这段逻辑,这样实盘就不用改代码了。

           """这里重新计算停止单"""
            # 在中金所仿真环境中,tick.limit_up tick.limit_down报价失败,同时也没有tick.ask_price_5和tick.bid_price_5
            if CtaEngine.sim_trade:
                jump = tick.ask_price_1 - tick.bid_price_1
                if stop_order.direction == Direction.LONG:
                    price =tick.ask_price_1 + 5*jump
                else:
                    price =tick.bid_price_1 - 5*jump

今天测试了一下中信期货仿真生产环境,发现IF1912不能支持本地停止单。 目前程序用市价单,就是tick.limit_up 和tick.limit_down报单,被拒。中金所仿真环境的报价范围好像只有当前价格的上下30个点。 ticket对象中也没有ask_price_5或者bid_price_5。 (其他非中金所的品种没有测试)

中信期货仿真生产环境如下:
brokid :66666
针对生产版本API_6.3.15
tcp://ctpfz1-front1.citicsf.com:51305
tcp://ctpfz1-front1.citicsf.com:51313

是不是中信期货的仿真环境功能比较全,中信期货仿真交易下可以用本地停止单吗?

CTP仿真环境支持本地停止单吗?

用华鑫期货的仿真环境,测试中用到了vnpy的本地停止单(local_stop_order)功能,在IF1912合约上。发现出错。 策略发的本地停止单3840的空单,ctp发的
3476的现价空单。 所以仿真环境CTP报错,错误信息是超出报价范围。

我看了一下CtaEngine类的check_stop_order()函数。需要ticket中的tick.ask_price_5,bid_price_5,或者tick.limit_down,tick.limit_up。仿真环境中买五,卖五的价格都没有啊。

            if stop_order.direction == Direction.LONG:
                if tick.limit_up:
                    price = tick.limit_up
                else:
                    price = tick.ask_price_5
            else:
                if tick.limit_down:
                    price = tick.limit_down
                else:
                    price = tick.bid_price_5

我以KingKeltnerStrategy示例的本地停止单模式。

采用本地停止单的模式下,我发现在实盘下无法正常撤单。版本2.0.6, 股指IC1908合约交易。

在回测模式下是OK的。然后我debug了一下,发现在回测模式下,backtesting engine返回的是 vt_orderid是这样的格式["STOP.1"] ,而在cta engine下,返回的本地停止单的的格式是'STOP.1", 是不带[]的。 请问正确的格式是应该是怎样的? 我找了一下相关源代码,如下

cta engine的代码(413行)=====>
self.stop_orders[stop_orderid] = stop_order

    vt_orderids = self.strategy_orderid_map[strategy.strategy_name]
    vt_orderids.add(stop_orderid)

    self.call_strategy_func(strategy, strategy.on_stop_order, stop_order)
    self.put_stop_order_event(stop_order)

    return stop_orderid


BacktestingEngine的代码(906行)======>
price = round_to(price, self.pricetick)
if stop:
vt_orderid = self.send_stop_order(direction, offset, price, volume)
else:
vt_orderid = self.send_limit_order(direction, offset, price, volume)
return [vt_orderid]

遇到同样的问题。 跪等答案。

重新安装 numpy 1.16.3 后, 运行 python run.py, python 程序报错。 错误信息如下:

问题签名:
问题事件名称: APPCRASH
应用程序名: python.exe
应用程序版本: 3.7.150.1013
应用程序时间戳: 5b34dd6a
故障模块名称: libopenblas.IPBC74C7KURV7CB2PKT5Z5FNR3SIBV4J.gfortran-win_amd64.
故障模块版本: 0.0.0.0
故障模块时间戳: 5cbcde25
异常代码: c000001d
异常偏移: 00000000010fecc1
OS 版本: 6.1.7601.2.1.0.274.10
区域设置 ID: 2052
其他信息 1: 753d
其他信息 2: 753dccad1d6d05691900c4bfecccafaa
其他信息 3: 5ec1
其他信息 4: 5ec122d7c777f1340a189b487718a9dc

联机阅读隐私声明:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0804

如果无法获取联机隐私声明,请脱机阅读我们的隐私声明:
C:\Windows\system32\zh-CN\erofflps.txt

自己示例程序写了如下run.py,执行后出错。
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
from vnpy.gateway.ctp import CtpGateway
from vnpy.app.cta_strategy import CtaStrategyApp

def main():
"""Start VN Trader"""
qapp = create_qapp()

event_engine = EventEngine()
main_engine = MainEngine(event_engine)

main_engine.add_gateway(CtpGateway)
main_engine.add_app(CtaStrategyApp)

main_window = MainWindow(main_engine, event_engine)
main_window.showMaximized()

qapp.exec()


if name == "main":
main()

出现如下错误=======================>

Traceback (most recent call last):
File "C:\ProgramData\VNConda\lib\site-packages\numpy\core__init__.py", line 16, in <module>
from . import multiarray
ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/vnpy-2.0.2/qic/run.py", line 2, in <module>
from vnpy.trader.engine import MainEngine
File "C:\vnpy-2.0.2\vnpy\trader\engine.py", line 26, in <module>
from .setting import SETTINGS
File "C:\vnpy-2.0.2\vnpy\trader\setting.py", line 7, in <module>
from .utility import load_json
File "C:\vnpy-2.0.2\vnpy\trader\utility.py", line 9, in <module>
import numpy as np
File "C:\ProgramData\VNConda\lib\site-packages\numpy__init.py", line 142, in <module>
from . import add_newdocs
File "C:\ProgramData\VNConda\lib\site-packages\numpy\add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "C:\ProgramData\VNConda\lib\site-packages\numpy\lib\
init.py", line 8, in <module>
from .type_check import *
File "C:\ProgramData\VNConda\lib\site-packages\numpy\lib\type_check.py", line 11, in <module>
import numpy.core.numeric as _nx
File "C:\ProgramData\VNConda\lib\site-packages\numpy\core\
init__.py", line 26, in <module>
raise ImportError(msg)
ImportError:
Importing the multiarray numpy extension module failed. Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try git clean -xdf (removes all
files not under version control). Otherwise reinstall numpy.

Original error was: DLL load failed: %1 不是有效的 Win32 应用程序。

Process finished with exit code 1

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】