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
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
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
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
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
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