コード例 #1
0
ファイル: TSoperation.py プロジェクト: SidGor/GroupFactor
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)
コード例 #2
0
ファイル: cangdan.py プロジェクト: lfchen1130/htf_intern
    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()
コード例 #3
0
ファイル: hello.py プロジェクト: scirocc/test1
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)
コード例 #4
0
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
コード例 #5
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()
コード例 #6
0
 def __exit__(self, *arg):
     ts.Disconnect()
     print('天软连接断开')
コード例 #7
0
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
コード例 #8
0
 def __exit__(self, *arg):
     ts.Disconnect()
コード例 #9
0
ファイル: ranking.py プロジェクト: lfchen1130/htf_intern
    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()