def getTSdate(sdate, edate): '''获取天软日期''' d3 = ts.RemoteCallFunc('MarketTradeDayQk', [sdate, edate], {}) if d3[0] == 0: return d3[1] else: print(d3[2])
def CallTSFunc(FuncName, FuncParam=[], SysParam={}, outtype='list'): data = tp.RemoteCallFunc(FuncName, FuncParam, SysParam) a = tsbytestostr(data[1]) if outtype == 'list': return a elif outtype == 'df': df = pd.DataFrame(a) return df
def getTSdata(sdate, stockID, cy): '''通过天软获取高频数据,只提取某一日的数据''' d2 = ts.RemoteCallFunc('MyGetTimeSeries', [sdate, sdate, stockID, cy], {}) if d2[0] == 0: return d2[1] else: print(d2[2])
def getTSdata_day(sdate, edate, stockID, cy): '''通过天软获取日线''' d2 = ts.RemoteCallFunc('MyGetTimeSeries', [sdate, edate, stockID, cy], {}) if d2[0] == 0: return d2[1] else: print(d2[2])
def autoOrderZT(): now = datetime.datetime.now() #print(now) hour = int(now.strftime("%H%M")) if hour > 1500 or hour < 930: print('autoOrder not running time :' + str(hour)) return dayOfWeek = int(now.strftime("%w")) if dayOfWeek == 0 or dayOfWeek == 6: print('autoOrder not running day :' + str(dayOfWeek)) return date = now.strftime("%Y-%m-%d") stockInfo = TSLPy3.RemoteCallFunc("base_data_sheet", [20], {}) data = stockInfo[1] dataLen = len(data) - 3 orderLogNewList = [] url = "http://47.100.100.244:3000/stock/publish?message=" message = "" for i in range(3, dataLen): try: #print(data[i][3].decode('gbk')) stock = data[i][3].decode('gbk').split(',') if stock[1].find('ST') != -1: continue orderLog = OrderLog.objects.filter(datetime__contains=date, stockId=stock[2]) if orderLog: continue if message == '': message = "b," + stock[2][2:] + ',' + stock[3] + ',100' else: message = message + ";b," + stock[2][2:] + ',' + stock[ 3] + ',100' orderLogNew = OrderLog(datetime=datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S.%f"), stockId=stock[2], stockName=stock[1], orderPrice=float(stock[3]), orderQuantity=100, request="b," + stock[2][2:] + ',' + stock[3] + ',100') orderLogNewList.append(orderLogNew) except KeyError: break print(url + message) if message != '': req = Request(url + message) response = urlopen(req) responseData = response.read().decode('utf-8') if responseData.find("发布消息成功") != -1: orderLogNewList[0].response = responseData OrderLog.objects.bulk_create(orderLogNewList) insertTaskLog(now.strftime("%Y-%m-%d %H:%M:%S.%f"), datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), 'autoOrder', 'success', '', 0)
def getIncreasePercentageFromTY(stockId): returnData = TSLPy3.RemoteCallFunc("stock_realtime_data", [stockId], {}) if returnData[0] == 0: stock = returnData[1] if stock[b'close'] == 0 or stock[b'high'] == 0: return '' else: return getPercentage(stock[b'increaseRate']) else: return ''
def tsl_fun(start_date: datetime.datetime, end_date:datetime.datetime): start_date_str = start_date.strftime("%Y-%m-%d") end_date_str = end_date.strftime("%Y-%m-%d") # data = ts.RemoteExecute("return 'return a string';",{}) #执行一条语句 data = ts.RemoteCallFunc("big", [start_date_str, end_date_str, "SH000050"], {}) df = pd.DataFrame(data[1]) df.columns = df.columns.map(lambda x: x.decode("gbk")) for col, dtype in df.dtypes.iteritems(): if dtype.name == "object": df[col] = df[col].str.decode("gbk")
def get_data(date, stocks): ''' :param stocks: 可以是个list :param date: 字符串形式:2019-01-01 :return: ''' d = ts.RemoteCallFunc("GetFutureTick", [date, stocks], {}) print(tsbytestostr(d[1])) return tsbytestostr(d[1])
def get_appoint_contract(date, code): ''' :param date: :param stocks: :return: 指定日的指定标的物期权合约 ''' d = ts.RemoteCallFunc("Get_Appoint_Contract", [date, code], {}) #print (tsbytestostr (d [1])) return (tsbytestostr(d[1]))
def getTSdata_optionchain_pub(stockID, endt): '''通过天软公共函数,获取期权基础信息''' d4 = ts.RemoteCallFunc('OP_GetOptionChain', [stockID, endt], {}) if d4[0] == 0: # #data[0]==0 表示成功,data[1] 运行结果, # Data[2] 如果错误的错误信息 return d4[1] else: print(d4[2])
def getTSdata_MyGetTimeSeriesLOHC(sdate, edate, stockID, cy): '''获取某只股票低开高收数据''' d2 = ts.RemoteCallFunc('MyGetTimeSeriesLOHC', [sdate, edate, stockID, cy], {}) if d2[0] == 0: # #data[0]==0 表示成功,data[1] 运行结果, # Data[2] 如果错误的错误信息 return d2[1] else: print(d2[2])
def getDividendInfo(start_date, end_date): """ 从天软客户端提取股票分红信息 """ start_date = int(start_date) end_date = int(end_date) data = tsl.RemoteCallFunc('getBKDividendInfo', ('A股', end_date, start_date, end_date), {}) divd_table = parseByStock(data, date_parse=['截止日','股权登记日','除权除息日','预案公布日']) divd_table.rename(columns={ '截止日': 'date', '股权登记日': 'record_date', '除权除息日':'ex_divd_date', '预案公布日': 'ann_date', '红利比': 'cash_per_share', '实得比': 'real_cash_per_share', '送股比': 'total_share', '红股比': 'bonus_share', '转增比': 'inc_share'}, inplace=True) divd_table = divd_table.reset_index().set_index(['date', 'IDs']).sort_index() h5.save_factor(divd_table, '/stock_financial_data/dividends/')
def start(self): """开始归因""" trades = self.trades.to_dict('record') portfolio = self.portfolio.to_dict('record') asset = self.asset[['截止日', '资产净值', '现金市值']].to_dict('record') start = int(self.start_date.strftime("%Y%m%d")) end = int(self.end_date.strftime("%Y%m%d")) print("正在归因...") res = tsl.RemoteCallFunc( "BrinsonAttr", [start, end, self.benchmark, trades, portfolio, asset], {}) res_df = convert_df(res) print("归因结束...") return res_df
def synToTysoftHandler(): ''' 重构成独立的函数,以便可以单独调用 ''' start = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") sectionFileName = StockConfig.TSL_PATH + r'\section.xls' stockFileName = StockConfig.TSL_PATH + r'\stock.xls' writeSectionsToExcelFile(sectionFileName) writeStockSectionsToExcelFile(stockFileName) synResult = TSLPy3.RemoteCallFunc("synData", [sectionFileName, stockFileName], {}) print(synResult) end = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") if synResult[0] == 0: insertTaskLog(start, end, 'synToTysoftHandler', 'success', '同步成功', 2) return '同步成功' else: insertTaskLog(start, end, 'synToTysoftHandler', 'failed', synResult[2].decode('gbk'), 2) return synResult[2].decode('gbk')
def getTS_optClose(stockID, endt): '''获取收盘价数据,把代码获取放在天软函数中进行 能在天软中的,尽量在天软中完成 ret2:=OP_GetOptionChain(StockID,endt) ; //获取期权基础信息 //选中数组某列 ret:=select['StockID'] from ret2 end ; 天软这一段很重要 ''' d5 = ts.RemoteCallFunc('getOptionPriceDayArray', [stockID, endt], {}) if d5[0] == 0: # #data[0]==0 表示成功,data[1] 运行结果, # Data[2] 如果错误的错误信息 return d5[1] else: print(d5[2])
def initTradeDayFlag(): startDayStr = '2018-01-01' day = datetime.datetime.strptime(startDayStr, "%Y-%m-%d") result = TSLPy3.DefaultConnectAndLogin('jyu') print(result) #if result[0] == 0: while day.strftime("%Y-%m-%d") != '2018-06-20': tradeDayData = TSLPy3.RemoteCallFunc( "isTradeDayDS", [int(day.strftime("%Y%m%d")), int(day.strftime("%Y%m%d"))], {}) if tradeDayData[1]: print(day.strftime("%Y-%m-%d") + ': Y') StockTradeDay.objects.create(date=day.strftime("%Y-%m-%d"), isTradeDay='Y') else: print(day.strftime("%Y-%m-%d") + ': N') StockTradeDay.objects.create(date=day.strftime("%Y-%m-%d"), isTradeDay='N') day = day + datetime.timedelta(days=1) TSLPy3.Disconnect()
def get_code(): r = ts.RemoteCallFunc('Option_Contract', {}, {}) print(r[1]) return tsbytestostr(r[1])
def m_options_daily_market(date): d = ts.RemoteCallFunc("m_options_daily_market", [date], {}) return (tsbytestostr(d[1]))
def get_date_option(code, date): d = ts.RemoteCallFunc("Option_byDateFuture", [code, date], {}) return (tsbytestostr(d[1]))
def autoOrder(): now = datetime.datetime.now() hour = int(now.strftime("%H%M")) #if hour > 1500 or hour < 930: # print('autoOrder not running time :' + str(hour)) # return #dayOfWeek = int(now.strftime("%w")) #if dayOfWeek == 0 or dayOfWeek == 6: # print('autoOrder not running day :' + str(dayOfWeek)) # return date = now.strftime("%Y-%m-%d") orderRuleList = OrderRule.objects.using('stockdb').filter( isvalid="1", expiretime__gt=date + ' 23:59:59') orderLogNewList = [] url = "http://47.100.100.244:3000/stock/publish?message=" message = "" for orderRule in orderRuleList: try: #判断当天该股票是否已经自动下单 orderLog = OrderLog.objects.filter(datetime__contains=date, stockId=orderRule.stockId) print(orderRule.stockId) if orderLog: print('already order') continue #判断因子是否达标 isMatch = matchRule(orderRule, date) print(isMatch) if not isMatch: continue #获取实时价格,获取失败时不发送信息 orderPrice = orderRule.orderPrice if orderPrice == 0.00: returnData = TSLPy3.RemoteCallFunc("stock_realtime_data", [orderRule.stockId], {}) if returnData[0] == 0: orderPrice = returnData[1][b'close'] else: print(returnData[2].decode('gbk')) continue #拼装消息字符串 stockMessage = "b," + orderRule.stockId[2:] + ',' + str( orderPrice) + ',' + str(orderRule.orderQuantity) if message == '': message = stockMessage else: message = message + ";" + stockMessage #初始化下单日志对象 orderLogNew = OrderLog(datetime=datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S.%f"), stockId=orderRule.stockId, stockName=orderRule.stockName, orderPrice=orderPrice, orderQuantity=orderRule.orderQuantity, request=stockMessage, response=str(orderRule.id)) orderLogNewList.append(orderLogNew) except KeyError: break print(url + message) #消息不为空时发送消息 if message != '': req = Request(url + message) response = urlopen(req) responseData = response.read().decode('utf-8') if responseData.find("发布消息成功") != -1: #发送成功将规则设置为失效,并更新日志的返回信息字段 for log in orderLogNewList: rule = OrderRule.objects.using('stockdb').get( id=int(log.response)) rule.isvalid = '0' rule.ordertime = log.datetime rule.save() log.response = responseData OrderLog.objects.bulk_create(orderLogNewList) insertTaskLog(now.strftime("%Y-%m-%d %H:%M:%S.%f"), datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), 'autoOrderRule', 'success', '', 0)