forked from shalang/CTPStockProvider
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCTPStockClient.cs
146 lines (123 loc) · 6.51 KB
/
CTPStockClient.cs
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CalmBeltFund.Trading.CTPStock
{
public abstract class CTPStockClient : CTPBaseClient<CTPStockRequestAction,CTPStockResponseType>
{
#region BaseEvents
public event EventHandler<CTPEventArgs<CZQThostFtdcRspUserLoginField>> UserLoginResponse
{
add { AddHandler(CTPStockResponseType.UserLoginResponse, value); }
remove { RemoveHandler(CTPStockResponseType.UserLoginResponse, value); }
}
public event EventHandler<CTPEventArgs> UserLogoutResponse
{
add { AddHandler(CTPStockResponseType.UserLogoutResponse, value); }
remove { RemoveHandler(CTPStockResponseType.UserLogoutResponse, value); }
}
public event EventHandler<CTPEventArgs> FrontConnectedResponse
{
add { AddHandler(CTPStockResponseType.FrontConnectedResponse, value); }
remove { RemoveHandler(CTPStockResponseType.FrontConnectedResponse, value); }
}
public event EventHandler<CTPEventArgs> FrontDisconnectedResponse
{
add { AddHandler(CTPStockResponseType.FrontDisconnectedResponse, value); }
remove { RemoveHandler(CTPStockResponseType.FrontDisconnectedResponse, value); }
}
public event EventHandler<CTPEventArgs> HeartBeatWarningResponse
{
add { AddHandler(CTPStockResponseType.HeartBeatWarningResponse, value); }
remove { RemoveHandler(CTPStockResponseType.HeartBeatWarningResponse, value); }
}
public event EventHandler<CTPEventArgs> ErrorResponse
{
add { AddHandler(CTPStockResponseType.ErrorResponse, value); }
remove { RemoveHandler(CTPStockResponseType.ErrorResponse, value); }
}
#endregion
/*
/// <summary>
/// 初始化接受数据类型
/// </summary>
protected override void InitResponseDataTypeMapping()
{
///客户端认证响应
responseDataTypeMapping.Add(CTPStockResponseType.AuthenticateResponse, typeof(CZQThostFtdcRspAuthenticateField));
///登录请求响应
responseDataTypeMapping.Add(CTPStockResponseType.UserLoginResponse, typeof(CZQThostFtdcRspUserLoginField));
///登出请求响应
responseDataTypeMapping.Add(CTPStockResponseType.UserLogoutResponse, typeof(CZQThostFtdcUserLogoutField));
///用户口令更新请求响应
responseDataTypeMapping.Add(CTPStockResponseType.UserPasswordUpdateResponse, typeof(CZQThostFtdcUserPasswordUpdateField));
///报单录入请求响应
responseDataTypeMapping.Add(CTPStockResponseType.OrderInsertResponse, typeof(CZQThostFtdcInputOrderField));
///报单操作请求响应
responseDataTypeMapping.Add(CTPStockResponseType.OrderActionResponse, typeof(CZQThostFtdcInputOrderActionField));
///查询最大报单数量响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryMaxOrderVolumeResponse, typeof(CZQThostFtdcQueryMaxOrderVolumeField));
///请求查询报单响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryOrderResponse, typeof(CZQThostFtdcOrderField));
///请求查询成交响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryTradeResponse, typeof(CZQThostFtdcTradeField));
///请求查询资金账户响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryTradingAccountResponse, typeof(CZQThostFtdcTradingAccountField));
///请求查询投资者响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryInvestorResponse, typeof(CZQThostFtdcInvestorField));
///请求查询交易编码响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryTradingCodeResponse, typeof(CZQThostFtdcTradingCodeField));
///请求查询合约手续费率响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryInstrumentCommissionRateResponse, typeof(CZQThostFtdcInstrumentCommissionRateField));
///请求查询交易所响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryExchangeResponse, typeof(CZQThostFtdcExchangeField));
///请求查询合约响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryInstrumentResponse, typeof(CZQThostFtdcInstrumentField));
///请求查询行情响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryDepthMarketDataResponse, typeof(CZQThostFtdcDepthMarketDataField));
///请求查询投资者持仓明细响应
responseDataTypeMapping.Add(CTPStockResponseType.QueryInvestorPositionDetailResponse, typeof(CZQThostFtdcInvestorPositionDetailField));
///错误应答
responseDataTypeMapping.Add(CTPStockResponseType.ErrorResponse, typeof(CZQThostFtdcRspInfoField));
///报单通知
responseDataTypeMapping.Add(CTPStockResponseType.ReturnOrderResponse, typeof(CZQThostFtdcOrderField));
///成交通知
responseDataTypeMapping.Add(CTPStockResponseType.ReturnTradeResponse, typeof(CZQThostFtdcTradeField));
///报单录入错误回报
responseDataTypeMapping.Add(CTPStockResponseType.ErrorReturnOrderInsertResponse, typeof(CZQThostFtdcInputOrderField));
///报单操作错误回报
responseDataTypeMapping.Add(CTPStockResponseType.ErrorReturnOrderActionResponse, typeof(CZQThostFtdcOrderActionField));
///合约交易状态通知
responseDataTypeMapping.Add(CTPStockResponseType.ReturnInstrumentStatusResponse, typeof(CZQThostFtdcInstrumentStatusField));
}
*/
#region CTP API Invoke
protected override CTPResponseInfo GetResponseInfo(IntPtr pRspInfo)
{
CTPResponseInfo rsp = new CTPResponseInfo();
CZQThostFtdcRspInfoField rspInfo = PInvokeUtility.GetObjectFromIntPtr<CZQThostFtdcRspInfoField>(pRspInfo);
rsp.ErrorID = rspInfo.ErrorID;
//rsp.Message = PInvokeUtility.GetUnicodeString(rspInfo.ErrorMsg);
rsp.Message = rspInfo.ErrorMsg;
return rsp;
}
protected override unsafe int ProcessRequest(void* hTrader, int type, void* pReqData, int requestID)
{
return CTPWrapper.CTPStockProcessRequest(hTrader, type, pReqData, requestID);
}
protected override int Process(IntPtr handle, int type, int p1, StringBuilder p2)
{
return CTPWrapper.CTPStockProcess(handle, type, p1, p2);
}
#endregion
protected override CTPStockResponseType ConvertToResponseType(int rsp)
{
return (CTPStockResponseType)rsp;
}
protected override int ConvertActionToInt(CTPStockRequestAction action)
{
return (int)action;
}
}
}