프로그래밍/자동 주식거래 시스템 만들기

C#과 크레온플러스(OPEN AP)I를 이용한 자동 주식거래 시스템 만들기2(매수,매도주문)

핫호빵 2020. 11. 25.
반응형

이번 포스팅은 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초간 정지

                

    }

}


이상으로 C#과 크레온플러스(OPEN AP)I를 이용한 자동 주식거래 시스템 만들기2(매수,매도주문)을 마치도록 하겠습니다.




반응형

댓글