Apifiny 算法交易系统
Apifiny 算法交易系统是一个支持多种加密货币交易的交易库。 AATS 的核心价值是轻量级和低延迟,因为底层系统是用 C++ 优化和封装的,例如交易所连接、订单簿管理和下单。它极大地降低了用户的学习曲线。使用 AATS,用户可以无缝地部署您的策略并准备好进行实时交易,而不会感到任何痛苦。下面是AATS python API的介绍。
包结构
在python模块级别,AATS利用事件驱动框架,由以下组件组成:
- Base Strategy:它是一个基本策略类,您可以基于它开发您的策略
- Trade Service:它是核心交易模块,用于加载配置、启动交易服务器和添加策略并开始运行实时交易
- Market Service:用于启动市场服务器,订阅您想收听的品种和交易所
- Control Service:与服务器管理有关,例如显示正在运行的市场/交易服务器,杀死服务器等
基本策略
一旦您的策略继承Base Strategy,您可以改写以下函数/回调并添加您自己的逻辑:
函数/回调 |
说明 |
send_order |
发送订单功能 |
send_cancel_order |
发送取消订单的功能 |
close |
函数定义如何关闭策略 |
onQuote |
订单簿数据更新后回调 |
onTick |
交易数据更新后回调 |
onNotify |
onQuote 和 onTick 的组合 |
onOrderCreated |
新订单创建后的回调 |
onOrderAcked |
交易所确认新订单后回调 |
onOrderRejected |
新订单被交易所拒绝后回调 |
onOrderCancelCreated |
取消订单创建后的回调 |
onOrderCancelAcked |
交易所确认取消订单后回调 |
onOrderCancelRejected |
一旦取消订单被交易所拒绝,回调 |
onOrderExec |
一旦从交易所执行订单(包括部分执行),回调 |
onOrderCanceled |
从交易所取消订单后回调 |
onOrderClosed |
一旦订单从交易所关闭,回调 |
发送订单
领域 |
说明 |
强制性 |
exchange |
你想交易的交易所 |
是 |
symbol |
您要交易的符号 |
是 |
price |
交易价格 |
是 |
size |
交易规模 |
是 |
side |
交易方向 |
是 |
tif |
订单类型,目前支持IOC和POS |
是 |
取消订单
领域 |
说明 |
强制性 |
order_id |
内部订单编号 |
是 |
close
这是一个抽象函数,用户需要重写它并定义如何正确关闭您的策略,如取消当前委托订单,平仓等。
onQuote
回调一旦订单数据更新,消息包含以下字段:
{
'type': 'onQuote',
'cid': 1001,
'length': 5, # order book depth level
'bid_0_qty': 0.27713,
'bid_0_px': 19327.67,
'bid_1_qty': 0.04621,
'bid_1_px': 19327.08,
'bid_2_qty': 0.12618,
'bid_2_px': 19326.8,
'bid_3_qty': 0.05,
'bid_3_px': 19326.68,
'bid_4_qty': 0.28508,
'bid_4_px': 19326.66,
'ask_0_qty': 0.13624,
'ask_0_px': 19327.87,
'ask_1_qty': 0.0063,
'ask_1_px': 19327.92,
'ask_2_qty': 0.02602,
'ask_2_px': 19328.0,
'ask_3_qty': 0.32749,
'ask_3_px ': 19328.07,
'ask_4_qty': 0.0066,
'ask_4_px': 19328.16
}
OnTick
回调一旦交易数据更新,消息包含以下字段:
{
'type': 'onTick',
'cid ': 1002,
'tradeType': 1, # aggresive trade side, 1 for buy, -1 for sell
'qty': 0.0249,
'px': 1638.93
}
onNotify
回调一旦 onTrade 或 onQuote 被触发, 参数“no_type”表示通知类型,1为onQuote,0为onTick
onOrder**
onOrder不同order的回调状态,消息包含以下字段:
{
"order":{
"exchange":"BINANCE",
"fill_notional":"0",
"fill_price":"19318.88",
"fill_size":"0.001",
"margin":false,
"margin_source":"spot",
"order_id":1, # 内部订单id
"price":"19318.88",
"remote_id":"", # 交易所订单id
"side":"buy",
"size":"0.001",
"symbol":"BTCUSDT"
},
"type":"onOrderCreated" # 订单状态
}
Trade Service
Trade Service提供以下API
函数/回调 |
说明 |
set_ts_connection |
设置与Control Server的连接配置 |
set_md_connection |
设置与Market Server的连接配置 |
config_exchange |
设置交易所相关配置 |
set_apikey |
设置 apikeys |
set_fee |
设置佣金(可选) |
add_md_symbol |
添加你想听的交易品种 |
add_trade_symbol |
添加您要交易的交易品种 |
add_strategy |
添加用户定义策略 |
run |
开始实时交易 |
set_ts_connection
领域 |
说明 |
强制性 |
ip |
Control Service的ip地址 |
是 |
port |
Control Service的端口 |
是 |
set_md_connection
领域 |
说明 |
强制性 |
ip |
Market Server的ip地址 |
是 |
port |
Market Server的端口 |
是 |
send_type |
发送类型 |
是 |
配置交换
领域 |
说明 |
强制性 |
exchange |
交易所名称 |
是 |
trade_type |
交易模式,“直接”用于实时交易,“沙盒”用于测试交易,目前“沙盒”仅支持币安 |
是 |
set_apikey
参数 |
说明 |
强制性 |
exchange |
交易所名称 |
是 |
key |
api 键 |
是 |
secert |
api 秘密 |
是 |
password |
api密码 |
否 |
subaccount |
api子账号 |
否 |
set_fee
参数 |
说明 |
强制性 |
交流 |
交易所名称 |
是 |
taker_fee |
Taker佣金 |
是 |
maker_fee |
Maker佣金 |
是 |
add_md_symbol
参数 |
说明 |
强制性 |
符号 |
币对名称 |
是 |
exchange |
交易所名称 |
是 |
level_num |
订单簿最大深度,默认为5 |
否 |
add_trade_symbol
参数 |
说明 |
强制性 |
symbol |
币对名称 |
是 |
exchange |
交易所名称 |
是 |
level_num |
订单簿最大深度,默认为5 |
否 |
add_strategy
参数 |
说明 |
强制性 |
strategy |
用户自定义策略实例 |
是 |
市场服务
对于市场服务,我们提供了三种模式,P2P是云用户,BROADCAST是docker用户,MULTIBROAD是本地用户。您需要针对不同的用户案例相应地设置网络配置。
市场服务提供以下API
函数/回调 |
说明 |
set_control_server |
设置与Control Server的连接配置 |
set_network_cfg |
为Market Server设置网络配置 |
add_listen_symbol |
添加监听币对 |
run |
开始运行 |
set_control_server
领域 |
说明 |
强制性 |
ip |
Control Server的ip地址 |
是 |
port |
Control Server的端口 |
是 |
set_network_cfg
领域 |
说明 |
强制性 |
send_type |
发送消息类型。默认为 P2P |
否 |
ip |
UPD/TCP IP 地址 |
是 |
port |
UPD/TCP 端口 |
是 |
card_name |
网卡名称。仅当发送类型为 MULTIBROAD时才设置 |
否 |
备注: send_type 共有三种,
1. P2P - TCP 点对点数据传输
2. BROADCAST - UDP 广播数据传输
3. MULTIBROAD - UDP MULTIBROAD数据传输
当传输类型为P2P时,参数ip和port对应行情数据服务器监听的ip地址和端口。
传输类型为BROADCAST时,参数ip(255.255.255.255)和端口对应广播ip和接收方的端口
传输类型为MULTIBROAD时,参数ip(224.0.0.0 to 239.255.255.255)和port对应MULTIBROAD的ip和接收端的端口
add_listen_symbol
领域 |
说明 |
强制性 |
symbol |
符号名称 |
是 |
exchange |
交易所名称 |
是 |
level_num |
订单簿最大深度,默认为5 |
否 |
Control Service
Control Service具有以下功能:
函数/回调 |
说明 |
set_control_server |
设置Control Service器的连接配置 |
show_all_trade_servers |
列出所有正在运行的交易服务器 |
show_all_market_servers |
列出所有正在运行的市场服务器 |
kill_server |
用给定的 pid 杀死服务器 |