Xing t5501 주문
InBlock의 각 필드에 채워야할 데이터입니다.
표대로 데이터를 채워서 하시기 바랍니다.
필드명 |
설명 |
기본값 |
---|---|---|
reccnt |
레코드갯수 |
"00001" |
ordmarketcode |
주문시장코드 |
"40" |
accno |
계좌번호 |
계좌번호 11자리, 남은 뒷자리는 SPACE로 채움 |
passwd |
입력비밀번호 |
남은 자리는 SPACE로 채움 |
expcode |
선물옵션종목번호 |
종목코드 8자리, 선물코드도 8자리를 사용, 남은 자리는 SPACE로 채움 |
memegb |
매매구분 |
1:매도, 2:매수 |
offergb |
선물옵션주문유형코드 |
"00" |
hogagb |
선물옵션호가유형코드 |
00:지정가 03:시장가 05:조건부지정가 06:최유리지정가 10:지정가(IOC) 20:지정가(FOK) |
tradegb |
선물옵션거래유형코드 |
01:차익 02:헤지 03:기타 일반적으로 03 을 사용 |
price |
주문가 |
정수부 10 자리 와 소수부 2자리로 채우고 소수점을 찍는다. 1.52 => "0000000001.52" |
qty |
주문수량 |
오른쪽 정렬로 하고 남는 자리는 0 으로 채운다. 15 => "0000000000000015" |
tongsingb |
통신매체코드 |
GetCommMedia() 로 취득한 값 |
stragb |
전략코드 |
" ", SPACE로 채움 |
groupid |
그룹ID |
" ", SPACE로 채움 |
ordernum |
주문회차 |
"0000000000", 0 으로 채움 |
portnum |
포트폴리오번호 |
"0000000000", 0 으로 채움 |
basketnum |
바스켓번호 |
"0000000000", 0 으로 채움 |
tranchnum |
트렌치번호 |
"0000000000", 0 으로 채움 |
itemnum |
아이템번호 |
"0000000000", 0 으로 채움 |
operordnum |
운용지시번호 |
"000000000000", 0 으로 채움 |
mgempno |
관리사원번호 |
" ", SPACE로 채움 |
fundid |
펀드ID |
" ", SPACE로 채움 |
dummyfundorgordno |
dummy펀드원주문번호 |
"000", 0 으로 채움 |
fundorgordno |
펀드원주문번호 |
"0000000", 0 으로 채움 |
모의서버에서 정상 작동되어 실입금하고 서버에 로그인하여 적용하니 주문이 들어가지 않습니다.
데이터 타입은 이상이 없는 것 같고 Request 의 반환값도 정상입니다만 실제 주문이 들어가지 않습니다.
바쁘시더라도 아래 소스 확인 부탁합니다.
// 선옵복수계좌복수종목정상주문
void CT5009::Request(BOOL bNext, COptItem* optitem, int reccnt1, CString ctsExpcode, CString ctsMedocd)
{
typedef struct
{
t5009InBlock inBlock;
t5009InBlock1 inBlock1[10]; // Max
} t5009AllInBlock, *LPt5009AllInBlock;
t5009AllInBlock AllInBlock;
CString strReccnt1;
strReccnt1.Format("%d", reccnt1);
// t5009InBlock
SetPacketData(AllInBlock.inBlock.reccnt, sizeof(AllInBlock.inBlock.reccnt), "1", DATA_TYPE_LONG);
SetPacketData(AllInBlock.inBlock.tongsingb, sizeof(AllInBlock.inBlock.tongsingb), g_iXingAPI.GetCommMedia(), DATA_TYPE_STRING);
SetPacketData(AllInBlock.inBlock.reccnt1, sizeof(AllInBlock.inBlock.reccnt1), strReccnt1, DATA_TYPE_LONG);
// t5009InBlock1
for (int i=0; i<reccnt1; i++)
{
CString strMmgubun, strPrice, strQty;
strMmgubun.Format("%1s", optitem[i].mmgubun);
strQty.Format("%d", optitem[i].nQty);
double fPrice;
fPrice = atof(optitem[i].price);
if (strcmp(optitem[i].mmgubun, "1") == 0) // 매도
{
if (fPrice > 3.0)
strPrice.Format("%.2f", fPrice - 0.15);
else
strPrice.Format("%.2f", fPrice - 0.10);
}
else // 매수
{
if (fPrice > 2.99)
strPrice.Format("%.2f", fPrice + 0.15);
else
strPrice.Format("%.2f", fPrice + 0.10);
}
// 시장가, 최유리 지정가
if (strcmp(optitem[i].hogagb, "03") == 0) // Check
{
strPrice.Format("%.2f", 0);
}
SetPacketData(AllInBlock.inBlock1[i].accno, sizeof(AllInBlock.inBlock1[i].accno ), account.arAccno[0], DATA_TYPE_STRING);
SetPacketData(AllInBlock.inBlock1[i].passwd, sizeof(AllInBlock.inBlock1[i].passwd ), account.strPassword, DATA_TYPE_STRING);
SetPacketData(AllInBlock.inBlock1[i].expcode, sizeof(AllInBlock.inBlock1[i].expcode ), optitem[i].expcode, DATA_TYPE_STRING);
SetPacketData(AllInBlock.inBlock1[i].mmgubun, sizeof(AllInBlock.inBlock1[i].mmgubun ), strMmgubun, DATA_TYPE_STRING);
SetPacketData(AllInBlock.inBlock1[i].hogagb, sizeof(AllInBlock.inBlock1[i].hogagb ), optitem[i].hogagb, DATA_TYPE_STRING);
SetPacketData(AllInBlock.inBlock1[i].price, sizeof(AllInBlock.inBlock1[i].price ), strPrice, DATA_TYPE_FLOAT_DOT, 2);
SetPacketData(AllInBlock.inBlock1[i].qty, sizeof(AllInBlock.inBlock1[i].qty ), strQty, DATA_TYPE_LONG);
SetPacketData(AllInBlock.inBlock1[i].opjisino, sizeof(AllInBlock.inBlock1[i].opjisino ), "", DATA_TYPE_STRING);
}
TCHAR szTrNo[] = "t5009";
TCHAR szNextKey[] = "";
//-----------------------------------------------------------
// 데이터 전송
int nRqID = g_iXingAPI.Request(
account.wndWork, // 데이터를 받을 윈도우, XM_RECEIVE_DATA 으로 온다.
szTrNo, // TR 번호
&AllInBlock, // AllInBlock 데이터
sizeof(t5009InBlock) + sizeof(t5009InBlock1) * reccnt1, // AllInBlock 데이터 크기
bNext, // 다음조회 여부 : 다음조회일 경우에 세팅한다.
szNextKey, // 다음조회 Key : Header Type이 B 일 경우엔 이전 조회때 받은 Next Key를 넣어준다.
30 // Timeout(초) : 해당 시간(초)동안 데이터가 오지 않으면 Timeout에 발생한다. XM_TIMEOUT_DATA 메시지가 발생한다.
);
if (nRqID < 0)
{
// Error 처리
account.SetOrderStatus(0);
WriteErrorLog("t5009 요청 오류");
}
}
C# 샘플
XAQuery_t5101_buy.SetFieldData "t5101InBlock", "reccnt", 0, "1"
XAQuery_t5101_buy.SetFieldData "t5101InBlock", "tongsingb", 0, XASession_sheet2.GetCommMedia()
XAQuery_t5101_buy.SetFieldData "t5101InBlock", "ordercnt", 0, Cells(27, 20)
XAQuery_t5101_buy.SetFieldData "t5101InBlock", "reccnt1", 0, Cells(27, 20)
For i = 0 To Cells(27, 20) - 1
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "ordergb", i, "0"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "orgordno", i, ""
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "accno", i, txtAcc
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "passwd", i, txtAccPWD
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "memegb", i, "2"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "expcode", i, Cells(5 + i, 16 + gubun)
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "qty", i, Cells(5 + i, 22 + gubun)
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "price", i, Cells(5 + i, 19 + gubun)
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "hogagb", i, "00"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "gongtype", i, "0"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "ghogagb", i, "0"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "ordcondgb", i, "0"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "pgmtype", i, "00"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "operordnum", i, "0"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "sincd ", i, "000"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "loandt ", i, "00000000"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "flowsupgb ", i, "0"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "multiordno", i, "0"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "ordno", i, "00000"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "msgcode", i, "0000"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "msg", i, "0"
XAQuery_t5101_buy.SetFieldData "t5101InBlock1", "proctm", i, "000000000"
Next i
If XAQuery_t5101_buy.Request(False) = False Then
MsgBox "requestBuy Error"
End If
[00147] 처리가 완료되었습니다. 라는 메세지는 받지만
종목코드가 미수신되어서 들어옵니다.
"expcode","qty","price"등은 개별종목 주문시에서는 정상적으로 처리되는 데이터 입니다.
한종목 주문을 반복으로 돌리다가, TR제한 에러 떠서 복수주문으로 TR사용종 줄여보려고 하려는데
막혔습니다. 도와주세요