Exemple #1
0
def get_daily_bars(stock_list, begin_time, end_time):
    # 连接本地终端时,td_addr为localhost:8001,
    if (td.init('*****@*****.**', 'zyj2590@1109', 'strategy_1') == 0):
        try:
            bars = md.get_dailybars(stock_list, begin_time, end_time)
            return bars
        except:
            pass
Exemple #2
0
def read_last_n_kline(symbol_list, weeks_in_seconds, count, end_time):
    # 连接本地终端时,td_addr为localhost:8001,
    if (td.init('*****@*****.**', 'zyj2590@1109', 'strategy_1') == 0):
        # 类结构体转成dataframe
        columns = [
            'endtime', 'open', 'high', 'low', 'close', 'volume', 'amount'
        ]
        bars = 0

        is_daily = (weeks_in_seconds == 240 * 60)
        data_list = []  # pd.DataFrame(None, columns=columns)
        '''
        todo 整批股票读取有问题,数据取不全,放弃
        stocks = ''
        for x in symbol_list:
            stocks+=','+x

        read_days=int(count*weeks_in_seconds/240/60)+1
        start_date=md.get_calendar('SZSE',
            datetime.datetime.strptime(end_time, '%Y-%m-%d %H:%M:%S')
                -datetime.timedelta(days=read_days),end_time)[0].strtime
        start_date=start_date[:10] +' 09:30:00'

        while start_date<end_time:
            bars=md.get_bars(stocks[1:], weeks_in_seconds, start_date, end_time)
        '''
        for stock in symbol_list:
            #now = '[{0}] read k line'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
            #print(now,stock)
            kdata = []
            # 返回结果是bar类数组
            if is_daily:
                bars = md.get_last_n_dailybars(stock, count, end_time)
            else:
                bars = md.get_last_n_bars(stock, weeks_in_seconds, count,
                                          end_time)

            for bar in bars:
                if is_daily:
                    kdata.append([
                        int(bar.utc_time), bar.open, bar.high, bar.low,
                        bar.close, bar.volume, bar.amount
                    ])
                else:
                    kdata.append([
                        int(bar.utc_endtime), bar.open, bar.high, bar.low,
                        bar.close, bar.volume, bar.amount
                    ])

            if len(bars) > 0:
                kdata = pd.DataFrame(kdata, columns=columns)
                kdata = kdata.sort_values(by='endtime', ascending=False)
                data_list.append({'code': stock, 'kdata': kdata})

        return data_list
Exemple #3
0
def get_stock_by_market(exchange, sec_type, is_active, return_list=True):
    # 连接本地终端时,td_addr为localhost:8001,
    if (td.init('*****@*****.**', 'zyj2590@1109', 'strategy_1') == 0):
        try:
            stock_list = ""
            css = md.get_instruments(exchange, sec_type, is_active)

            if return_list:
                stock_list = [cs.symbol for cs in css]
            else:
                for cs in css:
                    stock_list += "," + cs.symbol
            return stock_list[1:]
        except:
            pass
Exemple #4
0
def get_index_stock(index_symbol, return_list=True):
    # 连接本地终端时,td_addr为localhost:8001,
    if (td.init('*****@*****.**', 'zyj2590@1109', 'strategy_1') == 0):
        try:
            stock_list = ""
            css = md.get_constituents(index_symbol)

            if return_list:
                stock_list = [cs.symbol for cs in css]
            else:
                for cs in css:
                    stock_list += "," + cs.symbol
            return stock_list[1:]
        except:
            pass
Exemple #5
0
    orders = td.get_unfinished_orders()
    print('query unfinished orders: ', orders)

    # 策略已配置实盘账户,查询策略关联账户的相关信息

    # 获取柜台交易账号列表
    # r = td.get_broker_accounts()
    # print ('get_broker_accounts', [to_dict(i) for i in r])

    # 获取柜台交易账号资金
    # r = td.get_broker_cash()
    # print ('get_broker_cash', [to_dict(i) for i in r])

    # 获取柜台交易账号持仓
    # r = td.get_broker_positions()
    # print ('get_broker_positions', [to_dict(i) for i in r])


# register callbacks
td.ev_execrpt += on_execrpt
td.ev_error += on_error
td.ev_login += on_login
td.ev_order_status += on_order_status

#连接本地终端时,td_addr为localhost:8001,
#ret = td.init('*****@*****.**', '123456', 'strategy_1', 'localhost:8001')

ret = td.init('*****@*****.**', '123456', 'strategy_1')
print('td init result: ', ret)
td.run()
Exemple #6
0
    orders = td.get_unfinished_orders()
    print('query unfinished orders: ', orders)

    # 策略已配置实盘账户,查询策略关联账户的相关信息

    # 获取柜台交易账号列表
    # r = td.get_broker_accounts()
    # print ('get_broker_accounts', [to_dict(i) for i in r])

    # 获取柜台交易账号资金
    # r = td.get_broker_cash()
    # print ('get_broker_cash', [to_dict(i) for i in r])

    # 获取柜台交易账号持仓
    # r = td.get_broker_positions()
    # print ('get_broker_positions', [to_dict(i) for i in r])


# register callbacks
td.ev_execrpt += on_execrpt
td.ev_error += on_error
td.ev_login += on_login
td.ev_order_status += on_order_status

#连接本地终端时,td_addr为localhost:8001,
#ret = td.init('*****@*****.**', '123456', 'strategy_1', 'localhost:8001')

ret = td.init('*****@*****.**', '123456', 'strategy_1')
print('td init result: ', ret)
td.run()
Exemple #7
0
def read_kline(symbol_list,
               weeks_in_seconds,
               begin_time,
               end_time,
               max_record=50000):

    #连接本地终端时,td_addr为localhost:8001,
    if (td.init('*****@*****.**', 'zyj2590@1109', 'strategy_1') == 0):
        #类结构体转成dataframe
        kdata = []
        columns = [
            'endtime', 'open', 'high', 'low', 'close', 'volume', 'amount'
        ]
        bars = 0

        is_daily = (weeks_in_seconds == 240 * 60)

        while (True):

            # 返回结果是bar类数组
            if is_daily:
                bars = md.get_dailybars(symbol_list, begin_time, end_time)
            else:
                bars = md.get_bars(symbol_list, weeks_in_seconds, begin_time,
                                   end_time)

            for bar in bars:
                if is_daily:
                    kdata.append([
                        int(bar.utc_time), bar.open, bar.high, bar.close,
                        bar.low, bar.volume, bar.amount
                    ])
                else:
                    kdata.append([
                        int(bar.utc_endtime), bar.open, bar.high, bar.close,
                        bar.low, bar.volume, bar.amount
                    ])

            count = len(bars)
            #TODO 一次最多处理10000项以内数据,超出应有所提示
            if (count==0 or len(kdata)>max_record) \
               or (not is_daily and bars[count - 1].strendtime >= end_time) \
               or (is_daily and bars[count - 1].strtime >= end_time)   :
                break

            #print("read [%s] k line:%s count=%d" % (symbol_list,
            #        bars[0].strtime[:10] + ' ' + bars[0].strtime[11:19], count))

            if is_daily:
                if count <= 10:
                    break
                else:
                    begin_time = bars[count - 1].strtime[:10] \
                                 + ' ' + bars[count - 1].strtime[11:19]
            else:
                begin_time=bars[count-1].strendtime[:10]\
                           +' '+bars[count-1].strendtime[11:19]
        '''
        count=len(kdata)
        if count>0:
            print("total count:%d,end date:%s " % (count,timestamp_datetime(kdata[count-1][0])))
        else:
            print("No data" )
        '''

        return pd.DataFrame(kdata, columns=columns)
    # query order
    order = td.get_order(order2.cl_ord_id)
    print('query order: ', order_to_dict(order) if order else '')

    # query cash
    cash = td.get_cash()
    print('query cash: ', cash_to_dict(cash) if cash else '')

    # query position
    position = td.get_position('CFFEX', 'IF1512', OrderSide_Bid)
    print('query position: ', position_to_dict(position) if position else '')

    # query all positions
    positions = td.get_positions()
    print('query all positions: ', positions)

    # get unfinished orders
    orders = td.get_unfinished_orders()
    print('query unfinished orders: ', orders)

# register callbacks
td.ev_execrpt += on_execrpt
td.ev_error += on_error
td.ev_login += on_login
td.ev_order_status += on_order_status

# init td
ret = td.init('*****@*****.**', '123456', 'strategy_2', 'localhost:8001')
print('td init result: ', ret)
td.run()