Skip to content
master
Switch branches/tags
Code

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Introduction

Open Trade Gateway 是一套主要用于期货交易的中继服务器系统. 它可以接受客户端以 DIFF协议 (Differential Information Flow for Finance) 接入, 完成用户终端与期货柜台系统的数据交互.

本项目目前支持的期货交易柜台系统包括:

  • CTP
  • Femas 主席系统 (测试中)
  • 恒生 UFX 系统 (测试中)

DIFF Collection 中列出了一些支持本系统的终端产品

Install

本服务必须在Linux环境下安装运行。下面的安装步骤以 Debian 9 为例,其它 linux 发行版可能需要相应调整.

安装 openssl, libcurl, boost 等依赖库

用apt命令安装 openssl 和 libcurl:

sudo apt install libcurl4-openssl-dev

2019-03-21前的版本需要安装 boost 1.68.0, 参见 https://www.boost.org/doc/libs/1_68_0/more/getting_started/unix-variants.html

2019-03-21后的版本需要安装 boost 1.70.0, 参见 https://www.boost.org/users/history/version_1_70_0.html

安装 open-trade-gateway

获取 open-trade-gateway 代码:

git clone https://github.com/shinnytech/open-trade-gateway.git
编译与安装::
cd open-trade-gateway sudo make sudo make install

第一次安装后需要将如下两个路径加入/etc/ld.so.conf文件中

  • /usr/local/bin/
  • /usr/local/lib/

然后执行命令:ldconfig

Config

本系统运行需要两个配置文件:

/etc/open-trade-gateway/config.json,用于服务进程的一些配置项:

{
  "host": "0.0.0.0",                                      //提供服务的IP地址
  "port": 7788,                                           //提供服务的端口号
  "auto_confirm_settlement": false,                       //是否自动确认结算单
  "user_file_path": "/var/local/lib/open-trade-gateway",  //存放用户文件的目录,必须事先创建好
  "log_price_info":true,                                              //是否打印行情日志
  "use_new_inst_service":false                                                        //是否启用新版的合约服务
}

/etc/open-trade-gateway/broker_list.json 中可以设置一组或多组期货公司前置机:

[
  {
    "name": "simnow",//一个系统中要保证唯一性
    "type": "ctp",//交易系统类型,目前支持ctp(ctp非穿管版)、ctpse13(ctp穿管版6.3.13版)、ctpse(ctp穿管版6.3.15)、sim(快期模拟)四种
    "is_fens":false,//前置地址是否是Fens地址,只对type=ctp,ctpse或者ctpse13时有效,type=sim时忽略
    "broker_id": "9999",//broker_id,必须与交易系统中的设置一致
    "product_info": "abcd",//如果type=ctp,这里填写从期货公司申请的产品UserProductInfo;如果type=ctpse、或者ctpse13,这里填写从期货公司审请的中继产品RelayAppID;type=sim时忽略
    "auth_code":"VUZMGH==",//如果type=ctp,这里填写从期货公司申请的产品AuthCode(由对应的UserProductInfo生成);如果type=ctpse、或者ctpse13,这里填写从期货公司申请的中继产品AuthCode(由对应的RelayAppId生成);type=sim时忽略
    "trading_fronts": [//如果is_fens=false,这里填写ctp的交易前置机地址,如果is_fens=true,则这里填写ctp的命名服务地址,type=sim时忽略
    "tcp://218.202.237.33:10002"
    ]
  }
]

/etc/open-trade-gateway/broker_list.json中的一组配置也可以用/etc/open-trade-gateway/broker_list/目录下的一个文件来代替,如可以用simnow.json文件代替上面的配置:

{
  "name": "simnow",
  "type": "ctp",
  "is_fens":false,
  "broker_id": "9999",
  "product_info": "abcd",
  "auth_code":"VUZMGH==",
  "trading_fronts": [
  "tcp://218.202.237.33:10002"
  ]
}

Run

在命令行下运行服务器主程序:

open_trade_gateway

系统运行日志将输出到文件 /var/log/open-trade-gateway/open-trade-gateway.log 中,如果目录 /var/log/open-trade-gateway/ 不存在,请手工创建.

Test

主程序启动后,用任意websocket client 连接到服务端口,应该收到这样的信息:

{
  "aid": "rtn_brokers",
  "brokers": ["simnow"]
}

表示服务器主程序启动正常

负载均衡服务配置

1、首先按上述配置步骤在一台或者多台服务器上配置一个或者多个open_trade_gateway实例;

2、按下面的配置文件(文件名config-ms.json,需要安装在/etc/open-trade-gateway/下)的说明配置负载均衡服务器结点;

{
        "host":"0.0.0.0",//提供负载均衡服务的IP地址
        "port":5566,//负载均衡服务的端口号
        "slaveNodeList":[//在第1步中已经配好的open_trade_gateway实例列表
        {
                "name":"135",//结点名称,不能重复
                "host":"192.168.1.35",//open_trade_gateway实例的IP地址
                "port":"7788", //open_trade_gateway实例的端口号(注意:这里是字符串)
                "path":"/", //open_trade_gateway实例的路径,默认为"/"
                "bids": ["simnow","nhqhsopt"]   //bid名称列表,来自于broker_list.json的name字段
        },
        {
                "name":"136",
                "host":"192.168.1.36",
                "port":"7788",
                "path":"/",
                "bids": ["simnow","shzq"]
        },
        {
                "name":"137",
                "host":"192.168.1.37",
                "port":"7788",
                "path":"/",
                "bids": ["simnow","simsy"]
        }
        ]
}

3、上述配置的负载均衡服务器结点名称不可重复,如果重复,按步骤2中结点配置的顺序,先出现的有效,后出现的忽略;

4、一个bid可以出现在一个或者多个结点的bid名称列表中,如果一个bid只出现在一个结点中,则该bid的用户只会分配到该结点中;

5、如果一个bid出现在多个结点中,则该bid的用户会分别分配到不同的结点中,按当时总用户最少优先的原则分配;

6、如果一个bid没有出现在任何结点中,则该bid的用户会在所有结点中进行分配,按当时总用户最少优先的原则分配;

7、首先正确启动上述结点上的open_trade_gateway实例,最后启动负载均衡服务器open-trade-gateway-ms;

8、采用DIFF协议的客户端应用连接open-trade-gateway-ms的服务端口(上例中的5566)发送请求,open-trade-gateway-ms会根据请求的bid自动将请求转发到不同的open-trade-gateway结点进行处理,实现负载均衡;

条件单服务配置

1、目前,条件单服务只是一个逻辑上的服务,因此正常编译安装了open-trade-gateway之后就同时安装了条件单服务;

2、按下面的配置文件(文件名config-condition-order.json,需要安装在/etc/open-trade-gateway/下)的说明配置条件单服务;

{
 "run_server":true,
 "max_new_cos_per_day":20,
 "max_valid_cos_all":50,
 "auto_start_ctp_time": [{"weekday":1,"timespan":[{"begin":835,"end":840},{"begin":2040,"end":2045}]},
 {"weekday":2,"timespan":[{"begin":835,"end":840},{"begin":2040,"end":2045}]},
 {"weekday":3,"timespan":[{"begin":835,"end":840},{"begin":2040,"end":2045}]},
 {"weekday":4,"timespan":[{"begin":835,"end":840},{"begin":2040,"end":2045}]},
  {"weekday":5,"timespan":[{"begin":835,"end":840},{"begin":2040,"end":2045}]}
 ],
 "auto_close_ctp_time": [{"weekday":1,"timespan":[{"begin":1535,"end":1540}]},
 {"weekday":2,"timespan":[{"begin":235,"end":240},{"begin":1535,"end":1540}]},
 {"weekday":3,"timespan":[{"begin":235,"end":240},{"begin":1535,"end":1540}]},
 {"weekday":4,"timespan":[{"begin":235,"end":240},{"begin":1535,"end":1540}]},
 {"weekday":5,"timespan":[{"begin":235,"end":240},{"begin":1535,"end":1540}]},
 {"weekday":6,"timespan":[{"begin":235,"end":240}]}
 ],
 "auto_restart_process_time":  [{"weekday":1,"timespan":[{"begin":900,"end":1530},{"begin":2100,"end":2359}]},
 {"weekday":2,"timespan":[{"begin":0,"end":230},{"begin":900,"end":1530},{"begin":2100,"end":2359}]},
 {"weekday":3,"timespan":[{"begin":0,"end":230},{"begin":900,"end":1530},{"begin":2100,"end":2359}]},
 {"weekday":4,"timespan":[{"begin":0,"end":230},{"begin":900,"end":1530},{"begin":2100,"end":2359}]},
 {"weekday":5,"timespan":[{"begin":0,"end":230},{"begin":900,"end":1530},{"begin":2100,"end":2359}]},
 {"weekday":6,"timespan":[{"begin":0,"end":230}]}
 ]
}
  • "run_server"表示是否启用条件单服务,true表示启用,false表示不启用;
  • "max_new_cos_per_day"表示单个用户一个交易日能够添加的最大条件单数量限制,默认为20条;
  • "max_valid_cos_all"表示单个用户最多可同时持有的最大未触发条件单数量限制,包括非本交易日添加的,默认为50条;
  • "auto_start_ctp_time"表示自动重登录用户的时间段配置,在配置的时间段内,如果发现用户还没有登录交易系统,且用户有条件单数据,条件单服务会自动登录交易系统,以保证条件单能够正常被触发;
  • "auto_close_ctp_time": 表示自动关闭CTP实例的时间段配置,在配置的时间段内,系统会自动关闭CTP实例,以防止CTP在非交易时间段内发生崩溃,关闭CTP实例后用户仍然能够登录交易系统并查询用户截面数据,但不能下单;
  • "auto_restart_process_time":表示自动重启交易实例进程的时间段配置,在配置的时间段内,如果用户的交易实例进程崩溃,open-trade-gateway会自动重启该进程;如果open-trade-gateway进程在该配置项的时间段内重新启动,也会自动启动有条件单的用户进程;
  • 上述的三个时间段配置全部采用{"weekday":1,"timespan":[{"begin":835,"end":840},{"begin":2040,"end":2045}]的形式;
  • "weekday":XX定义一周的某一天,0表示周日,1表示周一,依次类推;
  • "timespan":[{"begin":835,"end":840},{"begin":2040,"end":2045}]表示一个时间区间的列表,列表项表示一天中的某个时间段,如{"begin":835,"end":840}表示早上8:30到8:40之间;

3、条件单服务配置文件修改后需要重启交易系统,open-trade-gateway只会在启动时加载config-condition-order.json配置文件;

Q&A

1、执行open_trade_gateway后,未启动重新返回命令行

解决:基本出现在编译完成后的首次运行,请检查是否对broker_list.json 、config.json重命名并配置。出现该问题时,一般/var/log/open-trade-gateway//open-trade-gateway.log中的提示信息是找不到config.json文件