syntax = "proto3";
package stockbit;
message WebsocketRequest {
string user_id = 1;
WebsocketChannel channel = 2;
string key = 3;
PingRequest ping = 4;
string access_token = 5;
}
message PingRequest {
string message = 1;
}
message WebsocketChannel {
repeated string watchlist = 1;
repeated string order_book = 2;
repeated string running_trade = 3;
bool is_hotlist = 4;
repeated string running_trade_batch = 5;
repeated string liveprice = 6;
repeated string iepiev = 7;
repeated string intraday = 8;
repeated string best_bid_offer = 9;
repeated MarketMoverWebsocketRequest market_mover = 10;
repeated OrderQueueWebsocketRequest order_queue = 11;
repeated string liveprice_v3 = 12;
repeated string order_book_v3 = 13;
repeated string intraday_v3 = 14;
}
message MarketMoverWebsocketRequest {
MoverType mover_type = 1;
repeated FilterStocksType filter_stocks = 2;
}
message OrderQueueWebsocketRequest {
string stock_code = 1;
double price = 2;
BoardType board_type = 3;
ActionType action_type = 4;
}
message OrderbookFeed {
string symbol = 1;
bytes orderbook_data = 2;
int64 sequence = 3;
int32 board = 4;
string timestamp = 5;
int64 flag = 8;
string timestamp_ns = 9;
}
message WebsocketWrapMessage {
oneof event {
RunningTradeBatch running_trade = 8;
LivePrice liveprice = 9;
OrderbookFeed orderbook = 10;
}
}
message LivePrice {
string stock_code = 1;
double lastprice = 2;
double volume = 3;
double high = 4;
double low = 5;
double open = 6;
double frequency = 7;
double frg_buy = 8;
double frg_sell = 9;
double average = 10;
string date = 11;
double close = 12;
double prev = 13;
double value = 14;
Change change = 15;
string order_verb = 16;
int64 quantity = 17;
bool is_index = 18;
int64 sequence_number = 19;
int64 order_book_id = 20;
int64 order_number = 21;
int64 match_number = 22;
BoardType board = 23;
Source source = 24;
SwitchReset switch_reset = 25;
string itch_incoming_time = 26;
}
message LivePrice_v3 {
string stock_code = 1;
DecimalValue lastprice = 2;
DecimalValue volume = 3;
DecimalValue high = 4;
DecimalValue low = 5;
DecimalValue open = 6;
DecimalValue frequency = 7;
DecimalValue frg_buy = 8;
DecimalValue frg_sell = 9;
DecimalValue average = 10;
string date = 11;
DecimalValue close = 12;
DecimalValue prev = 13;
DecimalValue value = 14;
Change change = 15;
string order_verb = 16;
DecimalValue quantity = 17;
bool is_index = 18;
int64 sequence_number = 19;
int64 order_book_id = 20;
int64 order_number = 21;
int64 match_number = 22;
BoardType board = 23;
Source source = 24;
SwitchReset switch_reset = 25;
string itch_incoming_time = 26;
DecimalValue market_cap = 27;
}
message DecimalValue {
int64 units = 1;
sfixed32 nanos = 2;
}
message Orderbook_v3 {
string symbol = 1;
repeated OrderBookData bid = 2;
repeated OrderBookData offer = 3;
OrderBookData total_bid = 4;
OrderBookData total_offer = 5;
Timestamp timestamp = 6;
}
message OrderBookData {
DecimalValue volume = 1;
DecimalValue price = 2;
DecimalValue frequency = 3;
}
message RunningTrade {
Timestamp websocket_time = 1;
string stock = 2;
double price = 3;
double volume = 4;
TradeType action = 5;
bool is_global = 6;
Timestamp time = 7;
Change change = 8;
uint32 trade_number = 9;
MarketBoardType market_board = 10;
double value = 11;
}
message RunningTradeBatch {
repeated RunningTrade trades = 1;
}
message BestBidOfferWS {
string stock_code = 1;
int64 sequence_number = 2;
BestOrder best_bid = 3;
BestOrder best_offer = 4;
string datetime = 5;
}
message BestOrder {
Value price = 1;
Value quantity = 2;
string change_percentage = 3;
}
message Value {
double raw = 1;
string formatted = 2;
}
message OrderQueueWebsocket {
repeated OrderQueueWebsocketData data = 1;
}
message OrderQueueWebsocketData {
string stock_code = 1;
string time = 2;
ActionType action_type = 3;
double price = 4;
OrderStatus status = 5;
double open = 6;
double lot = 7;
BoardType board_type = 8;
ExchangeOrderNumber exchange_order_number = 9;
int64 order_number = 10;
double open_change_quantity = 11;
}
message ExchangeOrderNumber {
int32 number = 1;
int32 board = 2;
int32 original_number = 3;
}
message MarketMoverBatch {
repeated MarketMoverData data = 1;
}
message MarketMoverData {
string stock_code = 1;
double price = 2;
double change = 3;
double volume = 4;
double value = 5;
double frequency = 6;
}
message Watchlist {
repeated WatchlistData data = 1;
}
message WatchlistData {
string stock_code = 1;
double lastprice = 2;
double change = 3;
double change_percent = 4;
double volume = 5;
}
message IEPIEV {
string stock_code = 1;
double iep = 2;
double iev = 3;
double iep_change = 4;
int64 total_buy_lot = 5;
int64 total_sell_lot = 6;
}
message Intraday {
string stock_code = 1;
double price = 2;
double volume = 3;
double value = 4;
double frequency = 5;
int64 timestamp = 6;
}
message Intraday_v3 {
string stock_code = 1;
DecimalValue price = 2;
DecimalValue volume = 3;
DecimalValue value = 4;
DecimalValue frequency = 5;
int64 timestamp = 6;
}
message Orderbook {
string stock_symbol = 1;
repeated OrderbookLevel bid = 2;
repeated OrderbookLevel offer = 3;
Timestamp time = 4;
double open = 5;
double high = 6;
double low = 7;
double previous = 8;
}
message OrderbookLevel {
double price = 1;
double lot = 2;
double volume = 3;
}
message OrderBookHeader {
string stock_symbol = 1;
double open = 2;
double high = 3;
double low = 4;
double previous = 5;
Timestamp time = 6;
}
message Top20 {
repeated Top20Data gainers = 1;
repeated Top20Data losers = 2;
repeated Top20Data active = 3;
}
message Top20Data {
string stock_code = 1;
double price = 2;
double change = 3;
double change_percent = 4;
double volume = 5;
double value = 6;
}
message OrderBookBody {
string stock_symbol = 1;
repeated Bid bid = 2;
repeated Offer offer = 3;
Timestamp time = 4;
}
message Bid {
double price = 1;
double lot = 2;
}
message Offer {
double price = 1;
double lot = 2;
}
message Timestamp {
int64 seconds = 1;
int32 nanos = 2;
}
message PingResponse {
int64 timestamp = 1;
string message = 2;
}
message Error {
string message = 1;
int32 code = 2;
}
enum BoardType {
REGULAR = 0;
NEGOTIATION = 1;
CASH = 2;
ALL = 3;
}
enum ActionType {
ACTION_BUY = 0;
ACTION_SELL = 1;
ACTION_ALL = 2;
}
enum OrderStatus {
OPEN = 0;
FULL_MATCH = 1;
WITHDRAWN = 2;
PARTIAL_MATCH = 3;
AMEND = 4;
ORDER_ALL = 5;
}
enum MoverType {
TOP_GAINER = 0;
TOP_LOSER = 1;
MOST_ACTIVE = 2;
}
enum FilterStocksType {
FILTER_ALL = 0;
FILTER_REGULER = 1;
FILTER_TUNAI = 2;
FILTER_NEGO = 3;
}
enum Source {
SOURCE_REGULER = 0;
SOURCE_TUNAI = 1;
SOURCE_NEGO = 2;
SOURCE_NON_REGULER = 3;
SOURCE_ALL_MARKET = 4;
}
enum SwitchReset {
NO_SWITCH = 0;
SWITCH = 1;
RESET = 2;
}
enum Change {
NO_CHANGE = 0;
UP = 1;
DOWN = 2;
}
enum TradeType {
BUY = 0;
SELL = 1;
}
enum MarketBoardType {
MARKET_REGULER = 0;
MARKET_TUNAI = 1;
MARKET_NEGO = 2;
}