키움API - 일자별실현손익요청
- private void requestProfitInfo()
- {
- fparent.axKHOpenAPI1.SetInputValue("계좌번호", currentAccount);
- fparent.axKHOpenAPI1.SetInputValue("시작일자", DateTime.Now.ToString("yyyyMMdd"));
- fparent.axKHOpenAPI1.SetInputValue("종료일자", DateTime.Now.ToString("yyyyMMdd"));
- int result = fparent.axKHOpenAPI1.CommRqData("일자별실현손익요청", "opt10074", 0, GetScrNum());
- }
"일자별실현손익요청" 으로 호출하여 OnReceiveTrData 에서 callBack 데이터를 받습니다.
아래는 CommRqData 원형입니다.
[CommRqData() 함수]
CommRqData(
BSTR sRQName, // 사용자 구분명
BSTR sTrCode, // 조회하려는 TR이름
long nPrevNext, // 연속조회여부
BSTR sScreenNo // 화면번호
)
조회요청함수이며 빈번하게 조회요청하면 시세과부하 에러값으로 -200이 전달됩니다.
리턴값
0이면 조회요청 정상 나머지는 에러
-200 시세과부하
-201 조회전문작성 에러
OnReceiveTrData 의 조건부분
- else if (e.sRQName == "일자별실현손익요청")
- {
- //string.Format("{0:n0}", row.Value.매수가격);
- /*
- string temp1 = fparent.axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총매입금액").TrimStart('0');
- if (!temp1.Equals(""))
- {
- totalBuyTextView.Text = string.Format("{0:n0}", double.Parse(temp1));
- }
- string temp2 = fparent.axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총평가금액").TrimStart('0');
- if (!temp2.Equals(""))
- {
- totalEstimateTextView.Text = string.Format("{0:n0}", double.Parse(temp2));
- if (double.Parse(temp2) > double.Parse(temp1))
- {
- totalEstimateTextView.ForeColor = Color.Red;
- }
- else
- {
- totalEstimateTextView.ForeColor = Color.Blue;
- }
- }
- string temp3 = fparent.axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총평가손익금액");
- if (!temp3.Equals(""))
- {
- totalProfitTextView.Text = string.Format("{0:n0}", double.Parse(temp3));
- if (double.Parse(temp3) > 0)
- {
- totalProfitTextView.ForeColor = Color.Red;
- }
- else
- {
- totalProfitTextView.ForeColor = Color.Blue;
- }
- }
- string temp4 = fparent.axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총수익률(%)").TrimStart('0');
- if (!temp4.Equals(""))
- {
- totalProfitRateTextView.Text = double.Parse(temp4).ToString();
- if (double.Parse(temp4) > 0)
- {
- totalProfitRateTextView.ForeColor = Color.Red;
- }
- else
- {
- totalProfitRateTextView.ForeColor = Color.Blue;
- }
- }
- */
- string temp = fparent.axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총매수금액").TrimStart('0');
- if (!temp.Equals(""))
- {
- totalBuyTextView.Text = string.Format("{0:n0}", double.Parse(temp));
- }
- temp = fparent.axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "총매도금액").TrimStart('0');
- if (!temp.Equals(""))
- {
- totalEstimateTextView.Text = string.Format("{0:n0}", double.Parse(temp));
- }
- temp = fparent.axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "실현손익").Trim();
- if (string.IsNullOrEmpty(temp) == false)
- {
- Console.WriteLine("실현손익 = " + temp);
- Double 실현손익 = double.Parse(temp);
- totalProfitTextView.Text = string.Format("{0:n0}", 실현손익);
- if (실현손익 > 0)
- {
- totalProfitTextView.ForeColor = Color.Red;
- }
- else if (실현손익 < 0)
- {
- totalProfitTextView.ForeColor = Color.Blue;
- }
- else
- {
- totalProfitTextView.ForeColor = Color.Black;
- }
- }
- temp = fparent.axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "매매수수료").TrimStart('0');
- if (!temp.Equals(""))
- {
- totalProfitRateTextView.Text = string.Format("{0:n0}", double.Parse(temp));
- }
- temp = fparent.axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "매매세금").TrimStart('0');
- if (!temp.Equals(""))
- {
- realProfitTextView.Text = string.Format("{0:n0}", double.Parse(temp));
- }
- }
GetCommData 함수로 각 정보들을 호출합니다.
아래는 GetCommData 함수의 원형입니다.
[GetCommData() 함수]
GetCommData(
BSTR strTrCode, // TR 이름
BSTR strRecordName, // 레코드이름
long nIndex, // TR반복부
BSTR strItemName) // TR에서 얻어오려는 출력항목이름
OnReceiveTRData()이벤트 함수가 호출될때 조회데이터를 얻어오는 함수입니다.
이 함수는 반드시 OnReceiveTRData()이벤트 함수가 호출될때 그 안에서 사용해야 합니다.
------------------------------------------------------------------------------------------------------------------------------------
[OPT10081 : 주식일봉차트조회요청예시]
OnReceiveTrDataKhopenapictrl(...)
{
if(strRQName == _T("주식일봉차트"))
{
int nCnt = OpenAPI.GetRepeatCnt(sTrcode, strRQName);
for (int nIdx = 0; nIdx < nCnt; nIdx++)
{
strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("종목코드")); strData.Trim();
strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("거래량")); strData.Trim();
strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("시가")); strData.Trim();
strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("고가")); strData.Trim();
strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("저가")); strData.Trim();
strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("현재가")); strData.Trim();
}
}
}
------------------------------------------------------------------------------------------------------------------------------------
결과샘플(모의투자입니다.)