161 lines
4.5 KiB
C#
161 lines
4.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace upper_limit_crawler
|
|
{
|
|
public class ULTrader
|
|
{
|
|
CPFORETRADELib.CpForeTdUtil m_Util = new CPFORETRADELib.CpForeTdUtil();
|
|
DSCBO1Lib.CpConclusion m_Conclusion = new DSCBO1Lib.CpConclusion();
|
|
CPTRADELib.CpTd0311 m_Td0311Bid = new CPTRADELib.CpTd0311();
|
|
CPTRADELib.CpTd0311 m_Td0311Ask = new CPTRADELib.CpTd0311();
|
|
|
|
string[] m_astrAccounts = null;
|
|
|
|
public ULTrader()
|
|
{
|
|
m_Util.TradeInit();
|
|
m_astrAccounts = m_Util.AccountNumber;
|
|
|
|
StartConclusion();
|
|
}
|
|
|
|
public string GetAccount()
|
|
{
|
|
return m_astrAccounts[0];
|
|
}
|
|
|
|
void StartConclusion()
|
|
{
|
|
m_Conclusion.Received += Conclusion_Received;
|
|
m_Conclusion.Subscribe();
|
|
}
|
|
|
|
private void Conclusion_Received()
|
|
{
|
|
string strAccount = m_Conclusion.GetHeaderValue(1);
|
|
string strCodeName = m_Conclusion.GetHeaderValue(2);
|
|
long iCount = m_Conclusion.GetHeaderValue(3);
|
|
long iPrice = m_Conclusion.GetHeaderValue(4);
|
|
long iTradeNo = m_Conclusion.GetHeaderValue(5);
|
|
long iTradeNoOrg = m_Conclusion.GetHeaderValue(6);
|
|
string strCode = m_Conclusion.GetHeaderValue(9);
|
|
bool bBuy = (m_Conclusion.GetHeaderValue(12) == "2");
|
|
string strResult = m_Conclusion.GetHeaderValue(14);
|
|
string strTradeType = m_Conclusion.GetHeaderValue(16);
|
|
|
|
|
|
string strLog = string.Format("[{0}:{1}] {2:###,###,###}원 {3:###,###,###}주 (총{4:###,###,###}원) ", strCodeName, strCode, iPrice, iCount, iPrice *iCount);
|
|
|
|
if (strResult == "1") // 체결
|
|
{ strLog += "체결"; }
|
|
else if (strResult == "2") // 확인
|
|
{ strLog += "확인"; }
|
|
else if (strResult == "3") // 거부
|
|
{ strLog += "거부"; }
|
|
else if (strResult == "4") // 접수
|
|
{ strLog += "접수"; }
|
|
|
|
if (strTradeType == "1") // 정상주문
|
|
{ strLog += " (정상주문)"; }
|
|
else if (strTradeType == "2") // 정정주문
|
|
{ strLog += " (정정주문)"; }
|
|
else if (strTradeType == "3") // 취소주문
|
|
{ strLog += " (취소주문)"; }
|
|
|
|
UlUtil.Trace(strLog);
|
|
}
|
|
|
|
//0 - (string)주문종류코드 주문구분
|
|
// 1 매도
|
|
// 2 매수
|
|
//1 - (string)계좌번호
|
|
//2 - (string)상품관리구분코드 계좌구분
|
|
//3 - (string)종목코드
|
|
//4 - (long)주문수량
|
|
//5 - (long)주문단가
|
|
//6 - (string)매매구분
|
|
//7 - (string)주문조건구분코드 매매조건
|
|
//0 없음
|
|
//1 IOC
|
|
//2 FOK
|
|
//8 - (string)주문호가구분코드
|
|
// 1 보통[default]
|
|
// 2 임의
|
|
// 3 시장가
|
|
// 5 조건부지정가
|
|
// 6 희망대량
|
|
// 9 자사주
|
|
// 12 최유리지정가
|
|
// 13 최우선지정가
|
|
// 10 스톡옵션자사주
|
|
// 23 임의시장가
|
|
// 25 임의조건부지정가
|
|
// 51 장중대량
|
|
// 52 장중바스켓
|
|
// 61 개시전종가
|
|
// 62 개시전종가대량
|
|
// 63 개시전시간외바스켓
|
|
// 67 개시전금전신탁자사주
|
|
// 69 개시전대량자기
|
|
// 71 신고대량(전장시가)
|
|
// 72 시간외대량
|
|
// 73 신고대량(종가)
|
|
// 77 금전신탁종가대량
|
|
// 11 금전신탁자사주
|
|
// 80 시간외바스켓
|
|
// 79 시간외대량자기
|
|
|
|
public void Buy(string strCode, int iUnitPrice, int iBidAmount)
|
|
{
|
|
int iCnt = iBidAmount/ iUnitPrice;
|
|
iCnt = 1;
|
|
|
|
m_Td0311Bid.SetInputValue(0, "2");
|
|
m_Td0311Bid.SetInputValue(1, m_astrAccounts[0]);
|
|
m_Td0311Bid.SetInputValue(3, strCode);
|
|
m_Td0311Bid.SetInputValue(4, iCnt); // 수량
|
|
m_Td0311Bid.SetInputValue(5, iUnitPrice); // 단가
|
|
m_Td0311Bid.SetInputValue(7, "0");
|
|
m_Td0311Bid.SetInputValue(8, "03");
|
|
|
|
m_Td0311Bid.BlockRequest();
|
|
}
|
|
|
|
public void Sell(string strCode, int iUnitPrice, int iCnt)
|
|
{
|
|
//long iCnt = (long)Math.Floor(fAskAmount/fCurPrice);
|
|
//iCnt=1;
|
|
|
|
m_Td0311Ask.SetInputValue(0, "1");
|
|
m_Td0311Ask.SetInputValue(1, m_astrAccounts[0]);
|
|
m_Td0311Ask.SetInputValue(3, strCode);
|
|
m_Td0311Ask.SetInputValue(4, iCnt); // 수량
|
|
m_Td0311Ask.SetInputValue(5, iUnitPrice); // 단가
|
|
m_Td0311Ask.SetInputValue(7, "0");
|
|
m_Td0311Ask.SetInputValue(8, "03");
|
|
|
|
m_Td0311Ask.BlockRequest();
|
|
}
|
|
|
|
public void SellCurPrice(string strCode, int iCnt)
|
|
{
|
|
//long iCnt = (long)Math.Floor(fAskAmount/fCurPrice);
|
|
//iCnt=1;
|
|
|
|
m_Td0311Ask.SetInputValue(0, "1");
|
|
m_Td0311Ask.SetInputValue(1, m_astrAccounts[0]);
|
|
m_Td0311Ask.SetInputValue(3, strCode);
|
|
m_Td0311Ask.SetInputValue(4, iCnt); // 수량
|
|
m_Td0311Ask.SetInputValue(5, 0); // 단가
|
|
m_Td0311Ask.SetInputValue(7, "0");
|
|
m_Td0311Ask.SetInputValue(8, "03");
|
|
|
|
m_Td0311Ask.BlockRequest();
|
|
}
|
|
}
|
|
}
|