目前遇到的情况是:
多账号下,偶发的gateway.close()主动退出会导致卡死(退出是发出事件,注册的函数执行gateway.close(),通过打印发现,基本上是tdapi下的self.exit()后面的打印没能打印,怀疑是self.exit偶发故障)
怀疑是
int TdApi::exit()
{
this->active = false;
this->task_queue.terminate();
this->task_thread.join();
this->api->RegisterSpi(NULL);
this->api->Release();
this->api = NULL;
return 1;
};
上述代码中的task_thread.join();会引起(动态链接库层面的异常导致)阻塞后无法退出的情况吗?
目前vnpy的界面风格是基于qdarkstyle的,所以可以直接在qdarkstyle上做一下改动。
在qdarkstyle库目录下,修改init.py文件,添加字符串风格变量TextStyle,具体内容在文末。
修改函数_load_stylesheet,在return上方添加一行
stylesheet +=TextStyle
即可。
无损变动。
TextStyle = """
QMessageBox QPushButton[text="OK"] {
qproperty-text: "好的";
}
QMessageBox QPushButton[text="Open"] {
qproperty-text: "打开";
}
QMessageBox QPushButton[text="Save"] {
qproperty-text: "保存";
}
QMessageBox QPushButton[text="Cancel"] {
qproperty-text: "取消";
}
QMessageBox QPushButton[text="Close"] {
qproperty-text: "关闭";
}
QMessageBox QPushButton[text="Discard"] {
qproperty-text: "不保存";
}
QMessageBox QPushButton[text="Don't Save"] {
qproperty-text: "不保存";
}
QMessageBox QPushButton[text="Apply"] {
qproperty-text: "应用";
}
QMessageBox QPushButton[text="Reset"] {
qproperty-text: "重置";
}
QMessageBox QPushButton[text="Restore Defaults"] {
qproperty-text: "恢复默认";
}
QMessageBox QPushButton[text="Help"] {
qproperty-text: "帮助";
}
QMessageBox QPushButton[text="Save All"] {
qproperty-text: "保存全部";
}
QMessageBox QPushButton[text="&Yes"] {
qproperty-text: "是";
}
QMessageBox QPushButton[text="Yes to &All"] {
qproperty-text: "全是";
}
QMessageBox QPushButton[text="&No"] {
qproperty-text: "否";
}
QMessageBox QPushButton[text="N&o to All"] {
qproperty-text: "全否";
}
QMessageBox QPushButton[text="Abort"] {
qproperty-text: "终止";
}
QMessageBox QPushButton[text="Retry"] {
qproperty-text: "重试";
}
QMessageBox QPushButton[text="Ignore"] {
qproperty-text: "忽略";
}
"""
bg今年升级后区分了分钟和小时的合成规则,
由此引发了一个新的问题,
此前实时tick回调处理函数中可以通过bg.window_bar来获取最新正在合成的大周期bar,但是现在如果指定的是小时bar,则需要通过hour_bar。
现状:
1、目前BarData的interval主要区分了1分钟(1m)、小时和日线等,但无法精确的去像其他平台一样表述当前K线的周期、bar类型等。
2、数据库的存入,interval字段在分钟级上,只有1m,如果自己生成的其他周期,也将会是1m。
3、从数据库读取数据,约定周期因为2的存在,数据库记录错误,意义大幅降低。
随着ps模块的广泛应用,对数据本地化的需求也越来越大,很多非1m周期的策略,是可以通过记录时记录大周期的bar来大幅降低存储量的(1H的bar相对于1m就降低了60倍),也大大降低了初始化时的计算量,预计能做到秒初始化的状态。
修改建议:
1、重新约定interval所代表含义:Bar类型,MINUTE-->m、HOUR-->h
2、增加BarData的period属性,代表含义:周期数。
3、对应数据库的管理器class DbBarData(Model):中增加period: float = FloatField()
经过上述改造,数据库中某条数据 interval=m, period=5,大家就知道这是一条5分钟K线数据。
好处:
与商业软件在K线定义方面将完全一致和好用,数据库存储上也方面的多。
目前官方版本是2.0.6了,自带管理web端。
但是没有对应的XXX.conf等文件,和不支持-config命令了。
E:\DataBase\InfluxDB\influxdb2-2.0.6>influxd.exe -config influxdb.conf
Error: unknown shorthand flag: 'c' in -config
See 'influxd -h' for help
RPC服务端与客户端不在同一台机器上,有时候网络延迟稍大的时候,经常出现timeout。
当一次出现timeout后,后续任何请求响应模式的通信,都会出现如下错误:
猜测是不是因为zmq的请求响应模式是严格一对一关系,出现一次timeout后,其请求序号再也对不上了。
查资料发现有种“懒海盗”模式,不知是否能够解决类似的问题呢?
“懒惰的海盗”(Lazy Pirate)模式:ZMQ 第四章 可靠的请求-应答模式
如题。
请问为什么RPC主动断开后,再次重连时会报错呢?
执行的操作步骤为:
1、添加RPC引擎。
2、连接PRC。
3、执行rpc的gateway.close()
以上都正常。
4、再次执行:self.main_engine.connect(rpc_setting, 'RPC')
报错如下:
`
File "d:\Anaconda3\lib\site-packages\vnpy\gateway\rpc\rpc_gateway.py", line 37, in connect
self.client.subscribe_topic("")
File "d:\Anaconda3\lib\site-packages\vnpy\rpc__init.py", line 377, in subscribe_topic
self.socket_sub.setsockopt_string(zmq.SUBSCRIBE, topic)
File "d:\Anaconda3\lib\site-packages\zmq\sugar\socket.py", line 209, in set_string
return self.set(option, optval.encode(encoding))
File "zmq/backend/cython/socket.pyx", line 419, in zmq.backend.cython.socket.Socket.set
File "zmq/backend/cython/socket.pyx", line 135, in zmq.backend.cython.socket._check_closed
zmq.error.ZMQError: not a socket
标题描述不清晰,重新修改已无无法修改,
确切的说,是基于portfolio_strategy模块开发的cta策略,能否回测?
现在VN Station升级到2.1.8.1,而github版本并没有同步更新,请问这样做是有什么原因吗?
RT,
订阅全市场所有合约的Tick,无论用什么数据库存储,都会因为存储造成事件拥挤,结果就是当前时刻处理的数据可能还是几分钟甚至几十分钟前的行情。
请问,目前用vnpy的话,有没有可能做到期货全市场合约无延迟(低延迟)录制?
谢谢。
最小3个字符在有时候会不太合适,
举个例子,之前在排查融航中文路径崩溃问题时候,想搜一下融航相关,关键词就是融航,但是不让搜,只能【融航 空格 扩展词】,社区的帖子不是那么多,可能方向就搜偏了。
建议供参考。谢谢。
如题,
以下是Jupyter Notebook下,仿照script_trader写的代码,
from typing import Sequence, Type
from vnpy.gateway.xxx import xxx_gateway
from vnpy.event import EventEngine, Event
from vnpy.trader.engine import MainEngine
from vnpy.trader.gateway import BaseGateway
from vnpy.trader.event import EVENT_LOG
def process_log_event(event: Event):
""""""
log = event.data
print(f"{log.time}\t{log.msg}")
default_setting={xxxx}
event_engine = EventEngine()
event_engine.register(EVENT_LOG, process_log_event)
main_engine = MainEngine(event_engine)
main_engine.add_gateway(xxx_gateway, 'name1')
main_engine.connect(default_setting, "name1")
返回结果如下:
2020-11-25 21:30:12.146094 交易服务器连接成功
2020-11-25 21:30:12.185898 交易服务器授权验证成功
2020-11-25 21:30:12.215818 交易服务器登录失败,代码:4,信息:用户不活跃
而在vntrader上使用则只出现:
,交易服务器连接断开,原因4097,name1
,交易服务器连接断开,原因4097,name1
,交易服务器连接断开,原因4097,name1
,交易服务器连接断开,原因4097,name1
,交易服务器连接断开,原因4097,name1
,交易服务器连接断开,原因4097,name1
===============
已排查原因:
已经确认:接口调用完全一致、setting信息完全一致(从notebook上复制到json文件,并且在gateway的connect中打印出来完全一致)
初衷是想实现账户的自由登录登出,
具体操作是:在界面上额外增加了一个按钮,具体就是遍历main_engine.gateways, 执行close。
结果:执行完就崩溃。
请问是什么原因呢?谢谢