private void SetRealReg(String strCodeList) { FileLog.PrintF("MyStock SetRealReg strCodeList=>" + strCodeList); String strScreenNo = ScreenNumber.getClass1Instance().GetAnyTimeScrNum(); String strFidList = "10"; //현재가만 있으면됨. String strRealType = "0"; //같은 화면에 실시간을 더하는지 유무 0 더하지 않는다(지우고새로) , 1 새로받는다. FileLog.PrintF("SetRealReg strScreenNo=>" + strScreenNo); FileLog.PrintF("SetRealReg strCodeList=>" + strCodeList); FileLog.PrintF("SetRealReg strFidList=>" + strFidList); FileLog.PrintF("SetRealReg strRealType=>" + strRealType); //Class1.getClass1Instance().getAxKHOpenAPIInstance().SetRealReg(strScreenNo, strCodeList, strFidList, strRealType); }
public static void threadJob(OpenApi.Spell.SpellOpt spellOpt) { List <String> stockCodeList = AppLib.getClass1Instance().getStockCodeList(); for (int i = 0; i < stockCodeList.Count; i++) { OpenApi.Spell.SpellOpt tmp = spellOpt.ShallowCopy(); String stockCode = stockCodeList[i]; String sScrNo = ScreenNumber.getClass1Instance().GetEosScrNum(); String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}"; String keyStockCode = String.Format(keyStockCodeLayout , tmp.sRQNAME , tmp.sTrCode , sScrNo ); String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}"; String key = String.Format(keyLayout , tmp.sRQNAME , tmp.sTrCode , sScrNo , stockCode ); tmp.sScreenNo = sScrNo; tmp.stockCode = stockCode; tmp.key = key; tmp.reportGubun = "FILE"; // FileLog.PrintF("threadJob keyStockCode="+ keyStockCode); // FileLog.PrintF("threadJob key=" + key); //String logDate = DateTime.Today.ToString("yyyyMMdd"); if (!(System.IO.File.Exists(Config.GetPath() + tmp.GetZipFileName()) || System.IO.File.Exists(Config.GetBackUpPath() + tmp.GetZipFileName()))) { // FileLog.PrintF("threadJob zipPath=" + zipPath); if (!System.IO.File.Exists(Config.GetPath() + tmp.GetFileName())) { // FileLog.PrintF("threadJob path=" + path); AppLib.getClass1Instance().EnqueueByOrderQueue(tmp); AppLib.getClass1Instance().AddSpellDictionary(key, tmp); AppLib.getClass1Instance().AddStockCodeDictionary(keyStockCode, stockCode); AppLib.getClass1Instance().InCraeteOrderedCodeCount(); } } } }
public static ScreenNumber getClass1Instance() { if (_multiThread == false) { if (_screenNumber == null) { _screenNumber = new ScreenNumber(); } } else { if (_screenNumber == null) { lock (_object1) { _screenNumber = new ScreenNumber(); } } } return _screenNumber; }
public static ScreenNumber getClass1Instance() { if (_multiThread == false) { if (_screenNumber == null) { _screenNumber = new ScreenNumber(); } } else { if (_screenNumber == null) { lock (_object1) { _screenNumber = new ScreenNumber(); } } } return(_screenNumber); }
private void SetRegRealAll() { FileLog.PrintF("SetRegRealAll stockCodeList.count=>" + stockCodeList.Count()); String tmpStrFidList = "10"; String strRealType = "0"; List <String> strCodeList = new List <string>(); int cnt = stockCodeList.Count(); double tmp = cnt / 100f; double tmpCnt = Math.Ceiling(tmp); FileLog.PrintF("SetRegRealAll cnt=>" + cnt); FileLog.PrintF("SetRegRealAll tmp=>" + tmp); FileLog.PrintF("SetRegRealAll tmpCnt=>" + tmpCnt); for (int i = 1; i <= tmpCnt; i++) { int a = (i * 100) - 100; int b = (i * 100); if (b > cnt) { b = cnt % 100 - 1; } else { b = 100; } FileLog.PrintF(String.Format("SetRegRealAll a{0}~갯수{1}", a, b)); List <String> tmpList = stockCodeList.GetRange(a, b); strCodeList.Add(string.Join(";", tmpList)); } foreach (String strCode in strCodeList) { FileLog.PrintF(String.Format("SetRegRealAll strCode=>{0}", strCode)); String tmpStrScreenNo = ScreenNumber.getClass1Instance().GetRealTimeScrNum(); axKHOpenAPI.SetRealReg(tmpStrScreenNo, strCode, tmpStrFidList, strRealType); strRealType = "1"; } }
private void Stop() { ScreenNumber.getClass1Instance().DisconnectAllAnyTimeData(); ScreenNumber.getClass1Instance().DisconnectAllEOSData(); ScreenNumber.getClass1Instance().DisconnectAllRealTimeData(); }
private void autoSale(TB_OPT10085 opt10085_data) { FileLog.PrintF("autoSale loss_status=>" + loss_status + ",loss_rate=>" + loss_rate + ",종목코드=>" + opt10085_data.stock_cd + ",손익율=>" + opt10085_data.profit_loss_rt + ",주문상태=>" + opt10085_data.order_status); //주식체결 정보가 들어와서 주식 현재가가 변동이 있을때 자동 판매로직이 실행됨 /*손절매*/ if (loss_status == true) { if (opt10085_data.profit_loss_rt <= this.loss_rate && opt10085_data.order_status == 1)//주문상태가 1 즉 보여상태이어야한다. { if (MyOrder.getClass1Instance().ExistsOrder(opt10085_data.stock_cd) == false) { //매도주문 int nOrderType = 2;//신규메도 String sCode = opt10085_data.stock_cd; String sScreenNo = ScreenNumber.getClass1Instance().GetAnyTimeScrNum(); int nQty = opt10085_data.possession_qty; int nPrice = 0; //일단 시장가매도하자. String sHogaGb = "03"; //시장가 매도 String sOrgOrderNo = ""; //원주문번호는 공백 FileLog.PrintF("autoSale sScreenNo=>" + sScreenNo); FileLog.PrintF("autoSale accountNumber=>" + accountNumber); FileLog.PrintF("autoSale nOrderType=>" + nOrderType); FileLog.PrintF("autoSale sCode=>" + sCode); FileLog.PrintF("autoSale nQty=>" + nQty); FileLog.PrintF("autoSale nPrice=>" + nPrice); FileLog.PrintF("autoSale sHogaGb=>" + sHogaGb); FileLog.PrintF("autoSale sOrgOrderNo=>" + sOrgOrderNo); //아 이거 1초에 5번 즉 0.2초 제한이 여기도 있다. ㅠㅠ이렇게 바로 보내면 안된다... int ret = AppLib.getClass1Instance().getAxKHOpenAPIInstance().SendOrder("손절매_매도주문", sScreenNo, accountNumber, nOrderType, sCode, nQty, nPrice, sHogaGb, sOrgOrderNo); FileLog.PrintF("MyStock AutoSale ret=>" + ret); //상태가 하나더 있어야겠다 주문접수를 한상태인거는 다시 매도를 시도하면 안되므로 opt10085_data.order_status = 2; dbUpdateOrderStatus(opt10085_data); } } } /*이익실현*/ if (profit_status == true) { if (opt10085_data.profit_loss_rt >= this.profit_rate && opt10085_data.order_status == 1) //주문상태가 1 즉 보여상태이어야한다. { //매도주문 if (MyOrder.getClass1Instance().ExistsOrder(opt10085_data.stock_cd) == false) { int nOrderType = 2;//신규메도 String sCode = opt10085_data.stock_cd; int nQty = opt10085_data.possession_qty; int nPrice = 0; //일단 시장가매도하자. String sHogaGb = "03"; //시장가 매도 String sOrgOrderNo = ""; //원주문번호는 공백 String sScreenNo = ScreenNumber.getClass1Instance().GetAnyTimeScrNum(); FileLog.PrintF("autoSale sScreenNo=>" + sScreenNo); FileLog.PrintF("autoSale accountNumber=>" + accountNumber); FileLog.PrintF("autoSale nOrderType=>" + nOrderType); FileLog.PrintF("autoSale sCode=>" + sCode); FileLog.PrintF("autoSale nQty=>" + nQty); FileLog.PrintF("autoSale nPrice=>" + nPrice); FileLog.PrintF("autoSale sHogaGb=>" + sHogaGb); FileLog.PrintF("autoSale sOrgOrderNo=>" + sOrgOrderNo); int ret = AppLib.getClass1Instance().getAxKHOpenAPIInstance().SendOrder("이익매_매도주문", sScreenNo, accountNumber, nOrderType, sCode, nQty, nPrice, sHogaGb, sOrgOrderNo); FileLog.PrintF("MyStock AutoSale ret=>" + ret); opt10085_data.order_status = 2; dbUpdateOrderStatus(opt10085_data); } } } }