vn.trader使用教程系列3-策略算法

原创文章,转载请注明出处:用Python的交易员

风控模块

enter image description here

点击菜单栏的功能->风险管理后,可以打开如上图所示的界面。风控模块主要提供的是针对高频策略和短周期CTA策略的事前风控功能,防止由于错误的算法逻辑导致类似光大乌龙指的事件(就算亏不了几十亿,一下子把账户亏掉一半也是很痛苦的...)。

开关

工作状态按钮用于控制风控模块的运行状态。处于“运行中”状态时,每笔委托在发出前会执行模块中定义好的多个风控条件检查,全部符合条件(参考下文的详细介绍)才能正常通过,只要有一条不符合该委托都会被拒绝,并且会在日志中输出具体的风控信息。处于“未启动”状态时,则会忽略所有的风控检查,允许委托直接发出。

流控

流控主要控制的是单位时间内允许发出的最大的委托笔数,图中所示的限制是每1秒允许最多发出4笔委托,如果发送第5笔就会被拒绝,从而防止某些成交触发的交易信号由于逻辑错误被重复触发,在1秒内发出几十笔的情况。

清空流控计数按钮可以把当前的流控计数清0。

单笔委托

单笔委托上限比较容易理解,控制的是每一笔委托允许的最大合约手数,防止由于逻辑或者参数设置错误导致开仓太多合约的风险。

总成交

总成交上限控制的是每日允许的总成交的合约数量(不是成交笔数),针对的是无人值守的情况下,策略算法出现逻辑错误开始频繁的买卖(比如每秒开多1手,再平多1手,不断重复),导致在手续费和买卖价差上快速亏损的情况。

清空总成交技术按钮可以把当前的总成交技术清0。

活动订单

活动订单上限限制的是当前系统内所有的未成交和部分成交的委托数量,一些采用挂限价单来开平仓的策略算法,可能由于撤单操作有误,导致之前的委托没有撤销的同时还在不断挂出新的委托单,一旦价格波动就有可能被全部成交,出现巨大的持仓风险。

保存设置

用户改变以上风控参数的数值后,系统中的数值会立即被改变,但是必须点击“保存设置”按钮后相应的数值才会写入配置文件RM_setting.json中,重启后风控参数会从该文件中再次读取。

行情数据收集

enter image description here

行情数据收集模块位于vn.trader/dataRecorder文件夹下,该模块主要用于收集每天的实盘Tick数据,并自动聚合为K线后插入到MongoDB数据库中,模块内置了1分钟K线的聚合算法。点击菜单栏的功能->行情数据记录后可以打开如上图所示的界面,查看目前正在收集的行情数据内容(不开也没关系,数据收集会自动在后台运行)。

该模块的配置基于DR_setting.json文件,打开后如下:

{
    "working": false,

    "tick":
    [
        ["Au(T+D)", "SGIT"],
        ["Ag(T+D)", "SGIT"]
    ],

    "bar":
    [
        ["au1606", "CTP"],
        ["ag1606", "CTP"]
    ],

    "active":
    {
        "IF0000": "IF1605",
        "IH0000": "IH1605",
        "IC0000": "IC1605"
    }
}

各个字段的功能如下:

  • working:用于控制是否启动行情数据的收集,true对应启动,false对应停止

  • tick:需要收集Tick行情数据的合约代码和接口,["Au(T+D)", "SGIT"] 代表需要收集来自于飞鼠接口的黄金T+D现货的Tick数据

  • bar:需要收集1分钟K线行情数据的合约代码和接口,["au1606", "CTP"]代表需要收集来自于CTP接口的au1606黄金期货的1分钟K线数据

  • active:用于设置具体的期货合约和该期货连续合约的代码映射关系,"IF0000": "IF1605"代表将IF1605的行情数据(Tick和1分钟K线)插入到IF0000(可以自行改名)的集合中,注意这里每个连续合约代码只能对应一个具体合约的代码

注意事项:

  1. 修改DR_setting.json中的配置后,需要重启vn.trader才会生效。

  2. 在active字段中定义的连续合约对应的具体合约代码也必须加入到上面的tick或者bar字段中,才会收集相应的tick或者1分钟K线数据。

  3. 当数据收集组件向MongoDB中插入数据时可能因为某种原因出现阻塞(如硬盘转速较慢等),导致vn.trader的事件驱动引擎无法处理后续的事件,因此实盘中建议开一个独立的vn.trader进程专门用于收集数据。

CTA策略模块

CTA策略模块相比较于之前介绍的部分,功能要强大和复杂的多,也需要用户有一定的Python编程基础,具体细节的使用方法未来会在单独的教程中讲解,这里只简要介绍下从开发到实盘交易一个CTA策略的流程:

回测和配置

  1. 在ctaAlgo文件夹下创建一个策略.py文件;

  2. 继承ctaTemplate.py中的CtaTemplate类实现具体的策略;

  3. 使用ctaHistoryData.py中的函数从通联数据下载行情数据建立历史行情数据库(需要购买对应的数据授权,修改datayes.json),或者将文件夹下的IF0000_1min.csv中的股指连续合约1分钟数据插入到MongoDB中(仅适用于学习和回测);

  4. 在交互式开发工具中(如IPython Notebook和Spyder),使用ctaBacktesting.py中提供的回测引擎对开发好的策略使用历史数据进行回测(参考ctaBacktesting.py中的例子);

  5. 确定策略符合预期可以上线交易后,在ctaSetting.py中导入你的策略类,并添加到STRATEGY_CLASS字典中(这步是为了让CTA策略引擎能找到你的策略类);

  6. 在CTA_setting.json中加入实盘交易时创建策略实例所需要的参数,如策略实例名称name(不能重复)、策略类名称className(使用上一步中设置的策略类名称)、交易的合约代码vtSymbol等,其他的参数可以选择不传,会自动使用策略类中定义的默认值。

实盘交易

enter image description here

  1. 打开vn.trader,连接好交易接口和数据库后,点击菜单栏的算法->CTA策略可以打开如上图所示的CTA策略模块的实盘交易管理界面;

  2. 点击“加载策略”按钮,策略引擎会从CTA_setting.json中读取相关的策略配置信息用于生成具体的策略实例(下面称为“策略”),并显示在管理界面上;

  3. 点击“初始化”按钮会调用策略的onInit函数,并完成策略开始交易前的初始化操作,此时策略可以计算参数指标等,但是无法发出委托;

  4. 点击“启动”按钮会调用策略的onStart函数,正式启动策略的交易功能,此时策略基于收到的行情、成交、委托等数据进行相应的逻辑判断,并发出委托;

  5. 点击“停止”按钮会调用策略的onStop函数,撤销当前策略已发出的所有未成交委托,并停止策略的交易功能,恢复到无法发出委托的状态;

  6. 如果加载了多个策略,窗口最上方的“全部初始化”、“全部启动”和“全部停止”可以一次性对所有的策略执行相应的操作,省去多次点击。

![Image text](https://images.gitee.com/uploads/images/2021/0624/110700_4275874f_1204097.png) # VNPY官方 VNTrader (基于期货CTP接口专用量化交易开源软件) #### 介绍 VNTraderVNPY官方 http://www.vnpy.cn 推出的一款国内期货量化交易开源软件, VNTrader官网 http://www.vntrader.cn 《VNPY官方发布VNTrader期货CTP框架开发环境配置快速入门教程》 https://zhuanlan.zhihu.com/p/388316382 《VNTrader开源项目采用Github Desktop差异更新代码步骤》https://zhuanlan.zhihu.com/p/386181364 《VNPY官方VNTrader 开源,采用Python + PyQT + ctypes + PyQTGraph,是CTP优秀Python框架》https://zhuanlan.zhihu.com/p/382754307 《VNPY官方新架构VNTrader期货CTP接口Python开源框架共同开发者邀请》 https://zhuanlan.zhihu.com/p/390476717 《VNPY官方发布VNTrader的EMA策略实现》https://zhuanlan.zhihu.com/p/392796443 基于GPLV3开源协议,任何机构和个人可以免费下载和使用,无需付费。 注意,需要在期货开盘时间前后20分钟,放开登录CTP接口服务器 期货开盘时间 9:00-11:30 ,1:30 - 15:00 , 21:00-2:30 仿真账户支持 (支持股指期货、股指期权、商品期货、商品期权仿真交易) (只能工作日白天访问网址,其他时间网站关闭) http://www.simnow.com.cn 开立实盘账户(A级期货公司,优惠一步到位) http://www.kaihucn.cn 基于CTP接口的开源性,打破收费软件垄断,采用VNTrader开源项目也可解决自己造轮子导致周期长门槛高的问题。 VNTrader是专门针对商品期货CTP接口的GUI窗口程序,支持多个Python策略组成策略池,支持回测,支持多周期量化交易。 VNTrader客户端开源代码 VNTraderVNPY官方提供的CTP开源项目客户端源代码, 支持国内149家期货公司的CTP接入, 支持股指期货,股指期权、商品期货、商品期权的程序化交易和量化交易的仿真回测。 全新架构,性能再次升级,python的便捷,C++性能加持,比老版本更好用,性能提升300%以上,全新系统命名未VNTrader,属于VNPY官方发布的重点全新架构的产品。 VNTrader的Python和底层C++代码全部开源, 这个是一个有具大性能提升大版本 VNPY官方网站 http://www.vnpy.cn 官方QQ群: 256163463 ![VNPY官方发布全新一代期货CTP框架,Python框架VNTrader](https://images.gitee.com/uploads/images/2021/0624/111454_46c70c7a_1204097.png "VNPY.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0624/111503_6980ce37_1204097.jpeg "bird.jpg") ![CTP接口支持交易和期货公司](https://images.gitee.com/uploads/images/2021/0624/112928_eea13eb4_1204097.png "s1.png") ![VNTrader CTP接口Python开源框架架构图](https://images.gitee.com/uploads/images/2021/0624/112936_c222d986_1204097.png "S2.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0726/002542_d3196b86_1204097.png "架构图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0709/102816_afa6da37_1204097.png "window.png") ![
<think>我们正在处理一个用户查询,该查询要求查找与特定Java类或Android应用相关的问题或信息,具体是“com.fx24k.trader.trader.fxclient”类或应用程序的问题。 根据用户提供的引用,我们注意到这些引用主要涉及JavaFX和CSS样式,以及Eclipse插件安装问题,并没有直接提到“com.fx24k.trader.trader.fxclient”。因此,我们需要考虑如何帮助用户解决他们可能遇到的问题。 用户的问题可以分解为: 1. 查找关于“com.fx24k.trader.trader.fxclient”这个类或应用程序的问题或信息。 2. 由于没有直接相关的引用,我们需要提供一般性的指导,帮助用户自己查找相关信息。 可能的策略- 建议用户检查这个类所在的应用程序的文档或源代码(如果可得)。 - 建议用户使用搜索引擎搜索完整的类名,因为类名通常是唯一的,可以找到相关的讨论或问题。 - 建议用户在开发者社区(如Stack Overflow)提问,提供详细的错误信息或上下文。 由于我们无法直接获取外部信息,因此只能提供方法指导。 步骤: 1. 确认用户是否在开发或使用某个应用程序时遇到了问题。 2. 根据类名结构,推测它可能是一个交易相关的应用程序(因为包名中有trader和fxclient,fx可能代表外汇)。 3. 提供一般性的排查步骤。 由于用户没有提供具体的问题(如错误信息),我们只能给出一般性建议。 回答结构: 1. 解释类名的含义和可能的上下文。 2. 提供查找问题信息的步骤。 3. 建议如何描述问题以获得更好的帮助。 注意:用户可能是在开发中遇到了这个类的问题,或者在使用某个应用程序时遇到了崩溃,而错误信息中出现了这个类。 因此,我们可以这样回答: 您好!关于您提到的类`com.fx24k.trader.trader.fxclient`,从包名来看,它可能属于一个外汇交易(FX Trading)相关的应用程序或库。由于没有直接相关的引用信息,我为您提供一些通用的排查建议: ### 1. **检查应用程序的文档** 如果这个类属于您正在使用的某个应用程序或库,请查阅该应用程序的官方文档,看是否有关于此类的说明或常见问题解答。 ### 2. **搜索类名** 您可以将完整的类名(包括包名)复制到搜索引擎(如Google)中搜索。通常,如果其他开发者遇到过类似问题,可能会在论坛(如Stack Overflow)或技术博客中有相关讨论。 ### 3. **检查错误日志** 如果您是在运行应用程序时遇到问题,请查看错误日志或堆栈跟踪(stack trace),其中可能会提供更详细的错误信息(如异常类型和错误描述)。根据错误信息,我们可以进一步分析。 ### 4. **在开发者社区提问** 如果您是开发者,并且在使用这个类时遇到问题,建议您在开发者社区(如Stack Overflow)提问。提问时请提供: - 您正在尝试做什么? - 出现的具体错误信息(包括完整的堆栈跟踪)。 - 您已经尝试过哪些解决方法? ### 5. **检查依赖和版本** 如果这个类属于某个第三方库,请确保您使用的库版本正确,并且所有依赖项都已正确配置。 由于您没有提供具体的问题描述,以上是一般性建议。如果您能提供更多上下文(例如错误日志、您正在进行的操作等),我可以给出更有针对性的建议。 另外,根据您之前提供的引用,它们主要涉及JavaFX的界面设计和样式,以及Eclipse插件安装问题,与交易类应用似乎没有直接关联。因此,建议您按照上述步骤自行排查。 §§相关问题§§ 1. 如何解读Java应用程序的堆栈跟踪(stack trace)? 2. 如何有效地在Stack Overflow上提问? 3. 如何查找和使用第三方Java库的文档? 希望这些建议对您有所帮助!</think>### 关于 `com.fx24k.trader.trader.fxclient` 类或应用的问题分析 根据您提供的类名 `com.fx24k.trader.trader.fxclient`,结合引用内容和Java开发经验,以下是可能的问题方向及排查建议: #### 常见问题方向 1. **类加载失败** - 类路径缺失:检查是否缺少包含该类的JAR包或模块依赖 - 包名冲突:存在同名类但签名不同的冲突(需检查依赖树) - ProGuard混淆问题(Android场景):若为发布版本,类名可能被优化 2. **功能性问题** - 外汇交易逻辑错误:从包名`trader`和`fxclient`推测,可能涉及外汇交易接口调用或数据处理异常 - 网络连接问题:`fxclient`暗示需连接外汇交易服务器,需检查网络配置和API密钥 - 数据解析异常:交易数据格式不匹配导致解析失败 3. **环境配置问题**(参考引用[5]) - 构建工具配置错误:Gradle/Maven依赖声明不完整 - IDE插件冲突:类似引用[5]中e(fx)clipse的安装问题可能影响类解析 - JDK版本不兼容:需确认类编译的Java版本 #### 排查步骤 1. **基础检查** ```bash # 检查类是否存在 jar tvf your_lib.jar | grep com/fx24k/trader/trader/fxclient ``` - 确认类文件在预期位置:`your_project/build/classes/.../fxclient.class` 2. **依赖分析** - 使用Maven检查依赖冲突: ```xml <dependency> <groupId>com.fx24k.trader</groupId> <artifactId>trader-sdk</artifactId> <!-- 假设的artifact --> <version>X.X.X</version> </dependency> ``` - 执行 `mvn dependency:tree` 查看依赖传递 3. **运行时诊断** - 添加类加载日志(JVM参数): ``` -verbose:class ``` - 捕获 `ClassNotFoundException` 或 `NoClassDefFoundError` 堆栈 #### 代码示例:动态类加载检查 ```java try { Class<?> clazz = Class.forName("com.fx24k.trader.trader.fxclient"); System.out.println("类加载成功:" + clazz.getMethods()[0]); } catch (ClassNotFoundException e) { System.err.println("类未找到!检查:"); System.err.println("1. 依赖是否添加\n2. 包名是否正确\n3. 类路径配置"); e.printStackTrace(); } ``` #### 扩展建议 1. 若为Android应用: - 检查 `proguard-rules.pro` 是否保留该类: ``` -keep class com.fx24k.trader.trader.** { *; } ``` 2. 若涉及JavaFX(参考引用[3][4]): - 确保 `module-info.java` 正确导出包: ```java module your.module { exports com.fx24k.trader.trader; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值