想调试一下Lib\site-packages\vnpy_ctp\api\vnctp下继承自CTP的接口,有现成的脚本可以执行编译吗?
用VSCODE运行python时可以有办法在C文件中加断点调试吗?
xiaohe wrote:
lazysnake2003 wrote:
请教:
行情录制含期权,加了一个打印self.main_engine.write_log(f"process_contract_event,{vt_symbol}"),
2023-11-01 15:00:13,195 INFO: process_contract_event,l2404-C-8600.DCE
Send Heartbeat 1698822018
2023-11-01 15:00:25,488 INFO: process_contract_event,l2312-P-8500.DCE
Send Heartbeat 1698822033
2023-11-01 15:00:39,827 INFO: process_contract_event,l2410-P-8500.DCE
Send Heartbeat 1698822052
2023-11-01 15:00:53,916 INFO: process_contract_event,l2409-C-7200.DCE
Send Heartbeat 1698822067
2023-11-01 15:01:12,988 INFO: process_contract_event,l2402-C-7200.DCE
Send Heartbeat 1698822082
2023-11-01 15:01:27,593 INFO: process_contract_event,l2403-C-8000.DCE
Send Heartbeat 1698822097
2023-11-01 15:01:51,378 INFO: process_contract_event,l2403-P-7100.DCE
Send Heartbeat 1698822112
2023-11-01 15:02:04,811 INFO: process_contract_event,l2403-C-7000.DCE
Send Heartbeat 1698822127
Send Heartbeat 1698822142
2023-11-01 15:02:27,426 INFO: process_contract_event,l2312-C-9300.DCE
Send Heartbeat 1698822157
2023-11-01 15:02:43,506 INFO: process_contract_event,l2405-P-7200.DCE
Send Heartbeat 1698822172
2023-11-01 15:02:57,646 INFO: process_contract_event,l2403-C-9300.DCE
Send Heartbeat 1698822187
2023-11-01 15:03:11,458 INFO: process_contract_event,l2403-C-7800.DCE
Send Heartbeat 1698822202
2023-11-01 15:03:28,129 INFO: process_contract_event,l2405-C-9200.DCE看起来每次间隔时间还挺长的,而且在盘后还在执行,应该是队列里的任务还没有执行完,
这是因为电脑(J4125+8G)垃圾吗?或者有别的原因?
这是process_contract_event不是process_tick_event
那么这个process_contract_event应该由事件EVENT_CONTRACT触发的对吧?那么queue里面的这个事件由谁写进去的呢?
如《行情记录过程中MainEngine都$了什么?行情记录模块源码部分分析》这篇所说,“这个connect方法其实是为主引擎注入灵魂的操作.CtpGateway类继承了Base_gateway类, 同时绑定了CtpMdApi和CTPTdApi两个类,里面有个self.init()方法, 具体逻辑看不到, 但是可以推测其功能, 如何推测呢, 看执行完connect之后oms引擎里头变量的变化,里面原本的部分空字典已经有数据了, 挑一个最复杂的self.contracts字典. 可以发现oms的self.contracts字典里已经充满了ctp接口内包含的所有合约代码的基本信息,”,
这是connect之后交易所会把所有的合约都推送出来吗?由OnRspQryMulticastInstrument回调传进来的吗?这个回调函数在哪里继承的啊?
请教:
行情录制含期权,加了一个打印self.main_engine.write_log(f"process_contract_event,{vt_symbol}"),
2023-11-01 15:00:13,195 INFO: process_contract_event,l2404-C-8600.DCE
Send Heartbeat 1698822018
2023-11-01 15:00:25,488 INFO: process_contract_event,l2312-P-8500.DCE
Send Heartbeat 1698822033
2023-11-01 15:00:39,827 INFO: process_contract_event,l2410-P-8500.DCE
Send Heartbeat 1698822052
2023-11-01 15:00:53,916 INFO: process_contract_event,l2409-C-7200.DCE
Send Heartbeat 1698822067
2023-11-01 15:01:12,988 INFO: process_contract_event,l2402-C-7200.DCE
Send Heartbeat 1698822082
2023-11-01 15:01:27,593 INFO: process_contract_event,l2403-C-8000.DCE
Send Heartbeat 1698822097
2023-11-01 15:01:51,378 INFO: process_contract_event,l2403-P-7100.DCE
Send Heartbeat 1698822112
2023-11-01 15:02:04,811 INFO: process_contract_event,l2403-C-7000.DCE
Send Heartbeat 1698822127
Send Heartbeat 1698822142
2023-11-01 15:02:27,426 INFO: process_contract_event,l2312-C-9300.DCE
Send Heartbeat 1698822157
2023-11-01 15:02:43,506 INFO: process_contract_event,l2405-P-7200.DCE
Send Heartbeat 1698822172
2023-11-01 15:02:57,646 INFO: process_contract_event,l2403-C-9300.DCE
Send Heartbeat 1698822187
2023-11-01 15:03:11,458 INFO: process_contract_event,l2403-C-7800.DCE
Send Heartbeat 1698822202
2023-11-01 15:03:28,129 INFO: process_contract_event,l2405-C-9200.DCE
看起来每次间隔时间还挺长的,而且在盘后还在执行,应该是队列里的任务还没有执行完,
这是因为电脑(J4125+8G)垃圾吗?或者有别的原因?
有个很大的疑问,
交易所会主动推送所有数据吗?
如果不是,怎么得到全市场所有行情的呢?
如果是,那为什么需要订阅呢?是本地过滤吗?看起来又不像
安装完成后运行run.py
C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy>python run.py
Traceback (most recent call last):
File "C:\veighna_studio\lib\site-packages\peewee.py", line 3192, in connect
self._state.set_connection(self._connect())
File "C:\veighna_studio\lib\site-packages\peewee.py", line 4149, in _connect
conn = mysql.connect(db=self.database, autocommit=True,
File "C:\veighna_studio\lib\site-packages\pymysql\connections.py", line 358, in init
self.connect()
File "C:\veighna_studio\lib\site-packages\pymysql\connections.py", line 664, in connect
self._request_authentication()
File "C:\veighna_studio\lib\site-packages\pymysql\connections.py", line 954, in _request_authentication
auth_packet = self._read_packet()
File "C:\veighna_studio\lib\site-packages\pymysql\connections.py", line 772, in _read_packet
packet.raise_for_error()
File "C:\veighna_studio\lib\site-packages\pymysql\protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "C:\veighna_studio\lib\site-packages\pymysql\err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1045, "Access denied for user 'Master'@'localhost' (using password: NO)")
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\run.py", line 106, in <module>
main()
File "C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\run.py", line 80, in main
main_engine.add_app(CtaStrategyApp)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\engine.py", line 102, in add_app
engine: BaseEngine = self.add_engine(app.engine_class)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\engine.py", line 73, in add_engine
engine: BaseEngine = engine_class(self, self.event_engine)
File "C:\veighna_studio\lib\site-packages\vnpy_ctastrategy\engine.py", line 97, in init
self.database: BaseDatabase = get_database()
File "C:\veighna_studio\lib\site-packages\vnpy\trader\database.py", line 158, in get_database
database = module.Database()
File "C:\veighna_studio\lib\site-packages\vnpy_mysql\mysql_database.py", line 162, in init
self.db.connect()
File "C:\veighna_studio\lib\site-packages\peewee.py", line 3191, in connect
with exception_wrapper:
File "C:\veighna_studio\lib\site-packages\peewee.py", line 3019, in exit
reraise(new_type, new_type(exc_value, *exc_args), traceback)
File "C:\veighna_studio\lib\site-packages\peewee.py", line 192, in reraise
raise value.with_traceback(tb)
File "C:\veighna_studio\lib\site-packages\peewee.py", line 3192, in connect
self._state.set_connection(self._connect())
File "C:\veighna_studio\lib\site-packages\peewee.py", line 4149, in _connect
conn = mysql.connect(db=self.database, autocommit=True,
File "C:\veighna_studio\lib\site-packages\pymysql\connections.py", line 358, in init
self.connect()
File "C:\veighna_studio\lib\site-packages\pymysql\connections.py", line 664, in connect
self._request_authentication()
File "C:\veighna_studio\lib\site-packages\pymysql\connections.py", line 954, in _request_authentication
auth_packet = self._read_packet()
File "C:\veighna_studio\lib\site-packages\pymysql\connections.py", line 772, in _read_packet
packet.raise_for_error()
File "C:\veighna_studio\lib\site-packages\pymysql\protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "C:\veighna_studio\lib\site-packages\pymysql\err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
peewee.OperationalError: (1045, "Access denied for user 'Master'@'localhost' (using password: NO)")
安装好veighna_studio-3.8.0,装好mysql, 在github上找到run.py,放到某个目录下运行,即出现以下错误:
C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy>python run.py
找不到数据库驱动vnpy_mysql,使用默认的SQLite数据库
Traceback (most recent call last):
File "C:\veighna_studio\lib\site-packages\vnpy\trader\database.py", line 152, in get_database
module: ModuleType = import_module(module_name)
File "C:\veighna_studio\lib\importlib__init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "C:\veighna_studio\lib\site-packages\vnpy_mysql\init__.py", line 26, in <module>
from .mysql_database import MysqlDatabase as Database
File "C:\veighna_studio\lib\site-packages\vnpy_mysql\mysql_database.py", line 4, in <module>
from peewee import (
ModuleNotFoundError: No module named 'peewee'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\run.py", line 28, in <module>
main()
File "C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\run.py", line 18, in main
main_engine.add_app(CtaStrategyApp)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\engine.py", line 102, in add_app
engine: BaseEngine = self.add_engine(app.engine_class)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\engine.py", line 73, in add_engine
engine: BaseEngine = engine_class(self, self.event_engine)
File "C:\veighna_studio\lib\site-packages\vnpy_ctastrategy\engine.py", line 97, in init
self.database: BaseDatabase = get_database()
File "C:\veighna_studio\lib\site-packages\vnpy\trader\database.py", line 155, in get_database
module: ModuleType = import_module("vnpy_sqlite")
File "C:\veighna_studio\lib\importlib__init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "C:\veighna_studio\lib\site-packages\vnpy_sqlite\init__.py", line 26, in <module>
from .sqlite_database import SqliteDatabase as Database
File "C:\veighna_studio\lib\site-packages\vnpy_sqlite\sqlite_database.py", line 4, in <module>
from peewee import (
ModuleNotFoundError: No module named 'peewee'
以前用的是veighna_studio-3.5.0,没有这样的问题,比较了一下2个版本相关的文件,也没有找到什么不同,论坛里大概翻了一下,没有找到相应的贴子,
可以看下问题出在哪里吗?
ranjianlin wrote:
xiaohe wrote:
可以打印排查一下是否是收到非交易时段tick导致的
经反复测试排查发现,当日可以正常录制全市场行情数据,但是次日发现,后面几天仅部分合约有录制进数据库,是因为这个全市场录制行情数据代码没有收到DCE与CZCE交易所的数据推送。
怎么解决的呢?
多谢解答
不好意思,我搞错了,不是政府要求,是期货公司要求
看到TB群里说要升级软件,政府要求增加商密的功能。
VNpy也会面对同样的问题要升级吗?
另外商密是什么?是需要什么APP产生PIN码验证这个东西吗?
xiaohe wrote:
vnpy_ctp没有支持组合下单
是代码或技术上没有实现还是因为确是没有权限或者需要申请权限?
如果是权限问题,那么是不是只有快期有这个权限?还是比如文华、TB、MC都有呢?
交易中发现锁仓占用了大量的保证金。
跟期货公司的小哥讨论,他说是大商所给快期的特权,如下:
https://doc.shinnytech.com/q72/latest/6.html
大商所 :支持实时在客户端发起组合申请,实时释放保证金;盘中未发起组合的合约,盘后在CTP柜台内会将其组合。
不那么信,是不是在下单的时候有参数可以来确定是否释放组合中的保证金呢?
xiaohe wrote:
main_engine.get_engine(APP_NAME)
试了一下,可以工作,多谢多谢
是扫描CTA窗口的句柄然后执行按钮操作?
还是给CTA窗口进程发一个信号让它响应呢?
这2个技能都没用过,不熟,哪一个更合理或好用一点?
有更简单的方法吗?
在项目中有没有类似的应用可以借鉴?
下载错误,不用理我
下载了3.5.0后默认安装,然后去gitee上下载了vnpy/ examples / veighna_trader下的run.py
在替换了很多中文符号的问题后,运行了python run.py后出现错误
C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy>python run.py
File "C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\run.py", line 1
<!DOCTYPE html>
^
SyntaxError: invalid syntax
这就超出我的知识范围了,看了一下这个文件提交是9个月前,那别人应该不会有这个问题吧?
针对我这个问题怎么解决呢?
run.py的文件的前面几行是这样的:
<!DOCTYPE html>
<html lang='zh-CN'>
<head>
<title>examples/veighna_trader/run.py vn.py官方/vn.py - Gitee.com</title>
<meta content='on' http-equiv='x-dns-prefetch-control'>
<link href='//e.gitee.com' rel='dns-prefetch'>
<link href='//files.gitee.com' rel='dns-prefetch'>
<link href='//toscode.gitee.com' rel='dns-prefetch'>
<link href='https://cn-assets.gitee.com' rel='dns-prefetch'>
<link href='https://portrait.gitee.com' rel='dns-prefetch'>
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="https://cn-assets.gitee.com/assets/favicon-9007bd527d8a7851c8330e783151df58.ico" />
<link rel="canonical" href="https://gitee.com/vnpy/vnpy" />
<meta content='gitee.com/vnpy/vnpy git https://gitee.com/vnpy/vnpy.git' name='go-import'>
<meta charset='utf-8'>版本2.9有时候会毫无征兆的退出,通过run.py运行,
自己也修改了一些东西,尤其是加了一个线程,用来等上一个合约平仓后移仓到新合约,
每分钟会检查一次合约持仓状态,前一段时间运行得挺好,这几天发生好几次毫无征兆的退出
从log文件中没有看到什么提示
有什么办法可以排查问题啊?
run.py中含以下几个模块
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp
from vnpy_chartwizard import ChartWizardApp
from vnpy_datamanager import DataManagerApp
from vnpy_datarecorder import DataRecorderApp
from vnpy_ctastrategy.base import EVENT_CTA_LOG #add log to file