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

参数优化结束,未报错,但优化结果灰显,请问是怎么回事?命令行也附上了。

description

description

MTF wrote:

建议点击【K线图表】看下数据是否正常吧,应该是出现了最低价为0的K线数据才会导致这种情况
确实如您所说,都是wind数据源在这些个分钟线的数据确实是零导致的,已经联系wind客服,客服也是头一次发现这个问题。。。。等待回复吧

用论坛里的rbreaker没改参数直接回测,标的rb2210.SHFE,数据源wind(wind好像没有IF88或IF888数据),曲线相当不好看。。查了下成交记录,有多笔成交价格为零,大概找了下原因,发现成交时间基本都是10:15或11:30这种时间,估计应该是非交易时间的委托导致,那按逻辑是不是应该不成交才对呀?不知有没有其他人遇到这个问题。
大致想了下解决方法,应该可以把交易时间段的最后一分钟去掉,但好像没有找到在哪里设置交易时间段,在onbar里加上时间判断。但非交易时间的成交这个bug不知道该如何修复?还请大神指点。。

description

ctaEngine中的engine.py,load_bar函数,先判断是否使用数据库,默认不使用,则先从gateway找数据,即bars = self.main_engine.query_history(req, contract.gateway_name),调用MainEngine的query_history,返回return gateway.query_history(req);
如果找不到,则从datefeed找数据,即bars = self.query_bar_from_datafeed(symbol, exchange, interval, start, end),最终通过RqdateDatefeed的query_bar_history调用rqdatac里的数据接口。
我的问题是,这里的 gateway.query_history(req)是调用哪个文件哪个类的 query_history函数?(陈老师讲解时,说这是从交易接口取数据,可我看了vnpy_ctp的交易接口里并没有这个函数)

https://www.vnpy.com/docs里的功能描述是基于vnpy哪个版本?因为我看跟最新的3.0版本有些不同之处。
比如,下图里调整列宽,在3.0里右击是没反应的,但可以用鼠标左键来拉动列宽。
description

MTF wrote:

numpy版本不匹配导致的,推荐装VeighNa Studio 3.0.0
pip uninstall numpy
pip install numpy,装了1.22.3版本,终于启来了。。
另外,开始提的问题datamanager/Engine.py 下载数据也过了,数据下载无误,无报错。
感谢各位大佬!!
description

郭易燔 wrote:

你试着把.pyd删除,只留下.cp310-win_amd.pyd试试呢
好像没用。

description

xiaohe wrote:

请问你是否有多个python
只有3.10.4,之前装的是3.8,后来看官网推荐3.10,遂卸载干净3.8,安装了3.10.4,

description

MTF wrote:

numpy版本不匹配导致的,推荐装VeighNa Studio 3.0.0
请问numpy需要装哪个版本?我是用vnpy3.0的requirements.txt的要求来安装的,版本跟要求一致。
tzlocal==2.0.0
PySide6==6.2.3
pyqtgraph==0.12.3
qdarkstyle==3.0.3
numpy==1.21.5
pandas==1.3.5
matplotlib==3.5.1
seaborn==0.11.2
ta-lib==0.4.24
deap==1.3.1
pyzmq==22.3.0
plotly==5.5.0
importlib-metadata==4.10.1

description

PS D:\quant\vnpy-master\examples\veighna_trader> python .\run.py
Traceback (most recent call last):
File "D:\quant\vnpy-master\examples\veighna_trader\run.py", line 31, in <module>
from vnpy_optionmaster import OptionMasterApp
File "D:\it_soft\python3.10.4\Lib\site-packages\vnpy_optionmaster__init__.py", line 26, in <module>
from .engine import OptionEngine, APP_NAME
File "D:\it_soft\python3.10.4\Lib\site-packages\vnpy_optionmaster\engine.py", line 34, in <module>
from .pricing import binomial_tree_cython as binomial_tree
File "binomial_tree_cython.pyx", line 1, in init binomial_tree_cython
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject
哪位大佬帮看下原因,以及该如何debug,因为在.pricing下没有.pyx文件,只有.pyd文件,而.pyd二进制根本看不到代码。。

description

piano wrote:

description
OmsEngine初始化时,MainEngine主引擎和EventEngine作为参数传入进来了,在init中调用了self.add_function(),在add_function中将OmsEngine中的函数复制给了主引擎。
整体流程是:1、交易接口中返回的行情Tick、订单回报、合约查询等信息,会通过事件驱动引擎EventEngine保存到队列中;2、事件引擎会固定频率处理队列中的事件,这些事件的处理函数是事先已经注册好了的,所以在处理的时候,只需要调用注册函数去处理对应的事件即可;3、注册函数处理时,会将相应的信息保存到OmsEngine的字典中;4、主引擎通过OmsEngine复制的函数来获取字典中保存的信息。

我的微信是849322520,欢迎微信交流
3.0中,ManagerEngine.download_bar_data()中有contract = self.main_engine.get_contract(vt_symbol),查了下,只有omsEngine有get_contract函数,所以ManagerEngine定义所在的engine.py是不是少了from vnpy.trader.engine import OmsEngine呢?
而且我调试的时候确实contract = self.main_engine.get_contract(vt_symbol)返回为空。

MTF wrote:

用图形界面操作试试呢?
特别想知道noui出现这种问题的原因。。

在vnpy_datamanager/engine.py的最后添加以下代码:

if __name__=="__main__":
    event_engine=EventEngine()
    main_engine=MainEngine(event_engine)
    md=ManagerEngine(main_engine,event_engine)
    md.download_bar_data(symbol='IF2206',exchange=Exchange("CFFEX"),interval='1m',start=datetime(2022,4,19))

运行后无报错、无提示,求原因。。(rqdata是有效期内的:D:\it_soft\python3.10.4\Lib\site-packages\rqdatac\client.py:236: UserWarning: Your account will be expired after 22 days. Please call us at 0755-22676337 to upgrade or purchase or renew your contract.)

description

1、sqlite_database.py
path = str(get_file_path("database.db"))
2、utility.py->get_file_path
return TEMP_DIR.joinpath(filename)
TRADER_DIR, TEMP_DIR = _get_trader_dir(".vntrader")
3、in _get_trader_dir(),
cwd = Path.cwd()
temp_path = cwd.joinpath(temp_name)

# If .vntrader folder exists in current working directory,
# then use it as trader running path.
if temp_path.exists():
    return cwd, temp_path



# Otherwise use home path of system.
home_path = Path.home()
temp_path = home_path.joinpath(temp_name)

# Create .vntrader folder under home path if not exist.
if not temp_path.exists():
    temp_path.mkdir()

return home_path, temp_path

4、from pathlib import Path
Path.home #返回当前用户的根目录
5、结论:如果根目录下存在.vntrader就在这个目录下放置database.db; 如果不存在,就在当前用户的根目录下新建.vntrader/database.db。如果想改路径,可以改上述代码,就可以达到目的

个人分析,是不是可以这样处理:
1、回测用888合约;
2、实盘人肉判断主力合约,并确定是否需要移仓换月。
欢迎讨论。。

此问题之前有人发过,但没有人给出解答。。

===================================================================
报错如下:

D:\quantOS\vnpy\vnpy-2.0.6\examples\vn_trader>python run.py
Exception in thread Thread-6:
Traceback (most recent call last):
File "D:\it_skills\vnstudio\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "D:\it_skills\vnstudio\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "d:\quantOS\vnpy\vnpy-2.0.6\vnpy\app\cta_backtester\engine.py", line 158,
in run_backtesting
engine.run_backtesting()
File "d:\quantOS\vnpy\vnpy-2.0.6\vnpy\app\cta_strategy\backtesting.py", line 2
82, in run_backtesting
self.callback(data)
TypeError: 'NoneType' object is not callable

=====================================================================
ui中输出日志如下:

11:31:12 初始化CTA回测引擎
11:31:12 策略文件加载完成
11:31:12 RQData数据接口初始化成功
11:31:29 ----------------------------------------
11:31:29 开始加载历史数据
11:31:29 加载进度:######### [97%]
11:31:29 加载进度:########## [100%]
11:31:29 历史数据加载完成,数据量:5040
11:32:09 已有任务在运行中,请等待完成

==========================================================================
查了下backtesting.py中是这样定义callback的: self.callback = None
但run_backtesting()函数为何要要按函数来调用callback呢?self.callback(data)

而且奇怪的是,这个错误时而复现、时而不出现(即回测正常完成,打印右边4个图标)。
求高手相助。。

truego wrote:

看明白了,谢谢
请问该问题如何解决的?我也遇到了同样的问题。。
谢谢

确实有个bug,改了之后就能加载了。
而且我发现 user/strategies/下的只能用vntrader加载,如果想直接跑run.py的加载话,需要把策略文件放在vnpy/app/.../strategies或者run.py同级目录的strategies/下。
感谢两位!!!

7月20日有人提过类似问题,但没有最终解决,我的问题类似,即,无论我把策略放到哪里,vntrader都抓不到。。
我在所有的地方都放置了自己的策略demo_strategy.py,包括C:...\lenovo\strategies\下,C:...\lenovo.vntrader\strategies\下,github上下载的vnpy文件下的策略目录,site-package下vnpy下的策略目录,你能想到的,都放了。
惊奇的是,运行vnstation,点击VN trader Pro,加载vn trader,点击回测,仍然看不到自己的策略。。
这如何解决?

tommycnj wrote:

请在启动运行python的当前所在路径,同时建立.vntrader文件夹、strategies文件夹,并把自己的策略放在strategies内即可。

e.g.:
比如你在d:/temp下运行python xxx/xxx/vn_trader/run.py
请建立2个文件夹:d:/temp/.vntrader、d:/temp/strategies
策略文件放在后面的文件夹内:d:/temp/strategies/xxx_strategy.py
再在d:/temp运行python xxx/xxx/vn_trader/run.py
.vntrader,无法用.开头建立文件夹,每次都提示“必须键入文件夹名”

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

沪公网安备 31011502017034号

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