CTP-R自动化交易

Discussion in 'CTP' started by mushrooman, Dec 3, 2012.

  1. 请教一下如何实现基于CTP和R语言的自动化交易。仿佛方案有二,
    一: 利用现成的CTP-Python,然后在Python里面调用R。
    二: 弄个CTP-R出来。

    主要是做到下面:
    1. 自动下单,读取实际成交价格,实际止损价格,当前仓位等。
    2. 数据频率为1,3,5分钟这三个频率的开高低收。

    有高人愿意赐教一二吗? 有一定报酬,但不高。

    联系方式:ruser168@gmail.com
     
  2. 如果考虑专业性,速度,性能, 把CTP的库封装成R语言的一个库就可以了。
    用R做实时性的交易还是有不少的问题。它的运行速度慢,分析算法可能费不少时间。

    综合考虑,我认为拿R作盘后分析还可以,拿它做交易的平台,实在看不出来有什么优点。
     
  3. 多谢Toby的点评。我的策略对分析时间要求不是很高,R将就可以,当然不是最好的办法。 我想问的问题是如何“把CTP的库封装成R语言的一个库就”? 可认识有这方面能力的高人? 谢谢回复。
     
  4. 我猜测你考虑R作为平台很大可能性是因为想实时用library做比MA稍微复杂一点的统计分析(比如实时聚类,实时的协整分析,实时的主成分),而又不想用C重写这部分代码,所以才考虑使用接口。而且既然是实时的,那么策略应该不是日间的。如果不是因为这个原因,那最好不用R,最主要的原因如下:
    R是单线程,,而实际交易需要同时处理行情数据和订单执行情况...如果是按照 “ 获取实时数据 -> 计算指标和交易逻辑 -> 下单 -> 根据下单回报情况决定撤单,或者追单,然后更新持仓,浮动盈亏等等指标 -> 接受下一个Tick,重复以上逻辑 ” 这样单线程的思维,那么有可能中间某个步骤会阻塞整个流程(比如假设3个Tick之后撤单,则完成这个流程需要至少4个Tick,那中间3个Tick的行情怎么处理?直接丢弃?)。。
    如果要硬要设计,,那么我自己想的一种办法是::
    R的线程中优先处理与行情有关的指标(比如你的聚类,主成分,小波等),这样的话应该在C中单独开辟一个线程存放行情数据,,用Rcpp的DataFrame和R交换数据。。订单执行的策略全部由C另开一个线程完成。。下单只需一个函数(指定价格,量,开平,止损止赢价,等待时间,订单编号等等)完成从R到C的通信。这样的话实际上是在写一个C的平台了,因为大多数细节都放在了C的接口上,R只是完成了从行情数据到下单命令发出这个步骤呢,。

    扯了这么多,总之,个人觉得还是用R作日间的策略吧。日内的矩阵运算还是用C好了。
     
  5. 楼主貌似在cos上也发了贴,,其实就是zggjtsgzczh的思路。。
     
  6. 多谢qsoft_cn大侠的点评。用R的原因基本是就是大侠猜到的,自己弄了些算法,但是不想重写代码。模型代码,资金管理等重写很麻烦,而且一部分东西还要依赖某些R包。我的日内策略一个特点是对下单速度要求不是特别高,一定的滑点可以接受,从接收新OHLC,实际账户情况,实际成交价格等到下单完成如果不超过10秒,对我的策略都应该可以,硬件应该是高速内存+SSD+高频CPU。

    Rcpp本人只是知道把一些loop用Rcpp写,然后在R里面调用。难的是我不知道怎么在R里面下单和接收实际止损价格,实际成交价格等信息。由于本人没有任何使用API的经验,对开发CTP-R接口很无知,望不吝赐教。
     
  7. IPC考虑嘛? 比方说通过文件系统或socket之类的方法
     
  8. 请Wenyan稍微解释一下,如果感觉不方便,邮件也可以。 ruser168@gmail.com
    谢谢。
     
  9. 楼主,你这个帖子下面几行就有个解决方案……
     
  10. 发你邮箱了。linux64 是比较好的平台,而windows版本的R就是用mingwGCC编译的,还必须先把CTP的VC编译的C++ API转为纯C的API才能被RTOOLS的GCC支持,,微软真烂。PS:切身体会,我在win下用R处理大数据经常卡,所以在win下做交易,而且又是用R要慎重。随时做好手动干预的准备。
     
  11. 简单来说就是通过某种方式完成C++和R两个进程之间的信息交换。以文件(包括数据库,下同)为例:
    1. 行情部分:用C++收行情数据,收到的行情数据写文件,R那边不断地读文件获取最新的行情数据来做分析。
    2. 交易部分:R要下单时也是写文件,C++的交易模块不断检查下单文件,发现R那边新下单了就立刻发送出去。类似的,C++收到的各种回报也写文件,R那边根据需要读取相关的部分。

    这个方法的好处是通用,与编程语言没有任何关系,风险小。坏处是可能工作量大一些,性能较难做到极致(看你的要求这点倒不是问题)。合适与否,你得自己斟酌了:)
     


  12. 再次感谢WenYan的建议,我以前也想过甚至用txt来让自动交易平台和R语言交互:
    1. 自动交易平台把最新的帐号信息,实际成交,实际止损等发到某一txt文件中,然后我读取。
    2. 根据最新信息,更新信号,仓位,止损等,然后写到txt文件,自动交易平台再到txt中读取。

    俺的策略不是高频,只是日内调仓而已,可能一笔持仓几天,所以对下单速度没有很高的要求。俺目前先按照qsoft大侠的思路去做,如果俺学不会,再来向您请教,十分感谢!
     

  13. qsoft_cn真是传说中的武林高手,不但本领高,还愿意帮帮俺这样的菜鸟,多谢!
    对在windows下面用RTOOLS和RCPP的繁琐性我也有些体会。在windows里面用R做并行运算就经常断掉,看来现在不得不学习Linux了。 有机会,去上海当面谢过qsoft!
     
  14. 不如直接通过Rinside在C++里开一个R线程,直接在C++和R之间交换数据。R产生
    出来的信号传回C++,由C++下单就可以了。

    不过需要Linux环境,Windows下很麻烦,不建议使用。

     
  15. 多谢大家的各种建议,特别感谢qsoft_cn提供的巨大帮助!
     
  16. 不客气。。通过海洋论坛认识众多海友相互交流是乐趣所在。
     
  17. 哇噻,这里高手如云啊...本人一直用R,ubuntu系统,不太了解C++,请问怎么如何实现C++读取实时行情和向交易所发送交易信号呢?有什么相关的资料可以看么?
     
  18. http://www.benvanvliet.net/ 以及此人的<build automated trading system>
    额,,老兄,这个综合交易平台的论坛板块就是专门为回答你这个问题而设的..
     
  19. 谢谢,这个不错:D:p

    怎么里面的资料文件下载不下来?
    奥,好像可以下载,就是很慢,不会要翻墙吧?:p
     
  20. 感谢大大!这个要好好看看...貌似挺复杂啊