컴퓨팅/프로그래밍

Xing t5501 주문

에어버스 2011. 12. 8. 00:50

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 으로 채움

C++ 샘플

모의서버에서 정상 작동되어 실입금하고 서버에 로그인하여 적용하니 주문이 들어가지 않습니다.

데이터 타입은 이상이 없는 것 같고 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사용종 줄여보려고 하려는데

막혔습니다. 도와주세요