2022-02-14 08:16:32 +00:00
|
|
|
syntax = "proto3";
|
|
|
|
|
2022-04-08 11:21:57 +00:00
|
|
|
package bbgo;
|
2022-02-14 08:16:32 +00:00
|
|
|
|
2022-02-18 06:26:48 +00:00
|
|
|
option go_package = "../pb";
|
2022-02-14 08:16:32 +00:00
|
|
|
|
2022-04-08 11:21:57 +00:00
|
|
|
service MarketDataService {
|
|
|
|
rpc Subscribe(SubscribeRequest) returns (stream SubscribeResponse) {}
|
|
|
|
rpc QueryKLines(QueryKLinesRequest) returns (QueryKLinesResponse) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
service UserDataService {
|
|
|
|
// should support streaming
|
|
|
|
rpc SubscribeUserData(Empty) returns (stream SubscribeResponse) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
service TradingService {
|
|
|
|
// request-response
|
|
|
|
rpc SubmitOrder(SubmitOrderRequest) returns (SubmitOrderResponse) {}
|
|
|
|
rpc CancelOrder(CancelOrderRequest) returns (CancelOrderResponse) {}
|
|
|
|
rpc QueryOrder(QueryOrderRequest) returns (QueryOrderResponse) {}
|
|
|
|
rpc QueryOrders(QueryOrdersRequest) returns (QueryOrdersResponse) {}
|
|
|
|
rpc QueryTrades(QueryTradesRequest) returns (QueryTradesResponse) {}
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
2022-03-07 04:06:16 +00:00
|
|
|
enum Event {
|
2022-04-08 11:21:57 +00:00
|
|
|
UNKNOWN = 0;
|
|
|
|
SUBSCRIBED = 1;
|
|
|
|
UNSUBSCRIBED = 2;
|
|
|
|
SNAPSHOT = 3;
|
|
|
|
UPDATE = 4;
|
|
|
|
AUTHENTICATED = 5;
|
|
|
|
ORDER_SNAPSHOT = 6;
|
|
|
|
ORDER_UPDATE = 7;
|
|
|
|
TRADE_SNAPSHOT = 8;
|
|
|
|
TRADE_UPDATE = 9;
|
|
|
|
ACCOUNT_SNAPSHOT = 10;
|
|
|
|
ACCOUNT_UPDATE = 11;
|
|
|
|
ERROR = 99;
|
2022-03-07 04:06:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
enum Channel {
|
2022-04-08 11:21:57 +00:00
|
|
|
BOOK = 0;
|
|
|
|
TRADE = 1;
|
|
|
|
TICKER = 2;
|
|
|
|
USER = 3;
|
2022-03-07 04:06:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
enum Side {
|
2022-04-08 11:21:57 +00:00
|
|
|
BUY = 0;
|
|
|
|
SELL = 1;
|
2022-03-07 04:06:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
enum OrderType {
|
2022-04-08 11:21:57 +00:00
|
|
|
MARKET = 0;
|
|
|
|
LIMIT = 1;
|
|
|
|
STOP_MARKET = 2;
|
|
|
|
STOP_LIMIT = 3;
|
|
|
|
POST_ONLY = 4;
|
|
|
|
IOC_LIMIT = 5;
|
2022-03-07 04:06:16 +00:00
|
|
|
}
|
|
|
|
|
2022-02-23 04:29:01 +00:00
|
|
|
message Empty {}
|
|
|
|
|
2022-02-23 04:41:11 +00:00
|
|
|
message Error {
|
2022-04-08 11:21:57 +00:00
|
|
|
int64 error_code = 1;
|
|
|
|
string error_message = 2;
|
2022-02-23 04:41:11 +00:00
|
|
|
}
|
|
|
|
|
2022-02-19 20:08:52 +00:00
|
|
|
message SubscribeRequest {
|
2022-04-08 11:21:57 +00:00
|
|
|
repeated Subscription subscriptions = 1;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
2022-02-19 20:08:52 +00:00
|
|
|
message Subscription {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
Channel channel = 2; // book, trade, ticker
|
|
|
|
string symbol = 3;
|
|
|
|
int64 depth = 4;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
2022-02-19 20:08:52 +00:00
|
|
|
message SubscribeResponse {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
Channel channel = 3; // book, trade, ticker, user
|
|
|
|
Event event = 4; // snapshot, update, order_snapshot, ...
|
|
|
|
Depth depth = 5;
|
|
|
|
repeated Trade trades = 6;
|
|
|
|
Ticker ticker = 7;
|
|
|
|
repeated Order orders = 8;
|
|
|
|
repeated Balance balances = 9;
|
|
|
|
int64 subscribed_at = 10;
|
|
|
|
Error error = 11;
|
2022-02-23 04:19:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
message Depth {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
repeated PriceVolume asks = 3;
|
|
|
|
repeated PriceVolume bids = 4;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
message PriceVolume {
|
2022-04-08 11:21:57 +00:00
|
|
|
int64 price = 1;
|
|
|
|
int64 volume = 2;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
2022-02-19 20:08:52 +00:00
|
|
|
// https://maicoin.github.io/max-websocket-docs/#/private_channels?id=trade-response
|
|
|
|
// https://maicoin.github.io/max-websocket-docs/#/public_trade?id=success-response
|
|
|
|
message Trade {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
string id = 3;
|
|
|
|
double price = 4;
|
|
|
|
double volume = 5;
|
|
|
|
int64 created_at = 6;
|
|
|
|
Side side = 7;
|
|
|
|
double fee = 8;
|
|
|
|
string fee_currency = 9;
|
|
|
|
bool maker = 10;
|
|
|
|
string trend = 11;
|
2022-02-19 20:08:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// https://maicoin.github.io/max-websocket-docs/#/public_ticker?id=success-response
|
|
|
|
message Ticker {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
double open = 3;
|
|
|
|
double high = 4;
|
|
|
|
double low = 5;
|
|
|
|
double close = 6;
|
|
|
|
double volume = 7;
|
2022-02-19 20:08:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// https://maicoin.github.io/max-websocket-docs/#/private_channels?id=snapshot
|
|
|
|
message Order {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
string id = 3;
|
|
|
|
Side side = 4;
|
|
|
|
OrderType order_type = 5;
|
|
|
|
double price = 6;
|
|
|
|
double stop_price = 7;
|
|
|
|
double avg_price = 8;
|
|
|
|
string status = 9;
|
|
|
|
int64 created_at = 10;
|
|
|
|
double quantity = 11;
|
|
|
|
double executed_volume = 12;
|
|
|
|
int64 trades_count = 13;
|
|
|
|
string client_order_id = 14;
|
|
|
|
int64 group_id = 15;
|
2022-02-19 20:08:52 +00:00
|
|
|
}
|
|
|
|
|
2022-02-21 03:38:43 +00:00
|
|
|
message SubmitOrder {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
Side side = 3;
|
|
|
|
double quantity = 4;
|
|
|
|
double price = 5;
|
|
|
|
double stop_price = 6;
|
|
|
|
OrderType order_type = 7;
|
|
|
|
string client_order_id = 8;
|
|
|
|
int64 group_id = 9;
|
2022-02-21 03:38:43 +00:00
|
|
|
}
|
|
|
|
|
2022-02-19 20:08:52 +00:00
|
|
|
// https://maicoin.github.io/max-websocket-docs/#/private_channels?id=account-response
|
2022-02-14 08:16:32 +00:00
|
|
|
message Balance {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string currency = 2;
|
|
|
|
double available = 3;
|
|
|
|
double locked = 4;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
2022-02-21 03:38:43 +00:00
|
|
|
message SubmitOrderRequest {
|
2022-04-08 11:21:57 +00:00
|
|
|
SubmitOrder submit_order = 1;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
2022-02-21 03:38:43 +00:00
|
|
|
message SubmitOrderResponse {
|
2022-04-08 11:21:57 +00:00
|
|
|
Order order = 1;
|
|
|
|
Error error = 2;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
message CancelOrderRequest {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string id = 2;
|
|
|
|
string client_order_id = 3;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
message CancelOrderResponse {
|
2022-04-08 11:21:57 +00:00
|
|
|
Order order = 1;
|
|
|
|
Error error = 2;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
message QueryOrderRequest {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string id = 2;
|
|
|
|
string client_order_id = 3;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
message QueryOrderResponse {
|
2022-04-08 11:21:57 +00:00
|
|
|
Order order = 1;
|
|
|
|
Error error = 2;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
2022-02-19 20:08:52 +00:00
|
|
|
message QueryOrdersRequest {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
repeated string state = 3;
|
|
|
|
string order_by = 4;
|
|
|
|
int64 group_id = 5;
|
|
|
|
bool pagination = 6;
|
|
|
|
int64 page = 7;
|
|
|
|
int64 limit = 8;
|
|
|
|
int64 offset = 9;
|
2022-02-16 03:41:33 +00:00
|
|
|
}
|
2022-02-14 08:16:32 +00:00
|
|
|
|
2022-02-19 20:08:52 +00:00
|
|
|
message QueryOrdersResponse {
|
2022-04-08 11:21:57 +00:00
|
|
|
repeated Order orders = 1;
|
|
|
|
Error error = 2;
|
2022-02-16 03:41:33 +00:00
|
|
|
}
|
2022-02-14 08:16:32 +00:00
|
|
|
|
|
|
|
message QueryTradesRequest {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
int64 timestamp = 3;
|
|
|
|
int64 from = 4;
|
|
|
|
int64 to = 5;
|
|
|
|
string order_by = 6;
|
|
|
|
bool pagination = 7;
|
|
|
|
int64 page = 8;
|
|
|
|
int64 limit = 9;
|
|
|
|
int64 offset = 10;
|
2022-02-14 08:16:32 +00:00
|
|
|
}
|
|
|
|
|
2022-02-16 03:41:33 +00:00
|
|
|
message QueryTradesResponse {
|
2022-04-08 11:21:57 +00:00
|
|
|
repeated Trade trades = 1;
|
|
|
|
Error error = 2;
|
2022-02-16 03:41:33 +00:00
|
|
|
}
|
2022-02-19 20:41:39 +00:00
|
|
|
|
2022-02-21 03:38:43 +00:00
|
|
|
message QueryKLinesRequest {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
string interval = 3; // time period of K line in minute
|
|
|
|
int64 timestamp = 4;
|
|
|
|
int64 limit = 5;
|
2022-02-19 20:41:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
message QueryKLinesResponse {
|
2022-04-08 11:21:57 +00:00
|
|
|
repeated KLine klines = 1;
|
|
|
|
Error error = 2;
|
2022-02-19 20:41:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
message KLine {
|
2022-04-08 11:21:57 +00:00
|
|
|
string exchange = 1;
|
|
|
|
string symbol = 2;
|
|
|
|
int64 timestamp = 3;
|
|
|
|
double open = 4;
|
|
|
|
double high = 5;
|
|
|
|
double low = 6;
|
|
|
|
double close = 7;
|
|
|
|
double volume = 8;
|
|
|
|
double quote_volume = 9;
|
2022-02-19 20:41:39 +00:00
|
|
|
}
|