用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

887 lines
22 KiB

/*****************************************************************************
* Copyright [2019]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*****************************************************************************/
#ifndef CPPSRC_STARQUANT_COMMON_DATASTRUCT_H_
#define CPPSRC_STARQUANT_COMMON_DATASTRUCT_H_
#include <APIs/Ctp/ThostFtdcUserApiDataType.h>
#include <APIs/Ctp/ThostFtdcUserApiStruct.h>
#include <string>
#include <iostream>
#include <mutex>
#include <memory>
#include <vector>
#include <atomic>
using namespace std;
#if defined(_WIN32) || defined(_WIN64)
#ifdef DLL_EXPORT
#define DLL_EXPORT_IMPORT __declspec(dllexport) // export DLL information
#else
#define DLL_EXPORT_IMPORT __declspec(dllimport) // import DLL information
#endif
#else
#define DLL_EXPORT_IMPORT
#endif
namespace StarQuant {
// macro definations used
#define SERIALIZATION_SEPARATOR '|'
#define RELAY_DESTINATION '@'
#define DESTINATION_ALL "*"
#define DESTINATION_SEPARATOR '.'
#define COMMODITY_SEPARATOR '&'
enum CurrencyType {
USD,
AUD,
CAD,
CHF,
EUR,
GBP,
HKD,
JPY,
MXN,
NZD,
SEK
};
enum SymbolType {
ST_Full = 0,
ST_Ctp = 1
};
const std::string CurrencyTypeString[] = {
"USD",
"AUD",
"CAD",
"CHF",
"EUR",
"GBP",
"HKD",
"JPY",
"MXN",
"NZD",
"SEK"
};
enum OrderType {
OT_Market = 0, // market
OT_MarketOnClose,
OT_Limit = 2, // limit
OT_LimitOnClose,
OT_PeggedToMarket,
OT_Stop = 5, // stop
OT_StopLimit = 6, // stop limit
OT_TrailingStop = 7, // traiing stop
OT_Relative,
OT_VolumeWeightedAveragePrice,
OT_TrailingStopLimit,
OT_Volatility,
OT_None,
OT_Empty,
OT_Default,
OT_Scale,
OT_MarketIfTouched,
OT_LimitIfTouched,
OT_OptExec,
OT_OptAbandon,
OT_Reqquot,
OT_Rspquot,
OT_Swap,
OT_FAK,
OT_FOK,
OT_LPT // local price conditon touched
};
enum OrderStatus {
OS_UNKNOWN = 0, // Unknown
OS_NewBorn = 1, // NewBorn
OS_PendingSubmit = 2,
OS_Submitted = 3, // submitted
OS_Acknowledged = 4, // acknowledged
OS_Queued = 5,
OS_PartiallyFilled = 6, // PartiallyFilled
OS_Filled = 7, // Filled
OS_PendingCancel = 8 ,
OS_PendingModify = 9 ,
OS_Canceled = 10, // Canceled
OS_LeftDelete = 11,
OS_Suspended = 12,
OS_ApiPending = 13,
OS_ApiCancelled = 14,
OS_Fail = 15, // 指令失败
OS_Deleted = 16,
OS_Effect = 17, // 已生效-询价成功
OS_Apply = 18, // 已申请-行权,弃权等申请成功
OS_Error = 19,
OS_Trig = 20,
OS_Exctrig = 21
};
enum OrderFlag { // for CTP,tap offset flag
OF_None = -1,
OF_OpenPosition = 0,
OF_ClosePosition = 1,
OF_CloseToday = 2,
OF_CloseYesterday = 3,
OF_ForceClose = 4,
OF_ForceOff = 5,
OF_LocalForceClose = 6
};
const std::string OrderStatusString[] = {
"Unknown",
"NewBorn",
"PendingSubmit",
"Submitted",
"Acknowledged",
"Queued",
"PartiallyFilled",
"Filled",
"PendingCancel",
"PendingModify",
"Canceled",
"LeftDelete",
"Suspended",
"ApiPending",
"ApiCancelled",
"Fail",
"Deleted",
"Effect",
"Apply",
"Error",
"Trigerrring",
"ExcTriggering",
"None"
};
enum class MSGQ : uint8_t {
NANOMSG = 0, ZMQ, KAFKA, WEBSOCKET
};
enum class MSGQ_PROTOCOL : uint8_t {
PAIR = 0, REQ, REP, PUB, SUB, PUSH, PULL
};
// ------msg type for interprocess communication-----
enum MSG_TYPE : int32_t {
// 10* datatype same as ticktype
// furtures
MSG_TYPE_TICK = 1000,
MSG_TYPE_TICK_L1 = 1001,
MSG_TYPE_TICK_L5 = 1002,
MSG_TYPE_TICK_L10 = 1003,
MSG_TYPE_TICK_L20 = 1004,
MSG_TYPE_BAR = 1010,
MSG_TYPE_BAR_1MIN = 1011,
MSG_TYPE_BAR_5MIN = 1012,
MSG_TYPE_BAR_15MIN = 1013,
MSG_TYPE_BAR_1HOUR = 1014,
MSG_TYPE_BAR_1DAY = 1015,
MSG_TYPE_BAR_1WEEK = 1016,
MSG_TYPE_BAR_1MON = 1017,
// stock
MSG_TYPE_STOCK_TICK = 1020,
MSG_TYPE_STOCK_BAR = 1021,
// others
MSG_TYPE_Trade = 1060,
MSG_TYPE_Bid = 1061,
MSG_TYPE_Ask = 1062,
MSG_TYPE_Full = 1063,
MSG_TYPE_BidPrice = 1064,
MSG_TYPE_BidSize = 1065,
MSG_TYPE_AskPrice = 1066,
MSG_TYPE_AskSize = 1067,
MSG_TYPE_TradePrice = 1068,
MSG_TYPE_TradeSize = 1069,
MSG_TYPE_OpenPrice = 1070,
MSG_TYPE_HighPrice = 1071,
MSG_TYPE_LowPrice = 1072,
MSG_TYPE_ClosePrice = 1073,
MSG_TYPE_Volume = 1074,
MSG_TYPE_OpenInterest = 1075,
MSG_TYPE_Hist = 1076,
// 11* sys control
MSG_TYPE_ENGINE_STATUS = 1101,
MSG_TYPE_ENGINE_START = 1111,
MSG_TYPE_ENGINE_STOP = 1112,
MSG_TYPE_ENGINE_RESET = 1113,
MSG_TYPE_ENGINE_CONNECT = 1120,
MSG_TYPE_ENGINE_DISCONNECT = 1121,
MSG_TYPE_SWITCH_TRADING_DAY = 1141,
// 12* strategy
MSG_TYPE_STRATEGY_STATUS = 1200,
MSG_TYPE_STRATEGY_ADD = 1210,
MSG_TYPE_STRATEGY_INIT = 1211,
MSG_TYPE_STRATEGY_INIT_ALL = 1212,
MSG_TYPE_STRATEGY_START = 1213,
MSG_TYPE_STRATEGY_START_ALL = 1214,
MSG_TYPE_STRATEGY_STOP = 1215,
MSG_TYPE_STRATEGY_STOP_ALL = 1216,
MSG_TYPE_STRATEGY_EDIT = 1220,
MSG_TYPE_STRATEGY_REMOVE = 1221,
MSG_TYPE_STRATEGY_REMOVE_DUPLICATE = 1222,
MSG_TYPE_STRATEGY_RTN_REMOVE = 1223,
MSG_TYPE_STRATEGY_GET_DATA = 1230,
MSG_TYPE_STRATEGY_RTN_DATA = 1231,
MSG_TYPE_STRATEGY_GET_CLASS_NAME = 1232,
MSG_TYPE_STRATEGY_RTN_CLASS_NAME = 1233,
MSG_TYPE_STRATEGY_GET_CLASS_PARAMETERS = 1234,
MSG_TYPE_STRATEGY_RTN_CLASS_PARAMETERS = 1235,
MSG_TYPE_STRATEGY_GET_PARAMETERS = 1234,
MSG_TYPE_STRATEGY_RTN_PARAMETERS = 1235,
// 13* task
MSG_TYPE_TIMER = 1301,
MSG_TYPE_TASK_START = 1310,
MSG_TYPE_TASK_STOP = 1311,
// 20* engine requests
// md request
MSG_TYPE_SUBSCRIBE_MARKET_DATA = 2001,
MSG_TYPE_SUBSCRIBE_L2_MD = 2002,
MSG_TYPE_SUBSCRIBE_INDEX = 2003,
MSG_TYPE_SUBSCRIBE_ORDER_TRADE = 2004,
MSG_TYPE_UNSUBSCRIBE = 2011,
// td request
MSG_TYPE_QRY_COMMODITY = 2021,
MSG_TYPE_QRY_CONTRACT = 2022,
MSG_TYPE_QRY_POS = 2023,
MSG_TYPE_QRY_ACCOUNT = 2024,
MSG_TYPE_QRY_ORDER = 2025,
MSG_TYPE_QRY_TRADE = 2026,
MSG_TYPE_QRY_POSDETAIL = 2027,
MSG_TYPE_ORDER = 2030, // insert order
MSG_TYPE_ORDER_PAPER = 2031,
MSG_TYPE_ORDER_CTP = 2032,
MSG_TYPE_ORDER_CTP_PARKED = 2033,
MSG_TYPE_ORDER_TAP = 2034,
MSG_TYPE_ORDER_XTP = 2035,
MSG_TYPE_ORDER_ACTION = 2040, // cancel order
MSG_TYPE_CANCEL_ORDER = 2041,
MSG_TYPE_CANCEL_ALL = 2042,
MSG_TYPE_ORDER_ACTION_CTP = 2043,
MSG_TYPE_ORDER_ACTION_TAP = 2044,
MSG_TYPE_ORDER_ACTION_XTP = 2045,
// 25* engine callback
// call back
MSG_TYPE_RSP_POS = 2500,
MSG_TYPE_RTN_ORDER = 2510, // order status
MSG_TYPE_RTN_ORDER_CTP = 2511,
MSG_TYPE_RTN_ORDER_TAP = 2512,
MSG_TYPE_RTN_ORDER_XTP = 2513,
MSG_TYPE_RTN_TRADE = 2520,
MSG_TYPE_RTN_TRADE_CTP = 2521,
MSG_TYPE_RTN_TRADE_TAP = 2522,
MSG_TYPE_RTN_TRADE_XTP = 2523,
MSG_TYPE_RSP_ACCOUNT = 2530,
MSG_TYPE_RSP_CONTRACT = 2540,
MSG_TYPE_RSP_COMMODITY = 2541,
// 31*: info class msg, mainly about sys
MSG_TYPE_INFO = 3100,
MSG_TYPE_INFO_ENGINE_MDCONNECTED = 3101,
MSG_TYPE_INFO_ENGINE_MDDISCONNECTED = 3102,
MSG_TYPE_INFO_ENGINE_TDCONNECTED = 3103,
MSG_TYPE_INFO_ENGINE_TDDISCONNECTED = 3104,
MSG_TYPE_INFO_HEARTBEAT_WARNING = 3105,
MSG_TYPE_INFO_ENGINE_STATUS = 3106,
// 34*:error class msg
MSG_TYPE_ERROR = 3400,
MSG_TYPE_ERROR_ENGINENOTCONNECTED = 3401,
MSG_TYPE_ERROR_SUBSCRIBE = 3402,
MSG_TYPE_ERROR_INSERTORDER = 3403,
MSG_TYPE_ERROR_CANCELORDER = 3404,
MSG_TYPE_ERROR_ORGANORDER = 3405, // order is not tracted by order manager
MSG_TYPE_ERROR_QRY_ACC = 3406,
MSG_TYPE_ERROR_QRY_POS = 3407,
MSG_TYPE_ERROR_QRY_CONTRACT = 3408,
MSG_TYPE_ERROR_CONNECT = 3409, // login fail
MSG_TYPE_ERROR_DISCONNECT = 3410,
MSG_TYPE_ERROR_NOACCOUNT = 3411,
// 40*: test class msg
MSG_TYPE_TEST = 4000,
// 9* base/header
MSG_TYPE_BASE = 9
};
MSG_TYPE MsgType(const string& str);
string accAddress(const string& str);
enum class RUN_MODE :uint8_t {
TRADE_MODE = 0, RECORD_MODE, REPLAY_MODE
};
enum class BROKERS : uint8_t {
IB = 0, CTP, GOOGLE, SINA, PAPER, TAP
};
struct Gateway{
string id;
string api;
int32_t intid;
string brokerid;
string userid;
string password;
string auth_code;
string productinfo;
vector<std::string> md_address;
vector<std::string> td_address;
string appid;
string publicstream;
string privatestream;
};
// reserved for furture use
class BaseData{
public:
virtual string serialize() {return string();}
virtual void deserialize(const string& msgin) {}
};
// reserved for furture use
class MsgFrame{
public:
string destination_;
string source_;
MSG_TYPE msgtype_;
std::shared_ptr<BaseData> dataPtr;
MsgFrame() {}
MsgFrame(string des, string sour, MSG_TYPE mt_) {
destination_ = des;
source_ = sour;
msgtype_ = mt_;
}
virtual ~MsgFrame() {}
string serialize();
void deserialize(const string& msgin);
};
class MsgHeader{
public:
string destination_;
string source_;
MSG_TYPE msgtype_;
MsgHeader() {}
MsgHeader(string des, string sour, MSG_TYPE mt_) {
destination_ = des;
source_ = sour;
msgtype_ = mt_;
}
virtual ~MsgHeader() {}
virtual string serialize() {
string tmp = destination_
+ SERIALIZATION_SEPARATOR + source_
+ SERIALIZATION_SEPARATOR + to_string(msgtype_);
return tmp;
}
virtual void deserialize(const string& msgin) {}
};
class DLL_EXPORT_IMPORT Tick{
public:
Tick() { }
~Tick() { }
string fullSymbol_;
string time_;
double price_ = 0.0;
int32_t size_ = 0;
int32_t depth_ = 1;
double bidPrice_[20] = {0.0};
int32_t bidSize_[20] = {0};
double askPrice_[20] = {0.0};
int32_t askSize_[20]= {0};
int32_t openInterest_ = 0;
double open_ = 0.0;
double high_ = 0.0;
double low_ = 0.0;
double preClose_ = 0.0;
double upperLimitPrice_ = 0.0;
double lowerLimitPrice_ = 0.0;
};
class DLL_EXPORT_IMPORT TickMsg: public MsgHeader{
public:
TickMsg():MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_TICK_L1;
}
~TickMsg() {}
Tick data_;
virtual string serialize();
// virtual void deserialize(const string& msgin);
};
class DLL_EXPORT_IMPORT Security{
public:
Security() {}
~Security() {}
string fullSymbol_;
string symbol_;
char securityType_;
string exchange_;
string contractNo_;
int32_t multiplier_ = 0;
string localName_; // Unicode; e.g., in Chinese or French
string currency_;
double ticksize_ = 0.0;
double longMarginRatio_ = 0.0;
double shortMarginRatio_ = 0.0;
char postype_ = '2';
// Options
string underlyingSymbol_;
char optionType_;
double strikePrice_ = 0.0;
char strikeMode_;
char strikeType_;
char applyType_;
string expiryDate_;
};
class DLL_EXPORT_IMPORT SecurityMsg: public MsgHeader{
public:
SecurityMsg() :MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_RSP_CONTRACT;
}
~SecurityMsg() {}
Security data_;
virtual string serialize();
// virtual void deserialize(const string& msgin);
};
class AccountInfo {
public:
AccountInfo() {}
~AccountInfo() {}
string accountID_;
string accountType_; // INDIVIDUAL
double availableFunds_ = 0.0;
double netLiquidation_ = 0.0;
double equityWithLoanValue_ = 0.0;
double previousDayEquityWithLoanValue_ = 0.0;
double fullInitialMargin_ = 0.0;
double fullMaintainanceMargin_ = 0.0;
double commission_ = 0.0;
double buyingPower_ = 0.0;
double cashBalance_ = 0.0;
double realizedPnL_ = 0.0;
double unrealizedPnL_ = 0.0;
double frozen_ = 0.0;
double balance_ = 0.0;
};
class DLL_EXPORT_IMPORT AccMsg: public MsgHeader{
public:
AccMsg() :MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_RSP_ACCOUNT;
}
~AccMsg() {}
AccountInfo data_;
virtual string serialize();
// virtual void deserialize(const string& msgin);
};
class DLL_EXPORT_IMPORT Fill {
public:
Fill() { }
~Fill() {}
int64_t serverOrderID_ = -1; // local server id
int64_t clientOrderID_ = -1;
int64_t brokerOrderID_ = -1;
int64_t tradeId_ = -1; // local id
int32_t clientID_ = 0; // sid, get from client; 0=mannual
string orderNo_; // exchange id
string localNo_;
string tradeNo_; // exchange id
string tradeTime_;
string fullSymbol_;
string account_;
OrderFlag fillFlag_ = OrderFlag::OF_OpenPosition;
string api_; // IB, ctp etc
string currency_;
double tradePrice_ = 0.0;
int32_t tradeSize_ = 0; // < 0 = short, order size != trade size
double commission_ = 0.0;
};
class DLL_EXPORT_IMPORT FillMsg: public MsgHeader{
public:
FillMsg(): MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_RTN_TRADE;
}
~FillMsg() {}
Fill data_;
virtual string serialize();
// virtual void deserialize(const string& msgin);
};
extern int64_t m_serverOrderId; // unique order id on server side defined in ordermanager.cpp.
extern std::mutex oid_mtx; // mutex for increasing order id
extern std::mutex orderStatus_mtx; // mutex for changing order status
class DLL_EXPORT_IMPORT Order {
public:
Order() { }
~Order() {}
// request msg header
string api_; // ctp, tap etc
string account_; // account
int32_t clientID_ = 0; // client id, get from client; 0=mannual
int64_t clientOrderID_ = -1; // clientside id
string tag_; // reseverd for other use
// server and callback content, for return orderstatus msg
// unique symbol for underlying commodity: exchange + type + commodityname + commodityno
string fullSymbol_;
double price_ = 0.0;
int32_t quantity_ = 0; // total original
int32_t tradedvol_ = 0;
OrderFlag flag_ = OrderFlag::OF_OpenPosition;
int64_t serverOrderID_ = -1; // orderref, unique sqserver id
int64_t brokerOrderID_ = -1; // for statistical use
string orderNo_; // unique exchange order id,for ctp = exchangeID_+ orsysid
string localNo_; // unique local id ,frontid +sessionid +orderref
string createTime_;
string updateTime_;
OrderStatus orderStatus_ = OrderStatus::OS_UNKNOWN;
OrderType orderType_ = OrderType::OT_Default;
};
bool isActiveOrder(const Order& o);
bool isActiveOS(const OrderStatus& os);
class DLL_EXPORT_IMPORT PaperOrder: public Order{
public:
PaperOrder() {}
~PaperOrder() {}
OrderFlag orderFlag_ = OrderFlag::OF_OpenPosition;
int32_t orderSize_ = 0;
string fillNo_; // < 0 = short, order size != trade size
int32_t filledSize_ = 0;
double lastFilledPrice_ = 0.0;
double avgFilledPrice_ = 0.0;
double limitPrice_ = 0.0;
double stopPrice_ = 0.0;
double trailPrice_ = 0.0;
double trailingPercent_ = 0.0;
string timeInForce_;
bool outsideRegularTradingHour_ = false;
bool hidden_ = false;
bool allOrNone_ = false;
};
class DLL_EXPORT_IMPORT CtpOrder: public Order{
public:
CtpOrder() {}
~CtpOrder() {}
// request msg data
struct CThostFtdcInputOrderField orderField_;
};
class DLL_EXPORT_IMPORT CtpParkedOrder: public Order{
public:
CtpParkedOrder() {}
~CtpParkedOrder() {}
// request msg data
struct CThostFtdcParkedOrderField parkedOrderField_;
};
class DLL_EXPORT_IMPORT OrderMsg: public MsgHeader{
public:
OrderMsg(): MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_ORDER;
}
~OrderMsg() {}
Order data_;
virtual void deserialize(const string& msgin);
std::shared_ptr<Order> toPOrder();
};
class DLL_EXPORT_IMPORT PaperOrderMsg: public MsgHeader{
public:
PaperOrderMsg(): MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_ORDER_PAPER;
}
~PaperOrderMsg() {}
PaperOrder data_;
virtual void deserialize(const string& msgin);
std::shared_ptr<Order> toPOrder();
};
class DLL_EXPORT_IMPORT CtpOrderMsg: public MsgHeader{
public:
CtpOrderMsg(): MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_ORDER_CTP;
}
~CtpOrderMsg() {}
CtpOrder data_;
virtual void deserialize(const string& msgin);
std::shared_ptr<Order> toPOrder();
};
class DLL_EXPORT_IMPORT CtpParkedOrderMsg: public MsgHeader{
public:
CtpParkedOrderMsg(): MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_ORDER_CTP;
}
~CtpParkedOrderMsg() {}
CtpParkedOrder data_;
virtual void deserialize(const string& msgin);
std::shared_ptr<Order> toPOrder();
};
class DLL_EXPORT_IMPORT OrderStatusMsg: public MsgHeader{
public:
OrderStatusMsg(string des, string src):
MsgHeader(des, src, MSG_TYPE::MSG_TYPE_RTN_ORDER), data_() {
}
~OrderStatusMsg() {}
Order data_;
void set(std::shared_ptr<Order> po);
virtual string serialize();
};
class DLL_EXPORT_IMPORT Position {
public:
Position() {}
~Position() {}
string key_ = "";
string account_ = "";
string api_ = "";
string fullSymbol_ = "";
double avgPrice_ = 0;
int32_t size_ = 0;
int32_t preSize_ = 0;
int32_t freezedSize_ = 0;
double openpl_ = 0; // unrealized pnl
double closedpl_ = 0; // realized pnl
char type_ ='1'; // direction
string posNo_ = "";
};
class DLL_EXPORT_IMPORT PosMsg: public MsgHeader{
public:
PosMsg(string des, string src):
MsgHeader(des, src, MSG_TYPE_RSP_POS), data_() {}
~PosMsg() {}
Position data_;
virtual string serialize();
// virtual void deserialize(const string& msgin);
void set(std::shared_ptr<Position>);
};
class DLL_EXPORT_IMPORT PositionDetail {
public:
PositionDetail() {}
~PositionDetail() {}
string key_ = "";
string account_ = "";
string api_ = "";
string fullSymbol_ = "";
double avgPrice_ = 0;
int32_t size_ = 0;
int32_t preSize_ = 0;
int32_t freezedSize_ = 0;
double openpl_ = 0; // unrealized pnl
double closedpl_ = 0; // realized pnl
char type_ ='1'; // direction
string posNo_ = "";
string openapi_ = "";
string openOrderNo_ = "";
int32_t openClientID_ = -1;
string closeapi_ = "";
string closeOrderNo_ = "";
int32_t closeClientID_ = -1;
};
class DLL_EXPORT_IMPORT PosDetailMsg: public MsgHeader{
public:
PosDetailMsg(string des, string src):
MsgHeader(des, src, MSG_TYPE_RSP_POS), data_() {}
~PosDetailMsg() {}
PositionDetail data_;
virtual string serialize() {return string();}
// virtual void deserialize(const string& msgin);
void set(std::shared_ptr<PositionDetail>) {}
};
class OrderAction {
public:
OrderAction() {}
~OrderAction() {}
int32_t clientID_ = 0;
int64_t serverOrderID_ = -1;
int64_t clientOrderID_ = -1;
string orderNo_;
};
class DLL_EXPORT_IMPORT OrderActionMsg: public MsgHeader{
public:
OrderActionMsg():MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_ORDER_ACTION;
}
OrderActionMsg(string des, string src):
MsgHeader(des, src, MSG_TYPE_ORDER_ACTION), data_() {}
~OrderActionMsg() {}
OrderAction data_;
// virtual string serialize();
virtual void deserialize(const string& msgin);
};
class DLL_EXPORT_IMPORT SubscribeMsg: public MsgHeader{
public:
SubscribeMsg(string des, string src):
MsgHeader(des, src, MSG_TYPE_SUBSCRIBE_MARKET_DATA), data_() {}
SubscribeMsg():MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_SUBSCRIBE_MARKET_DATA;
}
~SubscribeMsg() {}
SymbolType symtype_;
vector<string> data_;
// virtual string serialize();
virtual void deserialize(const string& msgin);
};
class DLL_EXPORT_IMPORT UnSubscribeMsg: public MsgHeader{
public:
UnSubscribeMsg(string des, string src):
MsgHeader(des, src, MSG_TYPE_UNSUBSCRIBE), data_() {}
UnSubscribeMsg():MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_UNSUBSCRIBE;
}
~UnSubscribeMsg() {}
SymbolType symtype_;
vector<string> data_;
// virtual string serialize();
virtual void deserialize(const string& msgin);
};
class DLL_EXPORT_IMPORT QryContractMsg: public MsgHeader{
public:
QryContractMsg(string des, string src):
MsgHeader(des, src, MSG_TYPE_QRY_CONTRACT), data_() {}
QryContractMsg():MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_QRY_CONTRACT;
}
~QryContractMsg() {}
SymbolType symtype_;
string data_;
// virtual string serialize();
virtual void deserialize(const string& msgin);
};
class DLL_EXPORT_IMPORT CancelAllMsg: public MsgHeader{
public:
CancelAllMsg(string des, string src):
MsgHeader(des, src, MSG_TYPE_CANCEL_ALL), data_() {}
CancelAllMsg():MsgHeader(), data_() {
msgtype_ = MSG_TYPE::MSG_TYPE_CANCEL_ALL;
}
~CancelAllMsg() {}
SymbolType symtype_;
string data_;
// virtual string serialize();
virtual void deserialize(const string& msgin);
};
class DLL_EXPORT_IMPORT ErrorMsg: public MsgHeader{
public:
ErrorMsg(string des, string src, MSG_TYPE mt, string em) :
MsgHeader(des, src, mt), data_(em) {}
~ErrorMsg() {}
string data_;
virtual string serialize();
// virtual void deserialize(const string& msgin);
};
class DLL_EXPORT_IMPORT InfoMsg: public MsgHeader{
public:
InfoMsg(string des, string src, MSG_TYPE mt, string em):
MsgHeader(des, src, mt), data_(em) {}
~InfoMsg() {}
string data_;
virtual string serialize();
// virtual void deserialize(const string& msgin);
};
} // namespace StarQuant
#endif // CPPSRC_STARQUANT_COMMON_DATASTRUCT_H_