Beispiel #1
0
def init_data():
    global data

    # for interval in granularity:

    data = load_data_from_server(server_base='http://106.14.119.122',
                                 instruments_id=inst[0],
                                 granularity=granularity)
Beispiel #2
0
def login():
    # 登录行情服务器
    user = MyMdApi(instruments=inst,
                   broker_id=BROKER_ID,
                   investor_id=INVESTOR_ID,
                   password=PASSWORD)
    user.Create("data")
    user.RegisterFront(ADDRESS_MD)
    user.Init()

    print('行情服务器登录成功')

    bars = load_data_from_server(server_base='http://106.14.119.122',
                                 instruments_id=inst[0],
                                 granularity=granularity)

    while True:

        if Utils.exit_flag:
            msg = 'Thread CTPDataCollectEngine say bye-bye'
            print(msg)
            logger.info(msg=msg)

            return

        try:
            payload = q_depth_market_data.get(timeout=1)
            q_depth_market_data.task_done()

            instrument_id = payload.InstrumentID
            action_day = payload.ActionDay
            update_time = payload.UpdateTime.replace(':', '')
            last_price = payload.LastPrice
            volume = payload.Volume

            if volume == 0:
                continue

            tickToBar(payload, 13)

            if not q_bar.empty():
                bar = q_bar.get()
                bars.append(bar)
                high = get_k_line_column(data=bars, depth=20)
                low = get_k_line_column(data=bars, ohlc='low')

                ma_5 = ma(elements=high, step=5)
                ma_10 = ma(elements=high, step=10)
                print(high)
                print(ma_5)
                print(ma_10)
                cu = cross(ma_5, ma_10)
                print(cu)
                far = be_apart_from(cu)
                print(far)

        except queue.Empty as e:
            pass
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
sys.path.append('../')

from function import load_data_from_server, get_k_line_column

__author__ = 'James Iter'
__date__ = '2018/8/6'
__contact__ = '*****@*****.**'
__copyright__ = '(c) 2018 by James Iter.'

if __name__ == "__main__":
    data = load_data_from_server(server_base='http://106.14.119.122',
                                 instruments_id='rb1810',
                                 granularity='3600')
    high = get_k_line_column(data=data, depth=10)
    pass
Beispiel #4
0
def DingDangNo6():
    logfilename = BROKER_ID + '_' + INVESTOR_ID + '_交易日志' + str(today) + '.log'
    log = Logger(logfilename=logfilename)
    config = incept_config()
    load_data_from_file()
    init_k_line_pump()

    workdays = TradingPeriod.get_workdays(begin=config['begin'],
                                          end=config['end'])
    workdays_exchange_trading_period_by_ts = \
        TradingPeriod.get_workdays_exchange_trading_period(
            _workdays=workdays, exchange_trading_period=EXCHANGE_TRADING_PERIOD)

    inst = 'rb1905'
    granularity = 780
    serverport = 'http://192.168.1.19:8008'

    bars = dict()
    barss = load_data_from_server(server_base=serverport,
                                  instruments_id=inst,
                                  granularity=granularity)
    barinterval = inst + '_' + str(granularity)
    bars[barinterval] = barss

    if today in workdays_exchange_trading_period_by_ts:
        trading_period_by_ts = workdays_exchange_trading_period_by_ts[today]
    else:
        print('Not trading day, return to system.')
        return

    pc_grid = grid

    s = S = ApiStruct.D_Sell
    b = B = ApiStruct.D_Buy
    k = K = ApiStruct.OF_Open
    p = P = ApiStruct.OF_Close
    pj = PJ = ApiStruct.OF_CloseToday
    pz = PZ = ApiStruct.OF_CloseYesterday

    # T['TE_RESUME'] = 'int'  # 流重传方式
    # TERT_RESTART = 0  # 从本交易日开始重传
    # TERT_RESUME = 1  # 从上次收到的续传
    # TERT_QUICK = 2  # 只传送登录后的流内容

    # 登录行情服务器
    md = MyMdApi(instruments=inst,
                 broker_id=BROKER_ID,
                 investor_id=INVESTOR_ID,
                 password=PASSWORD)
    md.Create(INVESTOR_ID + "data")
    md.RegisterFront(ADDR_MD)
    md.Init()

    td = MyTradeApi(broker_id=BROKER_ID,
                    investor_id=INVESTOR_ID,
                    passwd=PASSWORD)
    td.Create(LOGS_DIR + INVESTOR_ID + "_trader")
    td.RegisterFront(ADDR_TD)
    td.SubscribePublicTopic(1)
    td.SubscribePrivateTopic(1)

    td.Init()

    last_time = None

    up_trader_flag = False
    down_trader_flag = False

    while True:

        if not q_depth_market_data.empty():
            tick = q_depth_market_data.get()

            sewing_data_to_file_and_depositary(depth_market_data=tick)
            last_k_line = get_last_k_line(instrument_id=inst[0],
                                          interval=period)

            DayOpen = tick.OpenPrice
            DayHigh = tick.HighestPrice
            DayLow = tick.LowestPrice

            H = get_k_line_column(strategy_inst, strategy_period, ohlc='high')
            L = get_k_line_column(strategy_inst, strategy_period, ohlc='low')
            C = get_k_line_column(strategy_inst, strategy_period, ohlc='close')

            HL = HLV(H, L)
            MHL = max(HL)
            MminHL = min(HL)
            AVHL = sum(HL) / len(HL)
            vgrid = int(AVHL * 0.8)
            # calculate the uppper and lower band
            HV = HHV(H, 23)
            LV = LLV(L, 23)
            # #middle line
            DingDang = MID(HV, LV)

            allsig = cross(C, DingDang)[0] * 2

            if last_k_line is not None and tick.InstrumentID == strategy_inst:

                if last_time != last_k_line['date_time']:
                    last_time = last_k_line['date_time']
                    up_trader_flag = False
                    down_trader_flag = False

                dingdang = 'Buy!' if tick.LastPrice > Mid[-1] else 'Sell'
                bkvol = buy_order - sp_total if buy_order - sp_total > 0 else 0
                skvol = sell_order - bp_total if sell_order - bp_total > 0 else 0
                # bkvol = get_day_bkvol(td, strategy_inst)
                # skvol = get_day_skvol(td, strategy_inst)

                print('当前时间: ', tick.UpdateTime, 'HIGH:', last_k_line['high'],
                      '    ', 'LOW:', last_k_line['low'], '当前价: ',
                      tick.LastPrice, '叮当值:', Mid[-1], dingdang, 'buy_limit:',
                      bk_limit, 'sell_limit:', sk_limit)
                print('buy_order: ', buy_order, 'sell_order: ', sell_order,
                      BROKER_ID, INVESTOR_ID, tick.InstrumentID, 'sp_total: ',
                      sp_total, 'bp_total: ', bp_total, '日多:', bkvol, '日空:',
                      skvol)
                if (not up_trader_flag and not last_k_line['low'] == last_k_line['high']) and tick.LastPrice > \
                        last_k_line['high'] and tick.LastPrice - last_k_line['high'] < 30 and bkvol < bk_limit:
                    # 下多单
                    print(bkvol, bk_limit)
                    up_trader_flag = True
                    order_price = tick.LastPrice
                    buy_rec.append([datetime.now(), order_price])
                    # if sell_order > 0:
                    #     td.PrepareOrder(tick.InstrumentID, B, P, sell_order, tick.LastPrice + pc_grid)
                    #     sell_order -= sell_order

                    td.PrepareOrder(tick.InstrumentID, b, k, single_volume,
                                    order_price)
                    log.info(log.printfNow() + '下空单:' + str(single_volume) +
                             ',orderprice:' + str(order_price) + 'skvol:' +
                             str(skvol) + 'sk_limit:' + str(sk_limit))

                    # td.PrepareOrder(tick.InstrumentID, s, pz, single_volume, tick.LastPrice)

                    print()
                    print(
                        '下多单', tick.InstrumentID, INVESTOR_ID,
                        str(single_volume) + ',orderprice:' +
                        str(order_price) + 'skvol:' + str(skvol) +
                        'sk_limit:' + str(sk_limit))

                    print('lastHigh:', last_k_line['high'], 'lastLow: ',
                          last_k_line['low'], 'lastPrice: ', tick.LastPrice)

                if (not down_trader_flag and not last_k_line['low'] == last_k_line['high']) and tick.LastPrice < \
                        last_k_line['low'] and (last_k_line['low'] - tick.LastPrice < 30) and skvol < sk_limit:
                    # 下空单
                    down_trader_flag = True
                    order_price = tick.LastPrice
                    # if buy_order > 0:
                    #     td.PrepareOrder(tick.InstrumentID, S, P, buy_order, tick.LastPrice - pc_grid)
                    #
                    #     buy_order -= buy_order

                    td.PrepareOrder(tick.InstrumentID, s, k, single_volume,
                                    order_price)
                    log.info(log.printfNow() + '下空单:' + str(single_volume) +
                             ',orderprice:' + str(order_price) + 'skvol:' +
                             str(skvol) + 'sk_limit:' + str(sk_limit))
                    # td.PrepareOrder(tick.InstrumentID, b, pz, single_volume, tick.LastPrice)

                    print()
                    print(
                        '下空单', tick.InstrumentID, INVESTOR_ID,
                        ', orderprice:' + str(order_price) + ', skvol:' +
                        str(skvol) + ', sk_limit:' + str(sk_limit))
                    print('lastHigh:', last_k_line['high'], 'lastLow: ',
                          last_k_line['low'], 'lastPrice: ', tick.LastPrice)

        if not q_rtn_order.empty():
            rtn_order = q_rtn_order.get()
            print(rtn_order)
            print('下单成功,请注意。。。')

        if not q_rtn_trade.empty():
            rtn_td = q_rtn_trade.get()
            print(rtn_td)
            '''
            Trade(BrokerID='0127', InvestorID='200277', InstrumentID='ni1811', OrderRef='69169', UserID='200277',
                  ExchangeID='SHFE', TradeID='      652868', Direction='0', OrderSysID='     2413585',
                  ParticipantID='0011', ClientID='01789993', TradingRole='\x00', ExchangeInstID='ni1811',
                  OffsetFlag='0', HedgeFlag='1', Price=112560.0, Volume=1, TradeDate='20180727',
                  TradeTime='23:52:48', TradeType='\x00', PriceSource='\x00', TraderID='0011c6c',
                  OrderLocalID='         684', ClearingPartID='0011', BusinessUnit='', SequenceNo=1536,
                  TradingDay='20180730', SettlementID=1, BrokerOrderSeq=2310, TradeSource='0')
            '''
            # k
            if rtn_td.Direction == B:  # 方向 多
                if rtn_td.OffsetFlag == K and rtn_td.InstrumentID == strategy_inst:  # 多单开仓成交,下平仓指令, 开盘价+30

                    buy_order += rtn_td.Volume
                    order_price = rtn_td.Price + grid

                    td.PrepareOrder(rtn_td.InstrumentID, s, pj, rtn_td.Volume,
                                    order_price)

                    print('多单建仓成交,平仓单挂单。。。')

                elif rtn_td.OffsetFlag in [
                        P, PJ, PZ
                ] and rtn_td.InstrumentID == strategy_inst:  # 平仓,
                    bp_total += rtn_td.Volume

            elif rtn_td.Direction == S:  # 方向:空
                if rtn_td.OffsetFlag == K and rtn_td.InstrumentID == strategy_inst:  # 开仓
                    # 空单建仓成交
                    sell_order += rtn_td.Volume
                    order_price = rtn_td.Price - grid
                    td.PrepareOrder(rtn_td.InstrumentID, b, pj, rtn_td.Volume,
                                    order_price)
                    print('空单建仓成交,平仓单挂单。。。')

                elif rtn_td.OffsetFlag in [
                        P, PJ, PZ
                ] and rtn_td.InstrumentID == strategy_inst:
                    sp_total += rtn_td.Volume

            print(rtn_td.TradeTime, rtn_td.InstrumentID)