Git Product home page Git Product logo

nodejs-for-futuopend's Introduction

FutuQuant量化接口Nodejs版本

说明

基于 FutuQuant v3.2 底层协议封装的 nodejs 版本接口,数据格式使用 protobuf,使用前请先在本地或者服务端启动 FutuOpenD 服务。

  • 使用了async/await语法,要求nodejs版本v7.10.1以上,v7.5.1以上可以使用--harmony或者--harmony-async-await参数开启async/await的支持,v7.6.x 以可以不用开启 flag 直接使用。。
  • 底层协议基于FutuQuant v3.2,参考:FutunnOpen/futuquant
  • 数据传输格式目前只支持 protobuf。
  • API文档相关:https://yisbug.github.io/nodejs-for-FutuOpenD/doc/index.html

为了方便使用,请注意部分接口参数及返回结果和富途官方版本不完全一致,详细请参考API文档

安装

npm install futuquant --save

或者

yarn add futuquant

使用

/**
-  **所有行情相关协议获取数据都需要先通过(1005)协议订阅成功后才能查询**
-  **订阅的上限为500个订阅单位。一只股票的一个K线类型占2个订阅单位、分时占2个订阅单位、
-  报价占1个订阅单位、摆盘占5个订阅单位(牛熊为1)、逐笔占5个订阅单位(牛熊为1)、经纪队列占5个订阅单位(牛熊为1)。**
-  **反订阅(1006)的时间限制为1分钟,即订阅某支股票某个订阅位1分钟之后才能反订阅**
-  **30秒内不能超过20次交易请求。**
-  **建议所有行情拉取接口在同一条长连接上。推送数据在第二条长连接上。交易接口在第三条长连接上。**
 */
const fs = require('fs');
const path = require('path');
const FtQuant = require('./src/futuquant');

// 自定义日志对象
const bunyan = require('bunyan');
const bunyanDebugStream = require('bunyan-debug-stream');

const bunyanLogger = bunyan.createLogger({
  name: 'sys',
  streams: [{
    level: 'debug',
    type: 'raw',
    serializers: bunyanDebugStream.serializers,
    stream: bunyanDebugStream({ forceColor: true }),
  }],
});

// 从 opend 的配置文件中获取 userID,pwd
const FutuOpenDXMLPath = path.join(__dirname, '../FutuOpenD_1.01_Mac/FutuOpenD.xml');
const ftOpenDConfig = fs.readFileSync(FutuOpenDXMLPath);
const userID = ftOpenDConfig.match(/login_account>(\d*?)<\/login_account/)[1];
const pwdMd5 = ftOpenDConfig.match(/trade_pwd_md5>(.*?)<\/trade_pwd_md5/)[1];

// openD 配置
const ftConfig = {
  ip: '127.0.0.1',
  port: 11111,
  userID,
  market: 1, // 港股环境
  pwdMd5,
  env: 1, // 0为仿真,1为真实,默认为1。
};

const ft = new FtQuant(ftConfig, bunyanLogger);

const init = async () => {
  await ft.init(); // 初始化 ft 模块,包括调用initConnect、解锁交易接口、设置 TradeHeader

  let res = null;
  res = await ft.getGlobalState(); // 获取全局状态
  console.log('getGlobalState', res);

  // 获取历史成交记录,不再需要手动解锁交易密码以及调用setCommonTradeHeader
  await ft.trdGetHistoryOrderFillList({
    beginTime: '2018-01-01 00:00:00',
    endTime: '2018-02-01 00:00:00',
  });
};

init();

测试

请先修改test/futuquant.test.jsFutuOpenDXMLPath的路径,然后执行npm installyarn安装相关依赖。

运行测试:

npm test

nodejs-for-futuopend's People

Contributors

dependabot[bot] avatar yisbug 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

Watchers

 avatar  avatar  avatar  avatar  avatar

nodejs-for-futuopend's Issues

行情推送的API在callback都會報錯

我嘗試過 subQotUpdateBasicQot 和 subQotUpdateTicker 用作接收推送
但都會發生錯誤

例如我:
ft.subQotUpdateBasicQot((basicQotList) => { console.log(basicQotList); })
則會在socket.js:277 中
Error: 通知回调执行错误,response:Qot_UpdateBasicQot(3005),reqId:2,bodyLen:563,堆栈:Error: invalid wire type 7 at offset 96
at BufferReader.Reader.skipType

市价单港股已支持

好工具,赞一个。提个小优化

https://futunnopen.github.io/futu-api-doc/protocol/base_define.html#ordertype

enum OrderType
{
        OrderType_Unknown = 0; //未知类型
        OrderType_Normal = 1; //普通订单(港股的增强限价单、A股的限价单、美股的限价单)
        OrderType_Market = 2; //市价订单(目前支持美股、港股正股、涡轮、牛熊、界内证)

        OrderType_AbsoluteLimit = 5; //绝对限价订单(目前仅港股),只有价格完全匹配才成交,否则下单失败,比如你下价格为5元的买单,卖单价格必须也要是5元才能成交,低于5元也不能成交,下单失败。卖出同理
        OrderType_Auction = 6; //竞价订单(目前仅港股),仅港股早盘竞价和收盘竞价有效,A股的早盘竞价订单类型不变还是OrderType_Normal
        OrderType_AuctionLimit = 7; //竞价限价订单(目前仅港股),仅早盘竞价和收盘竞价有效,参与竞价,且要求满足指定价格才会成交
        OrderType_SpecialLimit = 8; //特别限价订单(目前仅港股),成交规则同增强限价订单,且部分成交后,交易所自动撤销订单
        OrderType_SpecialLimit_All = 9; //特别限价且要求全部成交订单(目前仅港股),要么全部成交,要么自动撤单
}
}

此处 trdPlaceOrderMarket 代码应该可以替换实现,当前版本偶发情况可能会造成请求频率频繁被系统认为攻击

https://yisbug.github.io/nodejs-for-FutuOpenD/doc/futuquant.js.html#sunlight-1-line-955

以及文档可以做相关更新

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.