매수, 매도 주문 넣기

Visual C#와 키움API로 매수 또는 매도 주문을 시도해 보겠습니다.

 

매수, 매도 주문 기본 형태

public virtual int SendOrder(string sRQName, string sScreenNo, string sAccNo, int nOrderType, string sCode, int nQty, int nPrice, string sHogaGb, string sOrgOrderNo);
// sRQName : 사용자 구분 요청명, 주문 후, 결과를 받았을 때 (자신만의) 표시
// sScreenNo : 화면 번호[4]
// sAccNo : 계좌 번호[10]
// nOrderType : 주문유형 (1:신규매수, 2:신규매도, 3:매수취소, 4:매도취소, 5:매수정정, 6:매도정정)
// sCode : 주식종목코드
// nQty : 주문 수량
// nPrice : 주문 단가
// sHogaGb : 거래 구분
// sOrgOrderNo : 원 주문번호 (정정시 사용)


/*
 sHogaGb : 거래 구분 상세 내역
sHogaGb – 00:지정가, 03:시장가, 05:조건부지정가, 06:최유리지정가, 07:최우선지정가, 10:지정
가IOC, 13:시장가IOC, 16:최유리IOC, 20:지정가FOK, 23:시장가FOK, 26:최유리FOK, 61:장전시간
외종가, 62:시간외단일가, 81:장후시간외종가
※ 시장가, 최유리지정가, 최우선지정가, 시장가IOC, 최유리IOC, 시장가FOK, 최유리FOK, 장전시
간외, 장후시간외 주문시 주문가격을 입력하지 않습니다. 

*/

 

사용예

삼성전자 매수
private void button1_Click(object sender, EventArgs e)
{
     // 삼성전자(005930) 45000원 1주 지정가  신규 매수 예제
     this.axKHOpenAPI1.SendOrder("삼성전자매수테스트","1234",this.comboBox1.Text,1,"005930",1,45000,"00","");
}

 

삼성전기 매도

private void button2_Click(object sender, EventArgs e)
{
    // 삼성전기(009150) 120,000원 1주 지정가  신규 매도 예제
    this.axKHOpenAPI1.SendOrder("삼성전기 매도 테스트 ", "1245", this.comboBox1.Text, 2, "009150", 1, 120000, "00", "");
}

 

주문에 대한 결과 보기

void axKHOpenAPI1_OnReceiveMsg(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveMsgEvent e)
{
     // api 명령에 대한 결과(응답)
     Trace.WriteLine(string.Format("e.sScrNo: {0}", e.sScrNo));
     Trace.WriteLine(string.Format("e.sRQName: {0}", e.sRQName));
     Trace.WriteLine(string.Format("e.sTrCode: {0}", e.sTrCode));
     Trace.WriteLine(string.Format("e.sMsg: {0}", e.sMsg));

}

 

주요 코드

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OrderTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            this.axKHOpenAPI1.OnEventConnect += axKHOpenAPI1_OnEventConnect;
            this.axKHOpenAPI1.OnReceiveMsg += axKHOpenAPI1_OnReceiveMsg;
        }

        void axKHOpenAPI1_OnReceiveMsg(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveMsgEvent e)
        {
            // api 명령에 대한 결과(응답)
            Trace.WriteLine(string.Format("e.sScrNo: {0}", e.sScrNo));
            Trace.WriteLine(string.Format("e.sRQName: {0}", e.sRQName));
            Trace.WriteLine(string.Format("e.sTrCode: {0}", e.sTrCode));
            Trace.WriteLine(string.Format("e.sMsg: {0}", e.sMsg));

        }

        void axKHOpenAPI1_OnEventConnect(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnEventConnectEvent e)
        {
            if(e.nErrCode ==0)
            {
                comboBox1.Items.AddRange(this.axKHOpenAPI1.GetLoginInfo("ACCNO").Split(';'));
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.axKHOpenAPI1.CommConnect();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 삼성전자(005930) 45,000원 1주 지정가  신규 매수 예제
            this.axKHOpenAPI1.SendOrder("삼성전자매수테스트","1234",this.comboBox1.Text,1,"005930",1,45000,"00","");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // 삼성전기(009150) 120,000원 1주 지정가  신규 매도 예제
            this.axKHOpenAPI1.SendOrder("삼성전기 매도 테스트 ", "1245", this.comboBox1.Text, 2, "009150", 1, 120000, "00", "");

        }
    }
}

 

결과

 

테스트 요일이 토요일이라서  “장이 열리지않는 날입니다”라고 뜹니다.

 

목차