常见问题汇总

一 . api相关

1. context.get_account_book(SOURCE, ACCOUNT) 函数无法获取资金 .

    回答 :  可能是在 pre_star 函数中使用了,pre_star 函数是告诉系统你要连接的账户和订阅的行情. 到 post_start 函数才是链接账户准备就绪,在 post_start 函数以后会获取资金

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

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

3. 在  pre_star 函数中使用 subscribe 订阅了行情,然后在行情接收并成交之后 再次订阅了新的标的,但是新标的没有行情推送,什么原因?

    回答 : subscribe 在其他函数中使用不起作用,但是如果订阅的是持仓中的标的,会有行情数据返回.

 4. add_timer函数是持久化的吗?还是策略崩掉或者功夫重启就没了?

    回答 : 不是. 进程挂点就没了

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

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

6. on_order 和 on_trade 函数中获取的 tax(税)和 commission(手续费) 都是0 , 什么原因?

     回答 : 这两个参数目前没有用到

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

    回答 : 当日的 order_id 可以保证是唯一的,但是不保证换日之后的order_id也会是唯一的.

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

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

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

    回答:pre_stop

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

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

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

     回答 : 是的

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

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

              event是兼容c++的一些底层api,一般不会用到 , 在c++时需要使用event来提取对应的数据结构,python这边已经提取好作为参数了.   ctx就是和其他api的context一样,是一个上下文环境,可以用来存储你自己的临时变量之类

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

    回答 : 可以, subscribe 订阅不同交易所的数据

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

    回答: 可以, context.subscribe_all(source)

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

    回答 : 是实时的.

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

    回答 : 需要写,但不会去使用,所以都写Offset.open就可以..为了语义完整,可以buy写open,sell写close

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

    回答 : 可以填写 0 , 但是不能不写或者写None

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

    回答 : 本地持仓是你在策略中使用的ticker进行交易之后,本地数据库会维护一个持仓 ; 账户持仓就是从柜台直接拿过来的. 由于本地持仓不安全的—系统崩了 / 从其他软件中下单本地是无法得知的.所以一般在启动软件的时候账户信息会覆盖本地(本地有几个覆盖几个).如果要使用本地的持仓 — context.hold_book() , context.hold_positions() 获取本地信息.

19. 用book.asset查询margin ,在期权义务仓开仓前和成交后没有区别,这是为什么呢?

    回答 : 现在功夫对期权的计算遵从股票的计算规则,所以对应可以看看market_value,或者遍历持仓,然后通过volume*avg_open_price的方式累计
20. post start 没有被回调到,on quote 也没有触发,是什么问题?
    回答 : source写错了
21. context.insert_order,当我需要市场价格的时候,limit_price应该怎么添?
    回答如果在on_qoute函数中,on_quote.last_price 最新价,只有on_quote , on_bar , 逐笔有行情推送的会获取到柜台的价格
22. book.asset.avail 就是现有交易账户的现金吗?
    回答 : 是账户可用资金
23. bar行情推送的end_time总是比当前时间要早一点,这是为什么?
    回答 : 这个时间不是本地时间,可用对比下 start_time
24. 功夫里面 bar.end_time返回的时间戳时间转换成datetime时间,为什么相差8小时?
    回答 : 加个时区
25. 为什么有些bar数据推送的时间不是很规整呢?有的早几秒,有的玩几秒?
    回答 : 因为bar这块儿是靠行情驱动的,不是严格的时间驱动,xtp的行情推送的时间在3秒内是正常的,ctp是1秒,如果这个时间很长,说明这个标的不活跃,没有行情推送.

二 . 系统相关

0. 策略中写的 SOURCE , ACCOUNT必须要和你开启的账户的柜台和账号是一致的 !!! 比如开启的td是xtp柜台,账户是 123456 , 那么 策略中 SOURCE =”xtp”,ACCOUNT=”123456″
 
1. 开启功夫时报错 : Error : The specified module could not be found. \\?\D:\kungfu\…………….
    回答 : 缺失windows环境依赖 , 下载vs2019依赖
2. 系统在不重启MD的情况下 支持动态的添加行情吗?
    回答 : 不支持

3. 运行中出现: app register timeout  这个报错.

    回答 : Windows系统 : 报错和磁盘写入有关系. 解决方法: 清理journal , 然后重启 , 启动账户后,过一会1min在启动策略.   Linux系统 : kungfu-cli shutdown 一下 , 然后启动master

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

    回答 : sim是功夫自带的模拟柜台,用于策略调试,match mode 是成交模式,比如下单直接就撤单或者部分成交剩余等待或者直接成交. sim行情数据为随机数.

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

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

6. 官网版本,开启XTP行情的时候,log中会有报错 : failed to subscribe level 2, [11200003] unknown security

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

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

    回答 : kungfu自带Python库中的第三方模块为一部分常用模块,所以某些模块是没有的,这个时候需要使用本地Python去启动策略. 启动本地Python教程在用户手册中(官网功夫文档)

8. 在上午开启TD,MD之后,在下午开盘之后需要重启吗?

     回答 : 不需要

9. 账户进程开启时显示断开,log查看报错 : error:invalid account_code,什么原因?

    回答 : kungfu系统的用户编码到期了,需要重新去kungfu官网购买许可,然后替换原先的account_code.

10. XTP柜台,在添加行情地址的时候使用的udp前缀,如 : udp:xxx.xxx.xxx.xxx:xxxx,接收不到行情信息的推送.什么原因?

    回答 : udp属于无状态链接,在互联网上极不稳定.建议使用 tcp 作为前缀.

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

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

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

    回答 : 这个账户没有交易这个品种的权限 . 数量超出申报限制,这个需要去问柜台人员,有限制的,或者在柜台的app中进行设置

13. 股票,昨仓内有数据,但是卖出报错”error_msg”:”VIP:卖出报数量不足。” ? 

    回答 : 持仓数据是启动柜台返回,然后成交后会自己计算,数量不足大概率是之前报过该标的,还没有成交完成,有该标的活跃委托

14. 功夫这个日志的解析,为啥每一天日志都有一堆\”  \”这种 ?

    回答 : 这个是前段重定向出来的,如果要直接看后端log的话可以到对应的目录里找,比如kf_home/runtime/td/ctp/012345/live/log (带_py后缀的是python代码打的log,不带的是c++打的 ,看上面那个没有_py后缀的)

15. kungfu目前支持 Windows , Linux , mac 系统, 其中 Linux支持 centos , ubuntu不支持

16. 官网版本 , XTP柜台下单之后订单状态会返回 : 10000 , 29999.什么原因?

    回答 : 官网版本的XTP柜台是中泰柜台,模拟盘会出现 10000,29999是随机拒单.实盘不会.

17. 功夫支持fens登录吗?

    回答 : 不支持

18. 账户报错 :  无有效采集信息 

    回答 : 没有做响应公司的穿透测试

19. log文件所在位置 : 

    回答 : 分目录下会有md, td, 策略, 系统的日志 

        Windows系统 : 左上角 — 文件 — 打开功夫资源目录(KF_HOME) — home/runtime 

        linux系统 : ls ~/.config/kungfu/home/runtime/

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

    回答 : 密码错误

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

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

22. 通过cli可以获取延时统计吗?

    回答 : ./kungfu-cli export    可以获取order Stat里面有延迟数据. 

23. 如何查看系统中的延迟数据是多少?

    回答 : Windows系统中 可以通过 菜单栏的运行-导出全部数据,导出一个OrderStat 的csv,里面会有这几列

                  insert_time, ack_time, md_time, trade_time 

                 系统延迟(柜台调用报单接口时间 – 获取行情的时间) = insert_time – md_time

                 网络延迟 (柜台收到第一条委托回报时间 – 柜台调用报单接口时间)= ack_time – insert_time

                 成交延迟(成交回报时间 –  柜台收到第一条委托回报时间,多次成交这个时间会不断变大)= trade_time – ack_time

24. 本地数据库存放在哪里?

    回答 : kungfu — home – runtime – td 下面会有db’文件 

        比如 cli版本 : ~/.config/kungfu/home/runtime/td/柜台/xxx账户名/db/live/xxxx.db . 名字是代表各个进程跟该进程的交互

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

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

26. 策略调试过程中卡住,也没有报错,查看Bar日志,这是什么问题呢? Error : invalid value for “-s” / ‘–source’ :invalid choice: –time-interval.(choose from ctp,sim,tora,ToraOption)

    回答 : 在使用bar行情的时候,需要在设置中设置bar. 用户手册中有详细

27. Windows系统打开软件启动账户是报错 :  ‘ImportError: DLL load failed: 找不到指定的模块。

    回答 : 缺失windows底层某些模块,2008-2019 vs依赖

28. 运行时警告错误 : warning : commission information missing for SA201@CZCE

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

29. 碰到订阅了几百只ticker界面很卡不响应的情况 请问打开这个选项后策略代码的on_quote还是会回调不受影响吧?

    回答 : 策略不会受影响 , 前端显示pnl以及账户资金那块,就不会实时更新了

30. linux版本,功夫对md、td、策略都是起两个相同进程吗?

    回答 : 这是因为pyinstaller在linux运行时,会先启动一个主进程,再把要执行的代码fork一个子进程运行

31. cli版本中执行 ./kungfu-cli add 报错 : no such table config sql logic error aborted(core dumped) 

    回答 : ./kungfu-cli monit 第一步要现在 , 通过这一步会建立表

32. cli版本中,archive进程启动不启动有关系吗?

    回答 : 作用是清理journal的,需要定期运行就可以 , 启动master会自动先启动archive

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

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

34. 运行软件的过程中,关闭策略,主进程断开,错误日志为 :  [ 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

    回答 : 磁盘空间满了,导致无法创建文件

35. 数据中journal 和 db 的区别 ?

    回答 : db主要是界面用的数据,journal是策略和柜台通信用的数据.当天成交的数据或者策略下单的数据就是放在journal中

36. 主控进程断开,报错 :  Unexpected exception class std::system_error by rx:subscriber database is locked: database is locked  ?

    回答 : 在一个进程写入Journal时,另外一个进程从Journal导出交易数据时,会出现主控进程断开连接的bug ,和SQLite的读写锁冲突有关. 在导出数据之前停留一会儿,在导出.

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

    回答 : 在添加策略的时候添加的是文件夹而不是py文件,引发的报错 , 正确 : 添加 /路径/.py  

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

    回答 : 不能是 all , 其他都可以

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

    回答 : 对数据进行归档

40. 使用本地Python和kungfu自带Python的区别?

    回答 : 本地Python可以随意增加模块,自带的只有固定的模块.其他没什么区别.本地Python的版本要是 3.7.9

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

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

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

    回答  高频的参考配置 : 

单核银牌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基础来说

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

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

44. 策略开启时报错 : warning : Unexpected exception before start RuntimeError: invalid md to xtp.

    回答 : 1.查看是否md的地址填写错误.  2.查看是否为策略柜台的填写和md开启的柜台不一致

45. 在安装cli版本的时候, 使用 rpm -i Kungfu-2.3.8-linux-x86_64-lastest-cli-xxx.rpm 安装报错: chmod:cannot access ‘/opt/kungfu/chrome-sandbox’:No such file or directory(bash). 什么原因?

    回答 

               1. 安装的版本正确的时候, 使用 yum install xxxxxxx.rpm 命令去安装,不要使用 rpm -i xxxxxx.rpm命令 .

               2. 安装的版本不正确,cli版本是Linux的系统的命令行界面,安装的是 Kungfu-2.3.8-linux-x86_64-lastest-cli-xxx.rpm ; 不正确安装的是Kungfu-2.3.8-linux-x86_64-lastest-app-xxx.rpm ,这个是Linux系统的图形化界面版本.

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

    回答 : 查看td,md是否处于就绪状态. Windows版本是 “就绪” , Linux版本是 “ready” , 才是真正的准备好了,可以使用了,其他的状态都不是,这个时候才可以启动策略.

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

    回答 : node

48. 保证金是如何计算的?

    回答 : 保证金占用 = 金额保证金率*金额*手数*合约乘数

49. 打开windows版本 一直处于系统提示这一步,清理journal的也不管用,什么原因?

    回答 : 可能是因为admin权限的问题 .  

50. 使用PriceType.Any进行平仓,但是一直不成功,郑商所.什么原因?

    回答 : 郑商所 / 上期所 / 中金所的远月  —>  不支持 any (市价) 

51. 如果我下了单以后,单子还没执行,但是我把我的策略关了,这个时候还没执行的单子会出现什么情况?

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

52. 在虚拟机上面运行kungfu的时候发生应用程序错误. 

    回答 : 虚拟机要4核及以上处理器
53. 委托和成交记录可以导出查看吗?
    回答 : 可以 . 
               windows 版本 : app上方 —> 运行 —> 导出所有j交易记录 
               linux 版本 :  cd /opt/Kungfu/resources/kungfu-cli/   —>  ./kungfu-cli export

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

    回答 : 目前是没有提供其他方法的,但是可以在策略中使用代码关闭进程的方式关闭策略.
54. 功夫可以订阅和交易封闭式基金吗?
    回答 : 可以
55. 安装好cli版本之后,如何加载策略并运行?
    回答 : ./kungfu-cli add 添加账户 , 行情信息,strategy策略 . 用户手册上面有详解
56. 打开账户或者行情进程,状态ready一般要等多久?
    回答 : 很快,5秒左右
57. account strategy 这些应该放在一个文件里面,这个文件叫什么?
    回答 : 策略所在文件有个人自己定义,但是需要和功夫的安装目录在同一个盘符下
58. 功夫目前有deb的安装包吗?
    回答 : 因为centos是经过严格测试的,目前没有ubuntu的安装包,cpp的标准接口要等kungfu 2.4 版本更新才会有,目前客户如果要用需要定制
59. centos系统推荐什么版本? 
    回答 : 建议 7.6
60. 主控进程一直断开,重启功夫几次了,应该怎么做?
    回答 : 把 kfc.exe 和 kungfu.exe 进程都手动结束 , 在点击左上角的运行–清理journal 
61. 订阅的标的多了,会有什么问题吗?
    回答 : 订阅多了一定会阻塞流量的,因为流量限制会丢包,其实已经是提供了接入方便的条件了,但是肯定不能无限制传输,这是要符合监管的.
62. 功夫平台能从外部设置定时任务吗?还是需要手动每天重启?
    回答 : 建议每天重启
63.windows版本中,依赖安装了,软件安装完打开会出现”图形界面断开…….”,然后就打不开了.
    回答 : 用户名是不是为中文,如果是中文会出现这个情况. 新添加个用户,起名英文,然后用这个账户启动windows.
Scroll Up