コード例 #1
0
def get_code():
    r = ts.RemoteCallFunc('Option_Contract', {}, {})
    print(r[1])

    return tsbytestostr(r[1])
コード例 #2
0

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


# 搞成天软格式的时间
# 起始日
sdate = ts.EncodeDate(2017, 6, 4)
# 终止日
edate = ts.EncodeDate(2018, 6, 4)

# 天软时间变正常时间
# ts.DecodeDate(43200)

# stock1='IC01' # 天软里面的当月连续
# stock2='IC02' # 天软里面的次月连续
#

# 获取期货合约代码

# 周期

cy = '1分钟线'
コード例 #3
0
ファイル: test.py プロジェクト: yihuichen/FACTOR_MYSQL
setsysparam(pn_date(),inttodate({0}));
return 
Query("A股","",True,"","代码",DefaultStockID(),
"名称",CurrentStockName(),
"最高价",high(),
"最低价",low(),
"昨收",StockPrevClose3(),
"收盘价",close(),
"开盘价",open(),
"涨幅(%)",StockZf3(),
"换手率(%)",StockHsl3(),
"量比",volrate(),
"对数收益率(%)",StockLnZf3(),
"是否下跌",IsDown(),
"是否上涨",IsUp(),
"是否平盘",IsEqual(),
"指定日是否一字涨停({1})",StockIsZt2(42466),
"指定日是否一字跌停({2})",StockIsDt2(42437),
"是否涨停({3})",StockIsZt(38450),
"是否跌停({4})",StockIsDt(38450),
"是否曾经涨停({5})",StockIsCJZt(38450),
"是否曾经跌停({6})",StockIsCJDt(38450),
"最新总市值(万)",StockTotalValue3(),
"最新流通市值(万)",StockMarketValue3(),
"市盈率(最近12个月)(类型=0)",StockPE3_V(0),
"市盈率(专用)(类型=0)",StockPE3_IV(0),
"市净率(最新财务数据)",StockPNA3_II());
""".format(date, date, date, date, date, date, date)
d2 = TSLPy3.RemoteExecute(t1, {})[1]
df5 = change_code(pd.DataFrame(d2))
コード例 #4
0
# -*- coding: utf-8 -*-
# @Time    : 2018/12/20 16:07
# @Author  : Big Huang
# @Email   : [email protected]
# @File    : tslfun.py
# @Software: PyCharm
import pandas as pd
import sys
import datetime
sys.path.append(r"E:\software\Analyse.NET")
import TSLPy3 as ts
ts.ConnectServer("tsl.tinysoft.com.cn", 443)
dl = ts.LoginServer("indexsh","888888") #Tuple(ErrNo,ErrMsg) 登陆用户
assert dl[0] == 0
print("登陆成功")
print("服务器设置:", ts.GetService())
ts.SetComputeBitsOption(64)  # 设置计算单位
print("计算位数设置:", ts.GetComputeBitsOption())

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

コード例 #5
0
    def getTickDetails(self, BegDate, EndDate, contract_code, symbol):
        # tick_details = pd.DataFrame(self.tsbytestostr(ts.RemoteExecute( '''a:=select ["StockID"],["StockName"],["date"],["price"],["vol"],["amount"],["cjbs"],["yclose"],["syl1"],["syl2"],["buy1"],["sale1"],["bc1"],["sc1"] from tradetable datekey %s+21/24 to %s+16/24 of '%s' end;b:=update a set ['date']=datetimetostr(['date']) end;return a;''' % (
        # ts.LocalCallFunc("StrToDate", [BegDate])[1], ts.LocalCallFunc("StrToDate", [EndDate])[1], contract_code),{}))[1])
        # tick_details.to_csv('%s%s_%s.csv'%(path,symbol,EndDate),index=False)
        # return tick_details

        # tick_details = pd.DataFrame(self.tsbytestostr(ts.RemoteExecute(
        # '''a:=select ["StockID"],["StockName"],["date"],["price"],["vol"],["amount"],["cjbs"],["yclose"],["syl1"],["syl2"],["buy1"],["sale1"],["bc1"],["sc1"] from tradetable datekey %s+21/24 to %s+16/24 of '%s' end;b:=update a set ['date']=datetimetostr(['date']) end;return a;''' % (
        #     ts.LocalCallFunc("StrToDate", [BegDate])[1], ts.LocalCallFunc("StrToDate", [EndDate])[1], contract_code),
        # {}))[1])

        if self.mc is None:
            # self.mc = mongodb_client()
            self.mc.dbConnect()

        # dateList=self.getTradeDays(
        #     (datetime.datetime.strptime(BegDate, '%Y-%m-%d') - datetime.timedelta(3)).strftime('%Y-%m-%d'), EndDate)
        # BegDateAdj=dateList[max(0,dateList.index(BegDate)-1)]

        tick_dict = self.tsbytestostr(
            ts.RemoteExecute(
                '''a:=select ["StockID"],["StockName"],["date"],["price"],["vol"],["amount"],["cjbs"],["yclose"],["syl1"],["syl2"],["buy1"],["sale1"],["bc1"],["sc1"] from tradetable datekey %s to %s+0.9999999 of '%s' end;b:=update a set ['date']=datetimetostr(['date']) end;return a;'''
                % (ts.LocalCallFunc("StrToDate", [BegDate])[1],
                   ts.LocalCallFunc("StrToDate", [EndDate])[1], contract_code),
                {}))[1]

        # datetime.datetime.strptime(tick_dict['date'][0], '%Y-%m-%d %H:%M:%S').replace(microsecond=500000)
        last_tick_datetime = None
        count = 0
        for d in tick_dict:
            tick = CtaTickData()
            tick.vtSymbol = d['StockName']

            tick.symbol = d['StockID']  # 合约代码   CF1705 StockID
            # tick.exchange = EMPTY_STRING  # 交易所代码

            # 成交数据
            tick.lastPrice = d['price']  # 最新成交价
            tick.volume = d['vol']  #最新成交量
            tick.amount = d['amount']  # 成交金额
            tick.cjbs = d['cjbs']  # 周期内成交笔数
            tick.yclose = d['yclose']  # 上一收盘价
            tick.preSettlement = d['syl2']  # 上一日结算价

            # tick的时间

            # 转换为datetime格式
            try:
                if len(d['date']) > 10:
                    tick.datetime = datetime.datetime.strptime(
                        d['date'], '%Y-%m-%d %H:%M:%S')  # python的datetime时间对象
                else:
                    tick.datetime = datetime.datetime.strptime(
                        d['date'], '%Y-%m-%d')
                tick.date = tick.datetime.strftime('%Y-%m-%d')  # 日期
                tick.time = tick.datetime.strftime('%H:%M:%S')  # 时间
                # tick.tradingDay = d['price']  # 交易日期
            except Exception as ex:
                # 抛弃本tick
                print('日期转换错误:%s,error:%s' % (d['date'], ex))
                continue

            # 1档行情
            tick.bidPrice1 = d['buy1']
            tick.askPrice1 = d['sale1']
            tick.bidVolume1 = d['bc1']
            tick.askVolume1 = d['sc1']

            # 修正毫秒
            if tick.datetime.replace(microsecond=0) == last_tick_datetime:
                # 与上一个tick的时间(去除毫秒后)相同,修改为500毫秒
                tick.datetime = tick.datetime.replace(microsecond=500000)
                tick.time = tick.datetime.strftime('%H:%M:%S.%f')

            else:
                tick.datetime = tick.datetime.replace(microsecond=0)
                tick.time = tick.datetime.strftime('%H:%M:%S.%f')

            # 记录最新tick的时间
            last_tick_datetime = tick.datetime
            if symbol == 'TC':
                symbol = 'ZC'
            if symbol == 'RO':
                symbol = 'OI'
            if symbol == 'ER':
                symbol = 'RI'
            if symbol == 'WS':
                symbol = 'WH'
            if symbol == 'ME':
                symbol = 'MA'

            self.mc.dbInsert('FUTURE_TICK_DB',
                             'TS_%s_TickDatas' % symbol,
                             d=tick.__dict__)
            count = count + 1
        print('写入合约%s完成,共%d条' % (contract_code, count))
        return
コード例 #6
0
 def __enter__(self):
     if ts.Logined() is False:
         print('天软未登陆或客户端未打开,将执行登陆操作')
         self.__tsLogin()
         return self
コード例 #7
0
 def __exit__(self, *arg):
     ts.Disconnect()
     print('天软连接断开')
コード例 #8
0
ファイル: tsl_data_source.py プロジェクト: wanhanwan/Packages
def decode_date(dt):
    dt_decode = tsl.DecodeDate(dt)
    return pd.Timestamp(*dt_decode)
コード例 #9
0
ファイル: tsl_data_source.py プロジェクト: wanhanwan/Packages
def run_script(script, sysparams):
    data = tsl.RemoteExecute(script, sysparams)
    return data
コード例 #10
0
 def __exit__(self, *arg):
     ts.Disconnect()
コード例 #11
0
ファイル: tsl_data_source.py プロジェクト: wanhanwan/Packages
def encode_datetime(dt):
    return tsl.EncodeDateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute,
                              dt.second, 0)
コード例 #12
0
 def __enter__(self):
     if ts.Logined() is False:
         self.__tsLogin()
         return self
コード例 #13
0
def TSDate(Y, M, D):
    d = tp.EncodeDate(Y, M, D)
    return d
コード例 #14
0
ファイル: getTSdata.py プロジェクト: yu123ert/getTSdata
import os
import sys

sys.path.append("C:\Program Files\Tinysoft\Analyse.NET")

import traceback

import pickle
import datetime

# from WindPy import *

# 实际上我有这个模块的,但是pycharm找不到,我也没办法
import TSLPy3 as ts

ts.DefaultConnectAndLogin("test")  #调用函数登陆


def tsbytestostr(data):
    "把gbk的字符转化为uft的字符"

    if (isinstance(data, (tuple)) or isinstance(data, (list))):
        lendata = len(data)
        ret = []
        for i in range(lendata):
            ret.append(tsbytestostr(data[i]))
    elif isinstance(data, (dict)):
        lendata = len(data)
        ret = {}
        for i in data:
            ret[tsbytestostr(i)] = tsbytestostr(data[i])
コード例 #15
0
ファイル: task.py プロジェクト: lengfeiyan/stockorder
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)
コード例 #16
0
def m_options_daily_market(date):
    d = ts.RemoteCallFunc("m_options_daily_market", [date], {})
    return (tsbytestostr(d[1]))
コード例 #17
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
コード例 #18
0
def get_date_option(code, date):
    d = ts.RemoteCallFunc("Option_byDateFuture", [code, date], {})
    return (tsbytestostr(d[1]))
コード例 #19
0
 def __tsLogin(self):
     ts.ConnectServer("tsl.tinysoft.com.cn", 443)
     dl = ts.LoginServer("fzzqjyb", "fz123456")
     print('天软登陆成功')
コード例 #20
0
 def getTradeDays(self, start, end):
     daysList = self.tsbytestostr(
         ts.RemoteExecute(
             "begt:=strtodate('%s');endt:=strtodate('%s');return datetostr(spec(specdate(nday3(tradedays(begt,endt),sp_time()),endt),'SH000001'));"
             % (start, end), {}))
     return daysList[1]
コード例 #21
0
        return d2[1]
    else:
        print(d2[2])


if __name__ == '__main__':

    cy = '日线'

    dfcode = pd.read_excel('stockcode.xlsx')

    stockcode = dfcode['代码'].tolist()

    # 搞成天软格式的时间
    # 起始日
    sdate = ts.EncodeDate(2017, 1, 1)
    # 终止日
    edate = ts.EncodeDate(2019, 10, 20)

    # 获取交易日序列
    dateS = getTSdate(sdate, edate)

    # 解析结果的list
    s2_close = []
    s2_low = []
    s2_datetime = []
    s2_high = []
    s2_code = []

    df2 = pd.DataFrame()  # 整理所有数据
コード例 #22
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()