-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathTraderSpi.h
155 lines (117 loc) · 5.78 KB
/
TraderSpi.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#pragma once
#include "Defines.h"
#include ".\ThostApi\ThostFtdcTraderApi.h"
#include <time.h>
#include <map>
#include <queue>
#include <wx/string.h>
#include <wx/event.h>
class wxLog;
struct OrderEntity
{
int reqID_;
int orderRef_;
time_t orderStartTime_;
time_t orderDoneTime_;
};
class CTraderSpi : public CThostFtdcTraderSpi
{
public:
explicit CTraderSpi(wxEvtHandler* handler = NULL);
virtual ~CTraderSpi();
void SetInvestorInfo(const char* investor, const char* pwd);
///用户登录请求
void ReqUserLogin(const char*, const char*);
void ReqUserConnect(const char* front, const char* broker);
void ReqQryDepthMarketData();
///投资者结算结果确认
void ReqSettlementInfoConfirm();
///请求查询合约
void ReqQryInstrument();
///请求查询资金账户
void ReqQryTradingAccount();
///请求查询投资者持仓
void ReqQryInvestorPosition();
///报单录入请求
void ReqOrderInsert(const char* instrument, double price,
int director, int offset, int volume);
void ReqOrderInsert(const char* instrument, int director,
int offset, int volume);
void ReqQryInvestorPositionDetail();
///报单操作请求
void ReqOrderAction(const char* instrument, int session, int frontid, const char* orderref);
void ReqQryAccountregister();
void ReqQueryBankAccountMoneyByFuture(const char* bankID, const char* bankPWD, const char* accountPWD);
void ReqTransferByFuture(const char* bankID, const char* bankPWD, const char* accountPWD, double amount, bool f2B);
private:
//当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。
virtual void OnFrontConnected();
///登录请求响应
virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
///投资者结算结果确认响应
virtual void OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
///请求查询合约响应
virtual void OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
//请求查询资金账户响应
virtual void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
///请求查询投资者持仓响应
virtual void OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
///报单录入请求响应
virtual void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
///报单操作请求响应
virtual void OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
///错误应答
virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。
virtual void OnFrontDisconnected(int nReason);
///心跳超时警告。当长时间未收到报文时,该方法被调用。
virtual void OnHeartBeatWarning(int nTimeLapse);
virtual void OnRspQrySettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField* pSettlementInfoConfirm,
CThostFtdcRspInfoField* pRspInfo, int nRequestID, bool bIsLast);
///请求查询投资者结算结果响应
virtual void OnRspQrySettlementInfo(CThostFtdcSettlementInfoField *pSettlementInfo,
CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
virtual void OnRspQryInvestorPositionDetail(CThostFtdcInvestorPositionDetailField* pInvestorPositionDetail,
CThostFtdcRspInfoField* pRspInfo, int nRequestID, bool bIsLast);
virtual void OnRspQryAccountregister(CThostFtdcAccountregisterField* pAccountregister,
CThostFtdcRspInfoField* pRspInfo, int nRequestID, bool bIsLast);
virtual void OnRtnQueryBankBalanceByFuture(CThostFtdcNotifyQueryAccountField* pNotifyQueryAccount);
///报单通知
virtual void OnRtnOrder(CThostFtdcOrderField *pOrder);
///成交通知
virtual void OnRtnTrade(CThostFtdcTradeField *pTrade);
///请求查询行情响应
virtual void OnRspQryDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
CThostFtdcInstrumentField GetInstrumentById(const std::string& id) const;
CThostFtdcInstrumentField GetInstrumentByLabel(const std::string& label) const;
private:
// 是否收到成功的响应
bool IsErrorRspInfo(CThostFtdcRspInfoField *pRspInfo);
// 是否正在交易的报单
bool IsTradingOrder(CThostFtdcOrderField *pOrder);
void DisplayMsg(const wxString& msg, int type = MAIN_WIN_MSG_RUNTIME_LOG);
private:
wxLog* logTarget_;
int reqID_;
int orderRef_; //报单引用
TThostFtdcFrontIDType frontID_; //前置编号
TThostFtdcSessionIDType sessionID_; //会话编号
std::string investor_;
std::string password_;
std::string broker_;
std::string frontAddr_;
std::string tradingDay_;
std::string settlementInfo_;
CThostFtdcTraderApi* pTraderApi_;
// all the following data are accessed from separated thread
// don't access them from GUI thread.
std::map<int, CThostFtdcInvestorPositionDetailField> positionDetailData_;
std::map<std::string, CThostFtdcInstrumentField> instrumentData_;
std::map<std::string, OrderEntity> orderSend_;
std::map<std::string, OrderEntity> orderDelete_;
std::map<std::string, OrderEntity> orderDone_;
std::map<std::string, CThostFtdcInvestorPositionField> positionData_;
std::map<std::string, std::string> instrumentName2ID_;
std::queue<std::string> msgDisplayer_;
wxEvtHandler* winHandler_;
};