Exemple #1
0
    def buy(self,myCompany, buy_qty):
        #It makes Xing API buy some stocks a specific of company
        
        inXAQuery = win32com.client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEvents)
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\CSPAT00600.res")
        
        #real buy codes
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "AcntNo", 0, self.user.account_number)
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "InptPwd", 0, self.user.account_pw)

        #practice buy code
        #inXAQuery.SetFieldData("CSPAT00600InBlock1", "AcntNo", 0, self.user.account_prac_number)
        #inXAQuery.SetFieldData("CSPAT00600InBlock1", "InptPwd", 0, self.user.account_prac_pw)

        #isuNo = myCompany.stockCode
        #if 'A' not in isuNo :
        #    isuNo='A'+isuNo
        
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "IsuNo", 0, myCompany.stockCode)# real
        #inXAQuery.SetFieldData("CSPAT00600InBlock1", "IsuNo", 0, isuNo)#practice
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "OrdQty", 0, buy_qty) #buy_qty만큼
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "OrdPrc", 0, 0)#지정가일 경우 가격을, 시장가일 경우 0을 입력
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "BnsTpCode", 0, '2')#매도 1 매수 2
        inXAQuery.SetFieldData('CSPAT00600InBlock1', 'OrdprcPtnCode', 0, '03')#지정가 00, 시장가 03, 조건부지정가 05, 최유리지정가 06, 최우선지정가 07, 장개시전시간외 61, 시간외종가 81, 시간외단일가 82
        inXAQuery.SetFieldData('CSPAT00600InBlock1', 'MgntrnCode', 0, '000')
        inXAQuery.SetFieldData('CSPAT00600InBlock1', 'LoanDt', 0, '0')
        inXAQuery.SetFieldData('CSPAT00600InBlock1', 'OrdCndiTpCode', 0, '0')
        
        inXAQuery.Request(False)

        while XAQueryEvents.queryState == 0:
            pythoncom.PumpWaitingMessages()

        XAQueryEvents.queryState = 0

            
        #under codes to remember that this is first trade
        if XAQueryEvents.querySuccess  is 40: #under '0' means TR error
            Log.mkLog("TradeAstock","%s  %s  %s units bought"%(myCompany.stockName, myCompany.stockCode, buy_qty))
            if myCompany.stockCode not in self.stockFirstTrDateDict: #This stock trade is first trade
                self.stockFirstTrDateDict[myCompany.stockCode]=int(time.time())
                Log.mkLog("TradeAstock", "%s %s first buy tr"%(myCompany.stockName, myCompany.stockCode))
            else:
                Log.mkLog("TradeAstock", "%s %s already buy tr"%(myCompany.stockName, myCompany.stockCode))
        else:
            Log.mkLog("TradeAstock", "buy TR is failed")

        return XAQueryEvents.querySuccess
Exemple #2
0
    def sell(self, myCompany, sell_qty):
        #It makes Xing API sell some stocks a specific of company
        
        inXAQuery = win32com.client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEvents)
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\CSPAT00600.res")
        
        #real buy codes
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "AcntNo", 0, self.user.account_number)
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "InptPwd", 0, self.user.account_pw)
        
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "IsuNo", 0, myCompany.stockCode)
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "OrdQty", 0, sell_qty) #잔고 수량 전부
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "OrdPrc", 0, 0)#지정가일 경우 가격을, 시장가일 경우 0을 입력
        inXAQuery.SetFieldData("CSPAT00600InBlock1", "BnsTpCode", 0, '1')#매도 1 매수 2
        #지정가 00, 시장가 03, 조건부지정가 05, 최유리지정가 06, 최우선지정가 07, 장개시전시간외 61, 시간외종가 81, 시간외단일가 82
        inXAQuery.SetFieldData('CSPAT00600InBlock1', 'OrdprcPtnCode', 0, '03')
        inXAQuery.SetFieldData('CSPAT00600InBlock1', 'MgntrnCode', 0, '000')
        inXAQuery.SetFieldData('CSPAT00600InBlock1', 'LoanDt', 0, '0')
        inXAQuery.SetFieldData('CSPAT00600InBlock1', 'OrdCndiTpCode', 0, '0')
        
        inXAQuery.Request(False)

        while XAQueryEvents.queryState == 0:
            pythoncom.PumpWaitingMessages()

        XAQueryEvents.queryState = 0

        #under codes to remember that this is first trade
        if XAQueryEvents.querySuccess is 39: #Not 39 is error
            if myCompany.stockCode in self.stockFirstTrDateDict: #This stock trade is over
                print("sell %s:  %s success"%(myCompany.stockName, sell_qty))
                Log.mkLog("TradeAstock","sell %s:  %s success"%(myCompany.stockName, sell_qty))
        else:
            print("sell all : TR is failed")
            Log.mkLog("TradeAstock", "TR is failed")
        return XAQueryEvents.querySuccess
Exemple #3
0
    def getCandiStkInBox(self, nCandidates):
        Log.mkLog("TradeAstock:getCandiStkInBox","Get candidate stocks in box from Xing API")
        #--------------------------------------------------------------------
        # Get some stocks which have a specific scope of price(10000~20000)
        #--------------------------------------------------------------------
        inXAQuery = win32com.client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEvents)
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\t8430.res")
        inXAQuery.SetFieldData('t8430InBlock', 'gubun', 0, 2)#to get stock companies at cosdaq
        inXAQuery.Request(False)

        while XAQueryEvents.queryState == 0:
            pythoncom.PumpWaitingMessages()

        XAQueryEvents.queryState = 0

        # Get Stock list
        stockList = []
        nCount = inXAQuery.GetBlockCount('t8430OutBlock')
        print("All count of cosdaq company ",nCount)
        for i in range(nCount):     
            jnilclose = float(inXAQuery.GetFieldData('t8430OutBlock', 'jnilclose', i))
            
            name = inXAQuery.GetFieldData('t8430OutBlock', 'hname', i)
            shcode = inXAQuery.GetFieldData('t8430OutBlock', 'shcode', i)

            c=Company()
            c.stockCode = shcode #주식번호
            c.stockName = name #주식회사 이름
                
            stockList.append(c)
            del c

        #--------------------------------------------------------------------
        # Distinguish stocks to buy stocks which was going up and down in specific price scope
        #--------------------------------------------------------------------
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\t1305.res")
        newStockList=[]
        days = '10'#to get stock info duing this days variable
        dwmcode = '1'# day: 1, week: 2, month: 3

        print("number of stock to estimate: ", len(stockList))
        totstkList = len(stockList)
        for stock in stockList:
            time.sleep(6)
            curstk = stockList.index(stock)+1
            print("%s / %s======percent: %s"%(curstk, totstkList , int(curstk/totstkList * 100)))
            inXAQuery.SetFieldData('t1305InBlock', 'shcode',0,stock.stockCode)
            inXAQuery.SetFieldData('t1305InBlock', 'dwmcode',0,dwmcode)
            inXAQuery.SetFieldData('t1305InBlock', 'cnt',0,days)#to get stock info duing 'days' days
            inXAQuery.Request(False)

            while XAQueryEvents.queryState == 0:
                pythoncom.PumpWaitingMessages()

            XAQueryEvents.queryState = 0

            nCount = inXAQuery.GetBlockCount('t1305OutBlock1')
            
            #If 'nCount' is smaller than days, pass this 'stock'
            if nCount is not int(days):
                continue

            flag = True
            low_mean = 0
            high_mean = 0

            for i in reversed(range(nCount)):
                low = int(inXAQuery.GetFieldData('t1305OutBlock1', 'low',i))
                high = int(inXAQuery.GetFieldData('t1305OutBlock1', 'high',i))
                low_mean +=low
                high_mean+=high

                box_gap = high-low
                print("value of box_gap:  ",box_gap)
                
                if box_gap <=1500 and box_gap >=1000:
                    continue
                else:
                    flag = False
                    break

            if flag:
                low_mean /= 10
                high_mean /=  10
                newStockList.append(stock)
                Log.mkLog("getCandiStkInBox","name: %s, code: %s, low_mean: %s, high_mean: %s"%(stock.stockName, stock.stockCode, low_mean, high_mean))

        del stockList

        #--------------------------------------------------------------------
        #codes to order candidates list (not yet, 2015-07-25)
        #--------------------------------------------------------------------

        
        print("length of candidates : ", len(newStockList))
        candidates = newStockList[:nCandidates]
        candidatesDict={}

        for stock in candidates: #make list to dict
            candidatesDict[stock.stockCode]=stock
        
        return candidatesDict
Exemple #4
0
    def getCandidateStocks3(self, nCandidates):#R3I Algorithm

        Log.mkLog("TradeAstock:getCandidateStocks3","Get candidate stocks from Xing API")
        #--------------------------------------------------------------------
        # Get some stocks which have a specific scope of price(10000~20000)
        #--------------------------------------------------------------------
        inXAQuery = win32com.client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEvents)
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\t8430.res")
        inXAQuery.SetFieldData('t8430InBlock', 'gubun', 0, 2)#to get stock companies at cosdaq
        inXAQuery.Request(False)

        while XAQueryEvents.queryState == 0:
            pythoncom.PumpWaitingMessages()

        XAQueryEvents.queryState = 0

        # Get Stock list
        stockList = []
        nCount = inXAQuery.GetBlockCount('t8430OutBlock')
        print("All count of cosdaq company ",nCount)
        for i in range(nCount):     
            jnilclose = float(inXAQuery.GetFieldData('t8430OutBlock', 'jnilclose', i))
            # if jnilclose <= 20000 and jnilclose >= 10000 :#get all of cosdaq stock company
            if jnilclose <= 10000 :
                name = inXAQuery.GetFieldData('t8430OutBlock', 'hname', i)
                shcode = inXAQuery.GetFieldData('t8430OutBlock', 'shcode', i)

                c=Company()
                c.stockCode = shcode #주식번호
                c.stockName = name #주식회사 이름
                
                stockList.append(c)
                del c

        #--------------------------------------------------------------------
        # Distinguish stocks to buy stocks which is going up 3days and figure out high price for one month
        #--------------------------------------------------------------------
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\t1305.res")
        newStockList=[]
        nIndex = 0
        days = '30'#to get stock info duing this days variable
        gap = 3
        dwmcode = '1'# day: 1, week: 2, month: 3

        print("number of stock to estimate: ", len(stockList))
        totstkList = len(stockList)
        for stock in stockList:
            time.sleep(6)
            curstk = stockList.index(stock)+1
            print("%s / %s======percent: %s"%(curstk, totstkList , int(curstk/totstkList * 100)))
            inXAQuery.SetFieldData('t1305InBlock', 'shcode',0,stock.stockCode)
            inXAQuery.SetFieldData('t1305InBlock', 'dwmcode',0,dwmcode)
            inXAQuery.SetFieldData('t1305InBlock', 'cnt',0,days)#to get stock info duing 'days' days
            inXAQuery.Request(False)

            while XAQueryEvents.queryState == 0:
                pythoncom.PumpWaitingMessages()

            XAQueryEvents.queryState = 0

            nCount = inXAQuery.GetBlockCount('t1305OutBlock1')
            
            if nCount is not int(days):
                continue

            total_diff = 0.0
            price_month=[]
            flag = True

            for i in reversed(range(nCount)):
                price_month.append(int(inXAQuery.GetFieldData('t1305OutBlock1', 'close',i)))

            stdPrice_month = int(max(price_month)*0.8)

            for i in reversed(range(gap)):
                price = int(inXAQuery.GetFieldData('t1305OutBlock1', 'close',i))
                diff = float(inXAQuery.GetFieldData('t1305OutBlock1', 'diff', i))
                total_diff +=diff
                if price <= stdPrice_month and diff > 0 and diff <= 10:
                    pass
                else:
                    flag = False

            if flag:
                newStockList.append(stock)
                Log.mkLog("TradeAstock:getCandidateStocks","name: %s, code: %s, total_diff: %s"%(stock.stockName, stock.stockCode, total_diff))

        del stockList

        #--------------------------------------------------------------------
        #codes to order candidates list (not yet, 2015-07-25)
        #--------------------------------------------------------------------

        
        print("length of candidates : ", len(newStockList))
        candidates = newStockList[:nCandidates]
        candidatesDict={}

        for stock in candidates: #make list to dict
            candidatesDict[stock.stockCode]=stock
        
        return candidatesDict
Exemple #5
0
    def getCandidateStocks2(self, nCandidates):

        Log.mkLog("TradeAstock:getCandidateStocks2","Get candidate stocks from Xing API")
        #--------------------------------------------------------------------
        # Get some stocks which have a specific scope of price(10000~20000)
        #--------------------------------------------------------------------
        inXAQuery = win32com.client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEvents)
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\t8430.res")
        inXAQuery.SetFieldData('t8430InBlock', 'gubun', 0, 2)#to get stock companies at cosdaq
        inXAQuery.Request(False)

        while XAQueryEvents.queryState == 0:
            pythoncom.PumpWaitingMessages()

        XAQueryEvents.queryState = 0

        # Get Stock list
        stockList = []
        nCount = inXAQuery.GetBlockCount('t8430OutBlock')
        print("All count of cosdaq company ",nCount)
        for i in range(nCount):     
            jnilclose = float(inXAQuery.GetFieldData('t8430OutBlock', 'jnilclose', i))
            if jnilclose <= 20000 and jnilclose >= 10000 :
                name = inXAQuery.GetFieldData('t8430OutBlock', 'hname', i)
                shcode = inXAQuery.GetFieldData('t8430OutBlock', 'shcode', i)

                c=Company()
                c.stockCode = shcode #주식번호
                c.stockName = name #주식회사 이름
                
                stockList.append(c)
                del c

        #--------------------------------------------------------------------
        # Distinguish stocks to buy stocks which is going up during 10 days.
        #--------------------------------------------------------------------
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\t1305.res")
        newStockList=[]
        upLmtdiff = 10.0
        nIndex = 0
        daysKeepGup = '10'#to get stock info duing this days variable
        dwmcode = '1'# day: 1, week: 2, month: 3

        print("number of stock to estimate: ", len(stockList))
        for stock in stockList:
            time.sleep(1)
            inXAQuery.SetFieldData('t1305InBlock', 'shcode',0,stock.stockCode)
            inXAQuery.SetFieldData('t1305InBlock', 'dwmcode',0,dwmcode)
            inXAQuery.SetFieldData('t1305InBlock', 'cnt',0,daysKeepGup)#to get stock info duing 'daysKeepGup' days
            inXAQuery.Request(False)

            while XAQueryEvents.queryState == 0:
                pythoncom.PumpWaitingMessages()

            XAQueryEvents.queryState = 0

            nCount = inXAQuery.GetBlockCount('t1305OutBlock1')
            
            if nCount is not int(daysKeepGup):
                continue

            total_diff = 0.0

            for i in reversed(range(nCount)):
                diff = float(inXAQuery.GetFieldData('t1305OutBlock1', 'diff', i))

                if (i is 1 and diff <= 0) or diff < -20 or diff > 20 : #If down growth is break on the day before or diff value is bigger than 20 or smaller than -20
                    total_diff = -1
                    break
                total_diff += diff

            if total_diff > upLmtdiff:
                newStockList.append(stock)
                Log.mkLog("TradeAstock:getCandidateStocks","name: %s, code: %s, total_diff: %s"%(stock.stockName, stock.stockCode, total_diff))

        del stockList

        #--------------------------------------------------------------------
        #codes to order candidates list (not yet, 2015-07-25)
        #--------------------------------------------------------------------

        
        print("length of candidates : ", len(newStockList))
        candidates = newStockList[:nCandidates]
        candidatesDict={}

        for stock in candidates: #make list to dict
            candidatesDict[stock.stockCode]=stock
        
        return candidatesDict
Exemple #6
0
    def getCandidateStocks(self, nCandidates):
        print("request candidate stocks from Xing")
        #--------------------------------------------------------------------
        # Get some stocks which have a specific scope of price(10000~20000)
        #--------------------------------------------------------------------
        inXAQuery = win32com.client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEvents)
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\t8430.res")
        inXAQuery.SetFieldData('t8430InBlock', 'gubun', 0, 2)#to get stock companies at cosdaq
        inXAQuery.Request(False)

        while XAQueryEvents.queryState == 0:
            pythoncom.PumpWaitingMessages()

        XAQueryEvents.queryState = 0

        # Get Stock list
        stockList = []
        nCount = inXAQuery.GetBlockCount('t8430OutBlock')
        print("All count of cosdaq company ",nCount)
        for i in range(nCount):     
            jnilclose = float(inXAQuery.GetFieldData('t8430OutBlock', 'jnilclose', i))
            if jnilclose <= 20000 and jnilclose >= 10000 :
                name = inXAQuery.GetFieldData('t8430OutBlock', 'hname', i)
                shcode = inXAQuery.GetFieldData('t8430OutBlock', 'shcode', i)

                c=Company()
                c.stockCode = shcode #주식번호
                c.stockName = name #주식회사 이름
                
                stockList.append(c)
                del c

        #--------------------------------------------------------------------
        # Distinguish stocks to buy stocks which is going up during 5 days.
        #--------------------------------------------------------------------
        inXAQuery.LoadFromResFile("C:\\eBEST\\xingAPI\\Res\\t1305.res")
        newStockList=[]
        upLmtdiff = 10.0
        nIndex = 0
        daysKeepGup = '10'#to get stock info duing this days variable
        dwmcode = '1'# day: 1, week: 2, month: 3

        print("number of stock to estimate: ", len(stockList))
        for stock in stockList:
            time.sleep(1)
            inXAQuery.SetFieldData('t1305InBlock', 'shcode',0,stock.stockCode)
            inXAQuery.SetFieldData('t1305InBlock', 'dwmcode',0,dwmcode)
            inXAQuery.SetFieldData('t1305InBlock', 'cnt',0,daysKeepGup)#to get stock info duing 5 days
            inXAQuery.Request(False)

            while XAQueryEvents.queryState == 0:
                pythoncom.PumpWaitingMessages()

            XAQueryEvents.queryState = 0

            nCount = inXAQuery.GetBlockCount('t1305OutBlock1')
            
            diff = 0.0
            pre_openPrc=-1
            pre_closePrc=-1
            flg = True

            if nCount is not int(daysKeepGup):
                continue

            for i in reversed(range(nCount)):
                diff += float(inXAQuery.GetFieldData('t1305OutBlock1', 'diff', i))
                openPrc = float(inXAQuery.GetFieldData('t1305OutBlock1', 'open', i))
                closePrc = float(inXAQuery.GetFieldData('t1305OutBlock1', 'close', i))

                if i <= 5 : 
                    if pre_openPrc == -1 :#This is first loop
                        pre_openPrc = openPrc
                        pre_closePrc = closePrc
                        continue
                    else:
                        if openPrc > pre_openPrc and closePrc > pre_closePrc :
                            pre_openPrc = openPrc
                            pre_closePrc = closePrc
                            continue
                        else:
                            flg = False

            if flg or diff > upLmtdiff:
                print("nCount: ", nCount)
                newStockList.append(stock)
                Log.mkLog("TradeAstock:getCandidateStocks","name: %s, code: %s, diff: %s"%(stock.stockName, stock.stockCode, diff))

        del stockList

        #--------------------------------------------------------------------
        #codes to order candidates list (not yet, 2015-07-25)
        #--------------------------------------------------------------------

        
        print("length of candidates : ", len(newStockList))
        candidates = newStockList[:nCandidates]
        candidatesDict={}

        for stock in candidates: #make list to dict
            candidatesDict[stock.stockCode]=stock
        
        return candidatesDict