Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
                    }
                }
            }
        }
Beispiel #3
0
 public static ScreenNumber getClass1Instance()
 {
     if (_multiThread == false)
     {
         if (_screenNumber == null)
         {
             _screenNumber = new ScreenNumber();
         }
     }
     else {
         if (_screenNumber == null)
         {
             lock (_object1)
             {
                 _screenNumber = new ScreenNumber();
             }
         }
     }
     return _screenNumber;
 }
Beispiel #4
0
 public static ScreenNumber getClass1Instance()
 {
     if (_multiThread == false)
     {
         if (_screenNumber == null)
         {
             _screenNumber = new ScreenNumber();
         }
     }
     else
     {
         if (_screenNumber == null)
         {
             lock (_object1)
             {
                 _screenNumber = new ScreenNumber();
             }
         }
     }
     return(_screenNumber);
 }
Beispiel #5
0
        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";
            }
        }
Beispiel #6
0
 private void Stop()
 {
     ScreenNumber.getClass1Instance().DisconnectAllAnyTimeData();
     ScreenNumber.getClass1Instance().DisconnectAllEOSData();
     ScreenNumber.getClass1Instance().DisconnectAllRealTimeData();
 }
Beispiel #7
0
        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);
                    }
                }
            }
        }