常见问题汇总

功夫量化交易系统 sim模拟柜台开箱即用,实盘柜台需要联系开户经纪商或者购买许可

策略API相关问题:

1. context。get_account_book(SOURCE, ACCOUNT) 函数无法获取资金,是什么原因。

    回答 : 如果是在 pre_star 函数中使用了get_account_book是无法获取账户信息的,pre_star函数是在策略启动前调⽤,用于添加交易账户、订阅行情的。post_start 函数是连接上交易柜台和行情柜台后调用,在 post_start函数或者在其之后的函数中是可以使用get_account_book获取到账户资金等信息。

2. 订阅了很多标的,但是某些标的很长时间才有行情返回,是什么原因?

    回答 : 行情是根据柜台的推送被动触发的,某些标的长时间没有行情推送,很大的原因是这个标的不活跃。

3. add_timer函数是持久化的吗?

    回答 : 不是,策略进程关闭函数停止运行。

4. on_order的返回信息中的parent_id , 母订单是什么?

    回答 : 目前parent_id没有用到,未来更新之后的组合单和子母单会用到。

5. 下单返回的订单ID是否会重复?

    回答 : 当日的 order_id 可以保证是唯一的。

6. on_order订单更新回调,如果提交了多个订单,第二个订单先完成,那么回报是怎么返回?

    回答 : 先完成先返回,和报单顺序无关,与成交顺序有关。

7. 如果我想实现策略中断前把所有单子撤掉,应该在pre_stop, post_stop里的哪一个实现?

    回答 : pre_stop函数。

8. 我使用get_account_book反复query仓位,除了速度慢一点,会有别的问题吗?

    回答 : 不会,这个只是查哈希表而已,不会发生网络请求。

9. 如果我同时订阅50个合约,假定我在on_quote里面有一个计算过程,是不是每一个on_quote计算完了才能执行下一个合约的on_quote?

    回答 : 是的。

10. add_timer 时间回调函数中的 lambda中参数什么作用?

    回答 : 约定是接收 2 个参数 ,ctx和event 。

        event是兼容c++的一些底层api,一般不会用到 , 在c++时需要使用event来提取对应的数据结构,python这边已经提取好作为参数了。

        ctx就是和其他api的context一样,是一个上下文环境,可以用来存储你自己的临时变量之类。

11. 是否可以在策略中订阅不同的交易所标的?

    回答 : 可以, subscribe 分别去订阅不同交易所的标的。

范例

def pre_start(context):
    context.add_account(source, account)
    # 订阅上交所 204001 标的。
    context.subscribe(source_md, ["204001"], Exchange.SSE)
    # 订阅深交所 131810 标的。
    context.subscribe(source_md, ["131810"], Exchange.SZE)

12. 系统能否订阅全市场标的?

    回答 : 可以, 使用 subscribe_all 去订阅全市场。

范例

def pre_start(context):
    context.add_account(source, account)
    # 订阅xtp全市场标的。
    context.subscribe_all("xtp")
    # 订阅ctp全市场标的。
    # context.subscribe_all("ctp")

13. context.book里面的信息,是实时的吗?

    回答 : 是实时的。

14. 请问,股票交易也需要开平方向吗?一般只有期货才需要吧?在开平方向这里股票交易是如何定义的?

    回答 : 需要写,但不会去使用,写Offset参数是为了语义完整。对于股票来说买入开仓,卖出平仓。

15. 请问,在post_start报单 context.insert_order,当我使用priceType.Any,就是当前市场价的时候,limit_price应该怎么填?

    回答 : 可以填写0,但是不能不写。

16. 策略可选择使用本地策略持仓或者账户持仓吗?

    回答 : 可以,策略持仓的获取 context.book,需要注意的是获取策略持仓要在策略的pre_start()函数里调用context.hold_book() 及 context.hold_positions()这两个方法。账户持仓的获取 context.get_account_book(SOURCE, ACCOUNT)。

17. book.asset.avail 就是现有交易账户的现金吗?

    回答 : context.get_account_book(SOURCE, ACCOUNT).asset.avail 获取的是连接账户的可用资金。

18.  post_start没有被回调, on_quote也没有触发, 是什么原因?

    回答 : 检查context.add_account(source_id, account_id) 和 context.subscribe(source, instruments, exchange_id) , 填写是否正确, 并且保证策略中连接的交易账户和行情柜台与开启的交易账户和行情柜台是一致的, 而且进程状态为”就绪”。

19. 目前功夫系统正常停止策略的方法除了手动关闭之外还有没有别的方法?

    回答 : 策略中context.req_deregister()方法可以关闭策略进程。

系统相关问题:

1. 系统在不重启策略的情况下, 支持动态的订阅标的吗?

    回答 : 不支持在策略运行中, 再次订阅标的。 但是支持在策略中动态订阅标的, context.subscribe() 支持动态订阅标的(无需一定要在pre_start中订阅, post_start , on_quote也可以订阅)。

2. 账户添加中的柜台有个sim柜台,这个是什么柜台?

    回答 : sim是功夫自带的模拟柜台,用于调试策略的准确性(不建议进行策略逻辑性测试),sim行情数据为随机数。订单的返回结果为添加sim交易账户是选择的撮合模式,比如撮合模式选择为成交, 那么使用这个sim 账户进行下单,订单都会成交。

3. 委托报错 : 找不到交易者的投资协议。

    回答 : 没有开通相应股票权限。

4. 开启XTP行情的时候,log中会有报错 : failed to subscribe level 2, [11200003] unknown security。

    回答 : 由于内部订阅了xtp的全市场标的,用于手动下单时的搜索,所以会有某些不合法标的,不影响使用。

5. 在策略中,引用某个Python模块的时候会报错,提示没有这个模块,什么原因?

    回答 : kungfu自带Python的第三方模块为一部分常用模块,所以某些模块是没有的。如需使用kungfu中没有的Python模块,可以将模块下载到本地,然后使用本地Python去启动策略。具体启动本地Python教程在用户手册中(官网功夫文档)。

6. 在上午开启交易账户(TD)进程,行情账户(MD)进程运行后,经过午休时间,到下午开盘需要重启进程吗?

    回答 : 不需要。

7. 交易账户进程开启时断开,log查看报错 : error:invalid license_code,什么原因?

    回答 : 检查交易账户使用的license_code与account_id是否对应,如果对应,那么报错是因为用户编码(license_code)到期了,需要重新去kungfu官网购买许可,然后替换原先的license_code。

8. 委托日志中,系统延迟和网络延迟是指什么?

    回答 : 系统延迟是本地策略执行到发出下单指令的时间 ;网络延迟是到柜台的时间,也就是从发出指令到收到柜台反馈的时间。

9. 下单后订单返回状态为:VIP没有交易权限或者申报量超出单笔申报限制,什么原因?

    回答 : 账户没有交易这个品种的权限。 数量超出申报限制,这个需要去问柜台人员,单笔申报是有限制的设定的。

10. XTP柜台下单之后订单状态会返回 : 10000 , 29999。什么原因?

    回答 :  10000,29999是随机拒单。在xtp的测试环境中会出现,实盘不会。

11. 功夫支持fens登录吗?

    回答 : 不支持。

12. ctp交易账户启动报错:无有效采集信息。

    回答 : 没有与开户公司进行穿透测试。请联系功夫商务人员与开户公司进行穿透测试。

13. log文件所在位置在哪里?

    回答 : Windows版本路径为:%appdata%\kungfu\home\ ; Linux版本路径为:~/.config/kungfu/home/

        logview 目录下的日志为前端展示的日志,比如:\logview\20230915\md_ctp.log

        runtime 目录下的日志为交易账户(td),行情账户(md),策略(strategy)直接输出的日志,比如: \runtime\md\ctp\ctp\log\live\ctp_2023-09-15.log

14. 账户登录时报错:ctp:不合法的登录,什么原因?

    回答 : 密码错误。

15. 郑商所的期货合约名规则是什么?

    回答 : 合约要大写,时间只有三位 : 比如 2209的白糖,是 SR209。在对应柜台app上也可以看见合约名,参考一下。

16. on_quote里的datetime转换出来的时间跟当前(自己的当前时间)的存在误差,这个是什么原因造成的?

    回答 : 首先 交易所时间跟本地有误差(包括对时误差 + 网络延迟),另外,功夫是响应式驱动,相当于在pipline上诶个数据执行,如果一个on_quote回调函数执行的时间过长,累计起来,就会出现这种问题。

17. 运行时警告错误warning:commission information missing for SA201@CZCE,是什么原因?

    回答 : 需要在设置里设置一下SA的手续费信息,这个功能cli还没有,不影响试用。

18. cli版本中执行 ./kungfu-cli add 报错 : no such table config sql logic error aborted(core dumped),是什么原因?

    回答 : 要先执行./kungfu-cli monit ,开启master进程,通过这一步建表。 然后在通过 ./kfc cli add进行交易账户/行情账户/策略的添加等操作。

19. linux版本中,启动master进行后,archive进程状态显示”待重启”,正常吗?

    回答 : 正常的。

20. 下单时报错返回  {“error_id”:-2},什么原因?

    回答 : 超出流控限制,下单频率过高,仿真环境是300,默认报撤单各100笔/s。

21. 运行软件的过程中,关闭策略,主进程断开,错误日志为 :  [ error   ] [ 2820/9160 ] [C:\Users\Administrator\Documents\kungfu_pro\core\cpp\lib\src\yijinjing\util\mmap。cpp:42#kungfu::yijinjing::os::load_mmap_buffer] writer CreateFileMapping Error = 112, C:\Users\Administrator\AppData\Roaming\kungfu\home\runtime\strategy\default\neutraul_demo\journal\live\dafe3c05.1.journal

    回答 : C盘磁盘空间满了,导致无法创建文件,清理下空间即可。

22. cli版本,在 monit中启动策略报错  : AttributeError: “NoneType” object has no attribute ‘loader’,什么原因?

    回答 : 在添加策略的时候策略路径选择的是文件夹而不是py文件,正确添加策略路径是 /路径/.py 。

23. 策略文件命名有什么要求吗?

    回答 : 不能为特殊符号与中文。

24. 打开系统的时候界面长时间显示准备中,什么原因?

    回答 : 对数据进行归档。可以在全局设置中选择跳过归档。

25. 功夫框架给策略推的一直是最新数据是吧,比如on_quote里有耗时操作,下次on_quote被调用收到的是最新的数据(md收到的最新数据),还是历史数据?

    回答 : 不会丢数据,如果耗时之后下次收到的是最早的未处理数据。

26. 使用服务器安装本系统,要求什么配置?

    回答 : 高频的参考配置 :

        单核银牌CPU,32G内存,1T硬盘就能满足要求,如果要强化一些,可以用金牌,64G内存

        品牌型号:DELL  R740

        CPU:2*Intel Gold 6134,内存:128GB DDR4-2666

        硬盘:4*600GB 10K RPM 2。5in SAS,满配硬盘背板。RAID:缓存2GB,带掉电保护功能,支持RAID0/1/5/6/10/50/60

        板载4口千兆Intel芯片网卡,Solarflare X2522-Plus双口万兆网卡(含模块

        低配:单核银牌。8核16G — 以server基础来说

27. cli版本启动td有报错,但是没有影响使用 : error:device node not found ?

    回答 : 这块是柜台返回的(采集信息没有采集到报错,但是下面再次采集又采集到了),只要最终td状态是ready就是没什么问题。

28. 策略开启时报错 : warning : Unexpected exception before start RuntimeError: invalid md to xtp,是什么原因?

    回答 : 检查策略中填写的行情柜台是否与开启的行情柜台一致。需要一致。

29. 启动策略,但是函数都没有被调用,什么原因?

    回答 : 查看td,md是否处于”就绪”状态。就绪状态下在开启策略进程。

30. 请问你们的。/kungfu-cli add这个用的是什么技术?

    回答 : node。

31. 测试环境,下单报错:当前状态禁止此项操作,是什么原因?

    回答 : 测试服务器在重启。

32. Linux版本,yum install 安装功夫报错:transaction check error : file /usr/share/applications/kungfu.app.desktop from install of,是什么原因?

    回答 : 当前存在旧版本,需要先用yum remove Kungfu命令卸载kungfu,在安装。

33. 使用PriceType.Any进行平仓,但是一直是已撤单,上期所标的,什么原因?

    回答 : 上期所不支持市价指令。

34. 如果我下了单以后,单子还没返回委托记录,但是我把我的策略关了,这个时候单子会出现什么情况?

    回答 : 会正常执行完,关闭策略不会出现什么问题,把交易进程(td)关了才会失去对这个单子的控制。

35. 在虚拟机上面打开kungfu的时候发生应用程序错误。

    回答 : 虚拟机要4核或4核以上处理器

36. 委托和成交记录可以导出查看吗?

    回答 : 可以 。

        Windows版本的委托记录面板,成交记录面板有下载按钮。

        linux版本执行 。/kfc cli export 命令导出数据。

37. 功夫可以订阅和交易封闭式基金吗?

    回答 : 可以。

38. 安装好cli版本之后,如何加载策略并运行?

    回答 : ./kungfu-cli add 添加交易账户,行情,策略信息;然后执行 ./kfc cli monit 开启对应的td,md,策略进程。

39. 行情进程状态从”ready”变成了”Idle”,这是为什么?

    回答 : Idle为”无数据”,只有行情模块有, 连续15秒没有数据就会把前端行情状态设置为Idle, 只在前端显示不通知到策略.

40. 打开账户或者行情进程,状态ready一般要等多久?

    回答 : 很快,3秒左右。

41. 策略应该放在一个文件里面,这个文件叫什么?

    回答 : 策略所在文件由个人定义,但是需要和功夫的安装目录在同一个盘符下。

42. 功夫目前有deb的安装包吗?

    回答 : 因为centos是经过严格测试的,目前没有ubuntu的安装包,cpp的标准接口要等kungfu 2。4 版本更新才会有,目前客户如果要用需要定制。

43. centos系统推荐什么版本?

    回答 : 建议7.6版本。

44. 订阅的标的多了,会有什么问题吗?

    回答 : 订阅多了一定会阻塞流量的,因为流量限制会丢包,其实已经是提供了接入方便的条件了,但是肯定不能无限制传输,这是要符合监管的。

45. windows版本中,软件安装完打开会出现”图形界面断开。。。。。。。”,然后就打不开了,这是什么原因?

    回答 : 用户名是不是为中文,如果是中文会出现这个情况。 新添加个用户,起名英文,然后用这个账户启动kungfu。

46. 开启系统外订单,可以在软件中对这些订单进行撤单操作吗?

    回答 : 可以的,同步的系统外订单,如果该订单的状态是已提交/正在成交,是可以在系统中进行手动撤单的。 但是策略中通过查询历史委托查到的订单,是不可以用context。cancel_order函数进行撤单的。

47. linux版本添加了定时启动任务,但是没有触发,是什么原因?

    回答 : 开启,添加定时启动任务之后,需要重启scheduler进程, ./kfc cli monit 重启scheduler进程。