def TSreadSingleStock(Ticker, Factor=["close"], TsAccount=None, TsPassword=None): if (TsAccount == None) or (TsPassword == None): try: acc_f = pd.read_csv("D:/TSaccount.csv") except Exception as e: return e try: ts.ConnectServer("tsl.tinysoft.com.cn", 443) dl = ts.LoginServer(acc_f.Account[0], acc_f.Password[0]) #Tuple(ErrNo,ErrMsg) Login ts.Disconnect() # Log out. except Exception as e: return e # 2. GetData # 3. Export(save data)
def update_cangdan(self): tsl = tslFunctions() tsl.tsl_login() conn_Local = create_engine( str(r"mysql+pymysql://root:xxxx@localhost:3306/test")) self.__start=(dt.parser.parse(str(pd.read_sql("select max(date) from register_values",con=conn_Local\ ).values[0][0]))+datetime.timedelta(days=1)).strftime('%Y-%m-%d') print(self.__start) tradedaysList = tsl.getTradeDays(self.__start, self.__end) if len(tradedaysList) == 0: print("已经更新至最新日期%s" % self.__end) return update_cangdan_raw = pd.DataFrame( tsl.tsbytestostr( ts.RemoteExecute( f'''X:=getbk('期货品种代码'); r:=array(); for i:=0 to length(X)-1 do begin SetSysParam(PN_Stock(),x[i]); Ret:=GetFuturesDailyWarehouse(inttodate({self.__start.replace('-','')}),inttodate({self.__end.replace('-','')}),t); r&=t; end; return r;''', {})[1])) if len(update_cangdan_raw) == 0: print("No Datas") else: print('1') can_l = update_cangdan_raw.截止日.unique() #记录下返回表的所有日期 update_cangdan_raw['utime'] = datetime.datetime.now() update_cangdan_raw.to_sql('register_raw', conn_Local, if_exists='append', index=False, chunksize=5000) update_cangdan = update_cangdan_raw.loc[~( update_cangdan_raw.是否小计 == '小计')] #print(len(update_cangdan)) update_cangdan.fillna(value=0, inplace=True) update_cangdan['value']=update_cangdan['已制成仓单的货物数量']+\ update_cangdan['今日注册仓单量']+update_cangdan['仓单数量'] update_cangdan[ 'change'] = update_cangdan['当日增减'] + update_cangdan['仓单变动量'] rlt = update_cangdan.groupby(['代码', '截止日'], as_index=False)['value', 'change'].sum() rlt.columns = ['code', 'date', 'value', 'change'] rlt['code'] = rlt['code'].apply(lambda x: x.upper()) rlt.to_sql('register_values', conn_Local, if_exists='append', index=False, chunksize=5000) ts.Disconnect()
def get_sCode_sDate(sDate): while True: ts.ConnectServer('211.100.23.205', 443) # ts.LoginServer('chancehunt', 'chnchnt') ts.LoginServer('fuchunguang', 'Fcg=888888') if ts.Logined() == True: print('已登录') # sql = 'stocks:=GetBk(\'上证A股;深证A股;创业板;中小企业板\');return stocks;' # result = (ts.RemoteExecute(sql, {}))[1] sCode = [] # for data in result: # sCode.append(data.decode('utf8')) sCode.append('SH000300') sCode.append('SH000016') sCode.append('SH000905') ts.Disconnect() break return (sCode)
def getData(sCode, sDate): while True: ts.ConnectServer('211.100.23.205', 443) ts.LoginServer('fuchunguang', 'Fcg=888888') if ts.Logined() == True: print('已登录') daycount = 0 for code in sCode: #########deal min1 hCodeInfo1min = {} with open('./{}_5s.csv'.format(code), 'w') as f: f.write('code,mtime,open,high,low,close,vol,amount\n') for date in sDate: daycount += 1 # sql = 'setsysparam(pn_stock(),\'{}\');' \ # 'setsysparam(PN_Cycle(), cy_1m());setsysparam(pn_date(),inttodate({}));' \ # 'return nday({},"mdate",datetimetostr(sp_time()),"open",Open(),"high",High(),"low",Low(),"close",Close(),"vol",Vol(),"amount",Amount());' \ # .format(code, date, 240) # 240个正好是一天 sql = 'setsysparam(pn_stock(),\'{}\');' \ 'setsysparam(PN_Cycle(), cy_5s());setsysparam(pn_date(),inttodate({}));' \ 'return nday({},"mdate",datetimetostr(sp_time()),"open",Open(),"high",High(),"low",Low(),"close",Close(),"vol",Vol(),"amount",Amount());' \ .format(code, date, 2880) # 240个正好是一天 result = (ts.RemoteExecute(sql, {}))[1] if result: for data in result: temp = data[b'mdate'].decode('gbk').replace( ':', '').replace('-', '').replace(' ', '') if temp[:4] == '2019' or temp[:4] == '2020': print(data[b'vol']) f.write('{},{},{},{},{},{},{},{}\n'.format( code, temp, data[b'open'], data[b'high'], data[b'low'], data[b'close'], data[b'vol'], data[b'amount'])) print('{},{},{},{},{},{},{},{}\n'.format( code, temp, data[b'open'], data[b'high'], data[b'low'], data[b'close'], data[b'vol'], data[b'amount'])) ts.Disconnect() break else: print('天软未登录') return 0
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 __exit__(self, *arg): ts.Disconnect() print('天软连接断开')
def getData(sDate, intervel, sContract): #intervel 表示数据间隔要5秒的,还是一分钟数据,还是日线数据 e.g "5s" #contract 合约名称 e.g "sc" try: os.makedirs('E:\CLionProjects\HedgeArbitrage/data') except: pass while True: ts.ConnectServer('211.100.23.205', 443) ts.LoginServer('fuchunguang', 'Fcg=888888') if ts.Logined() == True: print('already login') daycount = 0 for code in sContract: hdateInfo = {} notNullcounter = 0 for date in sDate: daycount += 1 if intervel == '1m': temp1 = 'cy_1m()' temp2 = 240 elif intervel == '5s': temp1 = 'cy_5s()' temp2 = 2880 sql = 'setsysparam(pn_stock(),\'{}\');' \ 'setsysparam(PN_Cycle(), {});setsysparam(pn_date(),inttodate({}));' \ 'return nday({},"mdate",datetimetostr(sp_time()),"open",Open(),"high",High(),"low",Low(),"close",Close(),"vol",Vol(),"amount",Amount());' \ .format(code, temp1,date, temp2) result = (ts.RemoteExecute(sql, {}))[1] if result: for data in result: temp = data[b'mdate'].decode('gbk').replace( ':', '').replace('-', '').replace(' ', '') if len(temp) < 14: temp += '0' * (14 - len(temp)) if int(sDate[0]) <= int(temp[:8]) <= int( sDate[-1]): notNullcounter += 1 hdateInfo[temp] = [ data[b'open'], data[b'high'], data[b'low'], data[b'close'], data[b'vol'], data[b'amount'] ] print(temp) # print('{},{},{},{},{},{},{},{}\n'.format(code, # temp, # data[b'open'], # data[b'high'], # data[b'low'], # data[b'close'], # data[b'vol'], # data[b'amount'])) if notNullcounter: with open( 'E:\CLionProjects\HedgeArbitrage/data/{}_{}.js'. format(code, intervel), 'w') as f: json.dump(hdateInfo, f) ts.Disconnect() break else: print('not login ') return 0
def __exit__(self, *arg): ts.Disconnect()
def update_rank(self): tsl = tslFunctions() tsl.tsl_login() # conn_Local=create_engine(str(r"mysql+pymysql://root:xxxx@localhost:3306/test")) conn_Local = create_engine( str(r"mysql+pymysql://root:[email protected]:3306/test")) self.__start=(dt.parser.parse(str(pd.read_sql("select max(截止日) from rank_raw",con=conn_Local\ ).values[0][0]))+datetime.timedelta(days=1)).strftime('%Y-%m-%d') tradedaysList = tsl.getTradeDays(self.__start, self.__end) print(tradedaysList) if len(tradedaysList) == 0: print("已经更新至最新日期%s" % self.__end) return for tday in tradedaysList: update_rank_raw = pd.DataFrame( tsl.tsbytestostr( ts.RemoteExecute( f'''endt:={tday.replace('-','')+'T'}; X:=GetFuturesID('',endt); r:=array(); for i:=0 to length(X)-1 do begin SetSysParam(PN_Stock(),x[i]); Ret:= GetFuturesTradeRankingByDate(endt,t); r&=t; end; return r;''', {})[1])) if len(update_rank_raw) == 0: print("No Datas") else: print(tday) #can_l=update_cangdan_raw.截止日.unique()#记录下返回表的所有日期 update_rank_raw['utime'] = datetime.datetime.now() update_rank_raw['机构简称2'] = update_rank_raw['机构简称'].apply(name) update_rank_raw['code'] = update_rank_raw.代码.apply( lambda x: re.split('\d+', x.upper())[0]) update_rank_raw.to_sql('rank_raw', conn_Local, if_exists='append', index=False, chunksize=5000) #update_rank_raw.dropna(axis=1, inplace=True) duo = update_rank_raw.loc[update_rank_raw.排名类型 == '持买单量排名'] kong = update_rank_raw.loc[update_rank_raw.排名类型 == '持卖单量排名'] rlt_duo = duo.groupby(['code', '截止日', '机构简称'], as_index=False)['数量', '比上交易日增减'].sum() rlt_duo['rename'] = rlt_duo['机构简称'].apply(name) rank_duo = rankk(rlt_duo) rank_duo.columns = [ 'code', 'date', 'name', 'value', 'change', 'rename', 'rank' ] rank_duo.to_sql('rank_long', conn_Local, if_exists='append', index=False, chunksize=5000) rlt_kong = kong.groupby(['code', '截止日', '机构简称'], as_index=False)['数量', '比上交易日增减'].sum() rlt_kong['rename'] = rlt_kong['机构简称'].apply(name) rank_kong = rankk(rlt_kong) rank_kong.columns = [ 'code', 'date', 'name', 'value', 'change', 'rename', 'rank' ] rank_kong.to_sql('rank_short', conn_Local, if_exists='append', index=False, chunksize=5000) ts.Disconnect()