160 lines
4.3 KiB
C#
160 lines
4.3 KiB
C#
using CPSYSDIBLib;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace VICrawlerNS
|
|
{
|
|
class CybosHelper
|
|
{
|
|
VICrawler m_Listener = null;
|
|
|
|
CPUTILLib.CpCybos m_CPCybos = new CPUTILLib.CpCybos();
|
|
CPFORETRADELib.CpForeTdUtil m_CPUtil = new CPFORETRADELib.CpForeTdUtil();
|
|
|
|
CpSvr9619S m_9619S = new CpSvr9619S();
|
|
|
|
public CybosHelper(VICrawler Listener)
|
|
{
|
|
m_Listener = Listener;
|
|
}
|
|
|
|
public void InitCybos()
|
|
{
|
|
short iResult = m_CPUtil.TradeInit();
|
|
switch (iResult)
|
|
{
|
|
case -1:
|
|
Util.Log(Util.LOG_TYPE.ERROR, "[TradeInit] 4");
|
|
break;
|
|
|
|
case 0:
|
|
Util.Log(Util.LOG_TYPE.VERVOSE, "[TradeInit] 로그인 되었습니다");
|
|
break;
|
|
|
|
case 1:
|
|
Util.Log(Util.LOG_TYPE.ERROR, "[TradeInit] 업무 키 입력 잘못됨");
|
|
break;
|
|
|
|
case 2:
|
|
Util.Log(Util.LOG_TYPE.ERROR, "[TradeInit] 계좌 비밀번호가 잘못되었습니다");
|
|
break;
|
|
|
|
case 3:
|
|
Util.Log(Util.LOG_TYPE.ERROR, "[TradeInit] 취소되었습니다");
|
|
break;
|
|
}
|
|
|
|
m_Listener.SetAccountList(m_CPUtil.AccountNumber);
|
|
SubscribeVICrawler();
|
|
}
|
|
|
|
public int GetLimitRemainCountTrade()
|
|
{
|
|
return m_CPCybos.GetLimitRemainCount(CPUTILLib.LIMIT_TYPE.LT_TRADE_REQUEST);
|
|
}
|
|
|
|
public int GetLimitRemainCountRQ()
|
|
{
|
|
return m_CPCybos.GetLimitRemainCount(CPUTILLib.LIMIT_TYPE.LT_NONTRADE_REQUEST);
|
|
}
|
|
|
|
public int GetLimitRemainCountSB()
|
|
{
|
|
return m_CPCybos.GetLimitRemainCount(CPUTILLib.LIMIT_TYPE.LT_SUBSCRIBE);
|
|
}
|
|
|
|
public bool IsConnected()
|
|
{
|
|
return (m_CPCybos.IsConnect==1);
|
|
}
|
|
|
|
void SubscribeVICrawler()
|
|
{
|
|
m_9619S.Received += VICrawler_Received;
|
|
m_9619S.Subscribe();
|
|
}
|
|
|
|
private void VICrawler_Received()
|
|
{
|
|
uint uiTime = m_9619S.GetHeaderValue(0);
|
|
sbyte cType = m_9619S.GetHeaderValue(1);
|
|
string strCode = m_9619S.GetHeaderValue(3);
|
|
ushort uiEventCode = m_9619S.GetHeaderValue(4);
|
|
string strDesc = m_9619S.GetHeaderValue(5);
|
|
uint uiEndTime = m_9619S.GetHeaderValue(7);
|
|
sbyte cUpDown = m_9619S.GetHeaderValue(8);
|
|
ushort uiDegree = m_9619S.GetHeaderValue(9);
|
|
|
|
Console.WriteLine(string.Format("{0} | {1} | {2} | {3} | {4} | {5} | {6} | {7} | {8} | {9}",
|
|
m_9619S.GetHeaderValue(0),
|
|
m_9619S.GetHeaderValue(1),
|
|
m_9619S.GetHeaderValue(2),
|
|
m_9619S.GetHeaderValue(3),
|
|
m_9619S.GetHeaderValue(4),
|
|
m_9619S.GetHeaderValue(5),
|
|
m_9619S.GetHeaderValue(6),
|
|
m_9619S.GetHeaderValue(7),
|
|
m_9619S.GetHeaderValue(8),
|
|
m_9619S.GetHeaderValue(9)
|
|
));
|
|
|
|
m_Listener.OnReceivedEvent(uiTime, strCode, uiEventCode, strDesc, cUpDown=='U');
|
|
}
|
|
|
|
int GetCallUnitValue(int iValue)
|
|
{
|
|
int iUnit = 1;
|
|
if(iValue < 1000)
|
|
iUnit = 1;
|
|
else if(iValue < 5000)
|
|
iUnit = 5;
|
|
else if(iValue < 10000)
|
|
iUnit = 10;
|
|
else if(iValue < 50000)
|
|
iUnit = 50;
|
|
else if(iValue < 100000)
|
|
iUnit = 100;
|
|
else if(iValue < 500000)
|
|
iUnit = 500;
|
|
else
|
|
iUnit = 1000;
|
|
|
|
return (iValue/iUnit)*iUnit;
|
|
}
|
|
|
|
public void Buy(CodeList.CODE_VALUE Code, int iBuyPrice)
|
|
{
|
|
try
|
|
{
|
|
DSCBO1Lib.StockMst CPStockMst = new DSCBO1Lib.StockMst();
|
|
CPStockMst.SetInputValue(0, Code.m_strCode);
|
|
CPStockMst.BlockRequest2(0);
|
|
int iCurPrice = CPStockMst.GetHeaderValue(11);
|
|
int iCallValue = GetCallUnitValue((int)(iCurPrice*1.015));
|
|
int iCount = iBuyPrice/iCallValue;
|
|
|
|
CPTRADELib.CpTd0311 CP0311 = new CPTRADELib.CpTd0311();
|
|
CP0311.SetInputValue(0, 2);
|
|
CP0311.SetInputValue(1, Config.GetAccount());
|
|
CP0311.SetInputValue(2, Config.GetSubAccount());
|
|
CP0311.SetInputValue(3, Code.m_strCode);
|
|
CP0311.SetInputValue(4, iCount);
|
|
CP0311.SetInputValue(5, iCallValue);
|
|
CP0311.SetInputValue(7, "01");
|
|
CP0311.SetInputValue(8, "01");
|
|
CP0311.BlockRequest2(1);
|
|
|
|
Util.Log(Util.LOG_TYPE.BUY, string.Format("code:{0} {1}주 현재가 {2}원, 지정가 {3} IOC 매수", Code.ToString(), iCount, iCurPrice, iCallValue));
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
Util.Log(Util.LOG_TYPE.ERROR, ex.Message+Environment.NewLine+ex.StackTrace);
|
|
}
|
|
}
|
|
}
|
|
}
|