이번 포스팅은 C#과 크레온플러스(OPEN AP)I를 이용한 자동 주식거래 시스템 만들기2(매수,매도주문) 입니다.
주식매매를 이용하다 보면 나 대신 자동으로 매매하는 프로그램을 가지고 싶다는 생각이 들 때가 많은데, C#과 대신증권 OPEN API를 이용해서 오직 나를 위해서 내 생각대로 주식을 거래하는 나만의 주식 매매 프로그램을 만들어 보도록 하겠습니다.
1. 개발환경
- 마이크로소프트에서 만든 VISUAL STUDIO 2017 Community Version(무료)
- 대신크레온 OPEN API(무료, 회원가입 필수)
- SQLITE(무료)
크게 위의 3개 프로그램을 이용해서 주식매매 프로그램을 개발하도록 하겠습니다.
2. 기능구현
이번 포스팅에서는 매수,매도 주문을 넣는 기능을 개발해보도록 하겠습니다.
매매를 할 정목코드를 입력하고 매수 예정금액 및 손절가를 입력합니다.
그리고 다음의 소스코드를 입력합니다.
private void autoTrade()
{
long v_callAmt; //매수금액
long v_putAmt; //손절금액
string v_holdQty; //보유수량
while (true) 무한반복
{
//내가 선택한 종목의 현재가를 읽어온다.
stockMst = new DSCBO1Lib.StockMst();
stockMst.SetInputValue(0, txtStockCode.Text);
stockMst.BlockRequest();
v_callAmt = stockMst.GetHeaderValue(17); //매수호가
v_putAmt = stockMst.GetHeaderValue(16); //매도호가
if (!v_buyFlag)//매수주문이 무한정 나가는 것을 막기위함
{
if (v_callAmt <= Convert.ToInt64(txtBuyAMT.Text))//구매예정가보다 매수호가가 낮다면 주문
{
CpTd0311 = new CPTRADELib.CpTd0311();
CpTd0311.SetInputValue(0, "2");//매수
CpTd0311.SetInputValue(1, v_tradeAccountNum);//계좌번호
CpTd0311.SetInputValue(2, "01");
CpTd0311.SetInputValue(3, txtStockCode.Text);//계좌종목
CpTd0311.SetInputValue(4, 1);//매수수량
CpTd0311.SetInputValue(5, Convert.ToInt64(txtBuyAMT.Text));//매수금액
CpTd0311.SetInputValue(7, "0");
CpTd0311.SetInputValue(8, "01");
CpTd0311.BlockRequest();
v_buyFlag = true; //주문을했으니 플래그 상태값을 변경한다.
txtTrade.AppendText("매수합니다.\n");
}
}
//매도호가가 손절가 보다 낮다면 주문
if (v_putAmt <= Convert.ToInt64(txtLossCutAmt.Text))
{
cpTdNew5331B = new CPTRADELib.CpTdNew5331B();
cpTdNew5331B.SetInputValue(0, v_tradeAccountNum);//계좌번호
cpTdNew5331B.SetInputValue(1, "01");//계좌번호
cpTdNew5331B.SetInputValue(2, txtStockCode.Text));//계좌번호
cpTdNew5331B.SetInputValue(3, "1");//계좌번호
cpTdNew5331B.BlockRequest();
if (cpTdNew5331B.GetHeaderValue(0) > 0) //계좌에 잔고가 있는지 확인하고
{ v_holdQty = Convert.ToString(cpTdNew5331B.GetDataValue(12, 0)); //매도가능 수량을 읽어온다.
}
else
{ v_holdQty = "0"; }
//보유수량을 전부 손절가로 매도한다.
if (Convert.ToInt32(v_holdQty) > 0)
{
v_holdQty = Convert.ToString(cpTdNew5331B.GetDataValue(12, 0));
if (Convert.ToInt16(v_holdQty) > 0)
{
CpTd0311 = new CPTRADELib.CpTd0311();
CpTd0311.SetInputValue(0, "1");//매도
CpTd0311.SetInputValue(1, v_tradeAccountNum);//계좌번호
CpTd0311.SetInputValue(2, "01");
CpTd0311.SetInputValue(3, txtStockCode.Text); //종목
CpTd0311.SetInputValue(4, Convert.ToInt16(v_holdQty)); //모도수량
CpTd0311.SetInputValue(5, v_putAmt); //매도가
CpTd0311.SetInputValue(7, "0");
CpTd0311.SetInputValue(8, "01");
CpTd0311.BlockRequest();
txtTrade.AppendText("매도합니다.\n");
}
}
}
txtDateTime.Text = System.DateTime.Now.ToLongTimeString();
Thread.Sleep(5000); //5초간 정지
}
}
'프로그래밍 > 자동 주식거래 시스템 만들기' 카테고리의 다른 글
OPEN API를 이용한 실전주식매매 후기 (6) | 2021.02.08 |
---|---|
C#과 OPEN API를 이용한 자동 주식거래 시스템 만들기1 (2) | 2020.11.14 |
OPEN API를 이용한 시스템트레이딩 후기(2020.08) (0) | 2020.08.22 |
OPEN API를 이용한 자동매매프로그램 운영 첫날 후기. (14) | 2020.07.14 |
주식분석프로그램 개발 3(C#, ORACLE, OPEN API) (0) | 2018.11.09 |
댓글