Skip to content

Commit 6aff234

Browse files
committed
添加持仓查询
1 parent 7c11fb1 commit 6aff234

15 files changed

Lines changed: 123 additions & 122 deletions

File tree

QuantBox.XAPI/ResponeType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public enum ResponeType : byte
1313
OnRtnError,
1414
OnRspQryInstrument,
1515
OnRspQryTradingAccount,
16+
OnRspQryInvestorPosition,
1617
OnRspQrySettlementInfo,
1718
OnRtnOrder,
1819
OnRtnTrade,

QuantBox.XAPI/Struct.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,4 +531,27 @@ public struct TradeField
531531
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
532532
public string TradeID;
533533
}
534+
535+
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
536+
public struct PositionField
537+
{
538+
/// <summary>
539+
/// 合约代码
540+
/// </summary>
541+
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 31)]
542+
public string InstrumentID;
543+
/// <summary>
544+
/// 合约代码
545+
/// </summary>
546+
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 9)]
547+
public string ExchangeID;
548+
/// <summary>
549+
/// 合约代码
550+
/// </summary>
551+
public PositionSide Side;
552+
public double Position;
553+
public double TdPosition;
554+
public double YdPosition;
555+
public HedgeFlagType HedgeFlag;
556+
}
534557
}

QuantBox_CTP_Trade/TraderApi.cpp

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,8 +1134,27 @@ void CTraderApi::ReqQryInvestorPosition(const string& szInstrumentId)
11341134

11351135
void CTraderApi::OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
11361136
{
1137-
//if(m_msgQueue)
1138-
// m_msgQueue->Input_OnRspQryInvestorPosition(this,pInvestorPosition,pRspInfo,nRequestID,bIsLast);
1137+
if (!IsErrorRspInfo(pRspInfo, nRequestID, bIsLast))
1138+
{
1139+
if (pInvestorPosition)
1140+
{
1141+
PositionField field = { 0 };
1142+
1143+
strcpy(field.InstrumentID, pInvestorPosition->InstrumentID);
1144+
1145+
field.Side = TThostFtdcPosiDirectionType_2_PositionSide(pInvestorPosition->PosiDirection);
1146+
field.HedgeFlag = TThostFtdcHedgeFlagType_2_HedgeFlagType(pInvestorPosition->HedgeFlag);
1147+
field.Position = pInvestorPosition->Position;
1148+
field.TdPosition = pInvestorPosition->TodayPosition;
1149+
field.YdPosition = pInvestorPosition->Position - pInvestorPosition->TodayPosition;
1150+
1151+
XRespone(ResponeType::OnRspQryInvestorPosition, m_msgQueue, this, bIsLast, 0, &field, sizeof(PositionField), nullptr, 0, nullptr, 0);
1152+
}
1153+
else
1154+
{
1155+
XRespone(ResponeType::OnRspQryInvestorPosition, m_msgQueue, this, bIsLast, 0, nullptr, 0, nullptr, 0, nullptr, 0);
1156+
}
1157+
}
11391158

11401159
if (bIsLast)
11411160
ReleaseRequestMapBuf(nRequestID);
@@ -1161,11 +1180,7 @@ void CTraderApi::ReqQryInvestorPositionDetail(const string& szInstrumentId)
11611180

11621181
void CTraderApi::OnRspQryInvestorPositionDetail(CThostFtdcInvestorPositionDetailField *pInvestorPositionDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
11631182
{
1164-
//if(m_msgQueue)
1165-
// m_msgQueue->Input_OnRspQryInvestorPositionDetail(this,pInvestorPositionDetail,pRspInfo,nRequestID,bIsLast);
1166-
1167-
if (bIsLast)
1168-
ReleaseRequestMapBuf(nRequestID);
1183+
11691184
}
11701185

11711186
void CTraderApi::ReqQryInstrument(const string& szInstrumentId, const string& szExchange)

QuantBox_CTP_Trade/TypeConvert.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,13 @@ OrderSide TThostFtdcDirectionType_2_OrderSide(TThostFtdcDirectionType In)
8989
return OrderSide::Buy;
9090
}
9191

92+
PositionSide TThostFtdcPosiDirectionType_2_PositionSide(TThostFtdcPosiDirectionType In)
93+
{
94+
if (In == THOST_FTDC_PD_Short)
95+
return PositionSide::Short;
96+
return PositionSide::Long;
97+
}
98+
9299
TThostFtdcOrderPriceTypeType OrderType_2_TThostFtdcOrderPriceTypeType(OrderType In)
93100
{
94101
switch (In)

QuantBox_CTP_Trade/TypeConvert.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ OpenCloseType TThostFtdcOffsetFlagType_2_OpenCloseType(TThostFtdcOffsetFlagType
1515

1616
TThostFtdcDirectionType OrderSide_2_TThostFtdcDirectionType(OrderSide In);
1717
OrderSide TThostFtdcDirectionType_2_OrderSide(TThostFtdcDirectionType In);
18+
PositionSide TThostFtdcPosiDirectionType_2_PositionSide(TThostFtdcPosiDirectionType In);
1819

1920
TThostFtdcOrderPriceTypeType OrderType_2_TThostFtdcOrderPriceTypeType(OrderType In);
2021

QuantBox_Femas_Trade/TraderApi.cpp

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -955,11 +955,32 @@ void CTraderApi::ReqQryInvestorPosition(const string& szInstrumentId)
955955

956956
void CTraderApi::OnRspQryInvestorPosition(CUstpFtdcRspInvestorPositionField *pRspInvestorPosition, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
957957
{
958-
////if(m_msgQueue)
959-
//// m_msgQueue->Input_OnRspQryInvestorPosition(this,pInvestorPosition,pRspInfo,nRequestID,bIsLast);
958+
if (!IsErrorRspInfo(pRspInfo, nRequestID, bIsLast))
959+
{
960+
if (pRspInvestorPosition)
961+
{
962+
PositionField field = { 0 };
963+
964+
strcpy(field.InstrumentID, pRspInvestorPosition->InstrumentID);
965+
strcpy(field.ExchangeID, pRspInvestorPosition->ExchangeID);
960966

961-
//if (bIsLast)
962-
// ReleaseRequestMapBuf(nRequestID);
967+
field.Side = TUstpFtdcDirectionType_2_PositionSide(pRspInvestorPosition->Direction);
968+
field.HedgeFlag = TUstpFtdcHedgeFlagType_2_HedgeFlagType(pRspInvestorPosition->HedgeFlag);
969+
field.Position = pRspInvestorPosition->Position;
970+
// 今仓与昨仓是什么关系,如何计算的?
971+
field.TdPosition = pRspInvestorPosition->Position - pRspInvestorPosition->YdPosition;
972+
field.YdPosition = pRspInvestorPosition->YdPosition;
973+
974+
XRespone(ResponeType::OnRspQryInvestorPosition, m_msgQueue, this, bIsLast, 0, &field, sizeof(PositionField), nullptr, 0, nullptr, 0);
975+
}
976+
else
977+
{
978+
XRespone(ResponeType::OnRspQryInvestorPosition, m_msgQueue, this, bIsLast, 0, nullptr, 0, nullptr, 0, nullptr, 0);
979+
}
980+
}
981+
982+
if (bIsLast)
983+
ReleaseRequestMapBuf(nRequestID);
963984
}
964985

965986
void CTraderApi::ReqQryInstrument(const string& szInstrumentId, const string& szExchange)

QuantBox_Femas_Trade/TypeConvert.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,13 @@ OrderSide TUstpFtdcDirectionType_2_OrderSide(TUstpFtdcDirectionType In)
9393
return OrderSide::Buy;
9494
}
9595

96+
PositionSide TUstpFtdcDirectionType_2_PositionSide(TUstpFtdcDirectionType In)
97+
{
98+
if (In == USTP_FTDC_D_Sell)
99+
return PositionSide::Short;
100+
return PositionSide::Long;
101+
}
102+
96103
TUstpFtdcOrderPriceTypeType OrderType_2_TUstpFtdcOrderPriceTypeType(OrderType In)
97104
{
98105
switch (In)

QuantBox_Femas_Trade/TypeConvert.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ OpenCloseType TUstpFtdcOffsetFlagType_2_OpenCloseType(TUstpFtdcOffsetFlagType In
1515

1616
TUstpFtdcDirectionType OrderSide_2_TUstpFtdcDirectionType(OrderSide In);
1717
OrderSide TUstpFtdcDirectionType_2_OrderSide(TUstpFtdcDirectionType In);
18+
PositionSide TUstpFtdcDirectionType_2_PositionSide(TUstpFtdcDirectionType In);
1819

1920
TUstpFtdcOrderPriceTypeType OrderType_2_TUstpFtdcOrderPriceTypeType(OrderType In);
2021

QuantBox_LTS_Trade/TraderApi.cpp

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -998,35 +998,27 @@ void CTraderApi::ReqQryInvestorPosition(const string& szInstrumentId)
998998

999999
void CTraderApi::OnRspQryInvestorPosition(CSecurityFtdcInvestorPositionField *pInvestorPosition, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
10001000
{
1001-
//if(m_msgQueue)
1002-
// m_msgQueue->Input_OnRspQryInvestorPosition(this,pInvestorPosition,pRspInfo,nRequestID,bIsLast);
1003-
1004-
if (bIsLast)
1005-
ReleaseRequestMapBuf(nRequestID);
1006-
}
1007-
1008-
void CTraderApi::ReqQryInvestorPositionDetail(const string& szInstrumentId)
1009-
{
1010-
if (nullptr == m_pApi)
1011-
return;
1012-
1013-
SRequest* pRequest = MakeRequestBuf(E_QryInvestorPositionDetailField);
1014-
if (nullptr == pRequest)
1015-
return;
1016-
1017-
CSecurityFtdcQryInvestorPositionDetailField& body = pRequest->QryInvestorPositionDetailField;
1001+
if (!IsErrorRspInfo(pRspInfo, nRequestID, bIsLast))
1002+
{
1003+
if (pInvestorPosition)
1004+
{
1005+
PositionField field = { 0 };
10181006

1019-
strncpy(body.BrokerID, m_RspUserLogin.BrokerID,sizeof(TSecurityFtdcBrokerIDType));
1020-
strncpy(body.InvestorID, m_RspUserLogin.UserID,sizeof(TSecurityFtdcInvestorIDType));
1021-
strncpy(body.InstrumentID,szInstrumentId.c_str(),sizeof(TSecurityFtdcInstrumentIDType));
1007+
strcpy(field.InstrumentID, pInvestorPosition->InstrumentID);
10221008

1023-
AddToSendQueue(pRequest);
1024-
}
1009+
field.Side = TSecurityFtdcPosiDirectionType_2_PositionSide(pInvestorPosition->PosiDirection);
1010+
field.HedgeFlag = TSecurityFtdcHedgeFlagType_2_HedgeFlagType(pInvestorPosition->HedgeFlag);
1011+
field.Position = pInvestorPosition->Position;
1012+
field.TdPosition = pInvestorPosition->TodayPosition;
1013+
field.YdPosition = pInvestorPosition->Position - pInvestorPosition->TodayPosition;
10251014

1026-
void CTraderApi::OnRspQryInvestorPositionDetail(CSecurityFtdcInvestorPositionDetailField *pInvestorPositionDetail, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
1027-
{
1028-
//if(m_msgQueue)
1029-
// m_msgQueue->Input_OnRspQryInvestorPositionDetail(this,pInvestorPositionDetail,pRspInfo,nRequestID,bIsLast);
1015+
XRespone(ResponeType::OnRspQryInvestorPosition, m_msgQueue, this, bIsLast, 0, &field, sizeof(PositionField), nullptr, 0, nullptr, 0);
1016+
}
1017+
else
1018+
{
1019+
XRespone(ResponeType::OnRspQryInvestorPosition, m_msgQueue, this, bIsLast, 0, nullptr, 0, nullptr, 0, nullptr, 0);
1020+
}
1021+
}
10301022

10311023
if (bIsLast)
10321024
ReleaseRequestMapBuf(nRequestID);

QuantBox_LTS_Trade/TraderApi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class CTraderApi :
176176

177177
//仓位
178178
virtual void OnRspQryInvestorPosition(CSecurityFtdcInvestorPositionField *pInvestorPosition, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
179-
virtual void OnRspQryInvestorPositionDetail(CSecurityFtdcInvestorPositionDetailField *pInvestorPositionDetail, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
179+
//virtual void OnRspQryInvestorPositionDetail(CSecurityFtdcInvestorPositionDetailField *pInvestorPositionDetail, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
180180
//virtual void OnRspQryInvestorPositionCombineDetail(CSecurityFtdcInvestorPositionCombineDetailField *pInvestorPositionCombineDetail, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
181181

182182
//资金

0 commit comments

Comments
 (0)