Coder Social home page Coder Social logo

ft's People

Contributors

hvsqg avatar mutex86 avatar xywanz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ft's Issues

tick延时有点大,spdlog显示从ctp到策略达500us

在ctp附近加的log,和策略ontick加的log比较。

2021-03-25 02:04:39.057.057464 [error][] : instrumentid=ag2106
2021-03-25 02:04:39.057.057794 [info][] : GridStrategy::on_tick ft::datetime::Datetime(2021, 3, 25, 2, 4, 38, 500000),id:au2106, last_price:367.36, grid:5239.00, long:0, short:0, trades:1

有什么办法能减少这个延迟么, 比如跳过redis直接先送到策略。

如果本地字符集中没有GB2312可能导致运行时抛出异常

ctp的中文字符集是gb2312,ft会把其转换成utf8,如果本地没有安装gb2312的话,程序运行到需要转码的地方时会抛出错误,临时的解决办法就是修改gb2312_to_utf8这个函数,使其直接返回传入的字符串即可,但是这样会在运行时打印出乱码。

python的策略demo是否还能使用

@DuckDuckDuck0 您好,python的demo使用redis进行通信,添加zmq通信后,使用zmq发生tick和订单回报,python是否还能使用,是不是需要手动切换回redis通信?

zmq连接建立的时刻发消息可能会丢失

zmq连接建立需要时间,但是如果在连接还未建立的时候发送消息,会导致消息丢失。
目前的解决方式是连接建立后等待200ms,更好的解决方案应该是通过poll监听连接成功的事件,但是会让逻辑复杂

拆分各个模块,用共享内存做IPC

仓位、资金等信息都加载到共享内存,行情数据也考虑写入到共享内存。策略程序单独出来,通过共享内存获取仓位资金等信息,并通过共享内存队列进行下单,这样一来既可以解耦各个部分,又可以实现一个策略一个进程。

TODO

  1. 策略引擎的重构。策略引擎(StrategyEngine)现在完全是单线程的,包括仓位、订单、成交回执、tick数据的处理、策略的执行都是在同一个线程里,这样可以避免锁,对于现在只加载单个合约、不使用复杂指标、只加载单个策略、策略不进行复杂计算的情况来说没什么性能问题。但是考虑到如果订阅的合约数量大了,以及合约和策略将来可能是多对多的关系,而且策略可能要进行一些比较复杂的计算(深度学习之类的),当前的架构就会存在性能瓶颈,严重则会导致tick数据被无限滞后。所以需要对策略引擎进行重新设计,使得策略引擎能应付n:m(n个策略对应m个合约)的策略。
    ---- 已完成
  2. 开发行情系统。从行情系统应能高效地获取到历史行情数据以及当日行情数据。这里还需要对行情数据进行一些定义,到底需要用到哪些基本的行情数据(如tick,K线等)。
    ---- 目前完成行情转发,历史行情管理及指标将在其他模块提供
  3. 指标模块。指标模块能根据历史数据预先计算历史的指标,还能根据当日的tick数据更新当日的指标,用户可自定义指标,同时交易系统也会提供常用的指标)。
  4. TradingView对于订单的处理可能存在问题。
    ---- 已废弃
  5. 开发回测系统,通过替换CTP的动态库(换成自己开发的)来实现回测。
    ---- 直接自己写个模拟的gateway而不用替换ctp的so
  6. 要能处理断开连接等错误情况。
  7. 每日收盘结算。
  8. 能处理本地资金更新信息。
  9. 能处理启动时就已经存在的挂单。
    ---- 启动时撤单,已完成

TODO:提出一个方便地获取并操作历史数据的解决方案

TradingEngine现在是一个基于tick数据的交易框架,并未提供历史数据的采集、处理等操作,目前需要一套较为完整的历史数据解决方案供策略使用:

  1. 加载历史数据,指定加载的数据,从数据库、文件或网站等
  2. 对数据进行加工,生成指标等
  3. 同时支持通过实时tick数据对指标进行更新
  4. 数据采集、持久化等,供后续使用

Any plan on measuring tick to trade latency?

是否有开发计划测算 tick to trade 的延迟?

比如使用chrono提供的 API std::chrono::steady_clock::now().time_since_epoch() 计算 real time latency;或者 tsc frequency 校准不同 CPU core 后计算 CPU time latency?

TODO:行情回报分发以及交易指令分发全部基于无锁共享内存队列实现

开发计划:
第一阶段:提供一个完整的策略交易平台,对于速度不做过多优化,能够保证易用性,目前处于该阶段
第二阶段:行情回报分发以及交易指令分发全部基于无锁共享内存队列实现。这个其实可以和第一阶段一起推进,但由于精力有限还未实施
第三阶段:优化数据结构、cache命中率以及整体架构

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.