Esempio n. 1
0
def positions_control(runtime):
    for symbol in ['A001.PSE', 'B001.PSE', 'A002.PSE', 'B002.PSE']:
        positions_info = runtime['positions_info'].info[symbol]
        currLongPos = positions_info['long_positions'].volume + positions_info[
            'long_positions'].locked_volume
        currShortPos = positions_info[
            'short_positions'].volume + positions_info[
                'short_positions'].locked_volume
        #//首先进行市场中性平仓
        if currLongPos - currShortPos > 100:
            response = broker_stub.new_order(
                api.TraderRequest_new_order(symbol,
                                            1,
                                            0,
                                            currLongPos - currShortPos,
                                            is_market=True))
            print(response)
            #//之后进行开平仓控制
            if currShortPos + 100 > 200:
                runtime['isOpen_' + symbol] = False
            else:
                runtime['isOpen_' + symbol] = True
        elif currShortPos - currLongPos > 100:
            response = broker_stub.new_order(
                api.TraderRequest_new_order(symbol,
                                            0,
                                            1,
                                            currShortPos - currLongPos,
                                            is_market=True))
            print(response)
            #//之后进行开平仓控制
            if currLongPos + 100 > 200:
                runtime['isOpen_' + symbol] = False
            else:
                runtime['isOpen_' + symbol] = True
Esempio n. 2
0
def trading_B002(runtime):
    """
    price_arr = np.array([[-0.15,-0.13,-0.11,-0.1,-0.07,-0.05],
                          [ 0.05, 0.07, 0.1, 0.11, 0.13, 0.15]])
    volume_arr = np.array([[10,6,2,2,4,6],
                           [6,4,2,2,6,10]])
    """
    price_arr = np.array([[-0.07, -0.05], [0.05, 0.07]])
    volume_arr = np.array([[10, 12], [12, 10]])
    while True:
        snapshot = getattr(runtime['snapshots'], 'B002.PSE')
        last_price = snapshot.last_price
        bid1 = snapshot.bid_levels[0].price
        ask1 = snapshot.ask_levels[0].price
        if runtime['net_B002.PSE'] == 1:
            buy_trm = dict(zip(price_arr[0, :] + bid1 - 0.02,
                               volume_arr[0, :]))
            sell_trm = dict(
                zip(price_arr[1, :] + bid1 - 0.02, volume_arr[1, :]))
        elif runtime['net_B002.PSE'] == -1:
            buy_trm = dict(zip(price_arr[0, :] + ask1 + 0.02,
                               volume_arr[0, :]))
            sell_trm = dict(
                zip(price_arr[1, :] + bid1 + 0.02, volume_arr[1, :]))
        else:
            buy_trm = dict(zip(price_arr[0, :] + last_price, volume_arr[0, :]))
            sell_trm = dict(zip(price_arr[1, :] + last_price,
                                volume_arr[1, :]))
        curr_buy_order_info, curr_sell_order_info = func_order_info2level(
            runtime['order_info'].info['B002.PSE'])
        #//计算订单更新
        order_to_cancel = []
        buy_new_orders, tmp = func_calc_order_delta(curr_buy_order_info,
                                                    buy_trm)
        order_to_cancel += tmp
        sell_new_orders, tmp = func_calc_order_delta(curr_sell_order_info,
                                                     sell_trm)
        order_to_cancel += tmp
        buy_new_orders = sorted(buy_new_orders,
                                key=lambda x: x[0],
                                reverse=True)
        sell_new_orders = sorted(sell_new_orders,
                                 key=lambda x: x[0],
                                 reverse=True)
        #//计算下单
        maxLen = max(len(buy_new_orders), len(sell_new_orders))
        for i in range(maxLen):
            if runtime['isOpen_B002.PSE']:
                #//开平仓控制
                try:
                    buy_new_order = buy_new_orders[i]
                    broker_stub.new_order(
                        api.TraderRequest_new_order('B002.PSE', 0, 0,
                                                    buy_new_order[1],
                                                    buy_new_order[0]))
                except:
                    pass
                try:
                    sell_new_order = sell_new_orders[i]
                    broker_stub.new_order(
                        api.TraderRequest_new_order('B002.PSE', 1, 1,
                                                    sell_new_order[1],
                                                    sell_new_order[0]))
                except:
                    pass
            else:
                try:
                    buy_new_order = buy_new_orders[i]
                    broker_stub.new_order(
                        api.TraderRequest_new_order('B002.PSE', 0, 1,
                                                    buy_new_order[1],
                                                    buy_new_order[0]))
                except:
                    pass
                try:
                    sell_new_order = sell_new_orders[i]
                    broker_stub.new_order(
                        api.TraderRequest_new_order('B002.PSE', 1, 0,
                                                    sell_new_order[1],
                                                    sell_new_order[0]))
                except:
                    pass
        #//进行撤单
        for order_id in order_to_cancel:
            broker_stub.cancel_order(api.TraderRequest_cancel_order(order_id))
        print('B002.PSE完成一次操作循环!')
        runtime['loopCount_B002.PSE'] += 1
Esempio n. 3
0
md_stub = broker_pb2_grpc.MarketDataStub(data_channel)

api.set_stub(broker_stub, md_stub)
"""
Demo: 下单
"""
TraderRequest_new_order = broker_pb2.TraderRequest(trader_id=ID,
                                                   trader_pin=PIN,
                                                   request_type=0,
                                                   order_id=0,
                                                   side=0,
                                                   symbol='A000.PSE',
                                                   volume=1,
                                                   is_market=True,
                                                   pos_type=1)
TraderRequest_new_order_test = proto_wrapper.TraderRequest_new_order(
    "A000.PSE", side=0, pos_type=0, volume=1, is_market=False, price=90)
response_new_order = broker_stub.new_order(TraderRequest_new_order_test)
print(response_new_order)
print("##########################################")
"""
Demo: 撤单
"""
TraderRequest_cancel_order = proto_wrapper.TraderRequest_cancel_order(
    order_id=tuple(response_new_order.orders.orders.keys())[0])
response_cancel_order = broker_stub.cancel_order(TraderRequest_cancel_order)
print(response_cancel_order)
print("##########################################")
"""
获取增量账户信息和完整的账户信息
"""
Esempio n. 4
0
data_stub = broker_pb2_grpc.MarketDataStub(CHANNEL_DATA)
#//创建客户端

data_stream = data_stub.subscribe(
    broker_pb2.TraderRequest(trader_id=ID, trader_pin=PIN))

api.set_stub(broker=broker_stub, data=data_stub)
api.set_stream(data_stream)

print("Set up stub used %.9f" % (time_ns() - time_now))
time_now = time_ns()

#//测试行情订阅
for i in range(1000):
    snapshot_new = data_stream.next()

print('Subscribe one snapshot used %.9f' % ((time_ns() - time_now) / 1000))
time_now = time_ns()

#//下单
for i in range(1000):
    broker_stub.new_order(api.TraderRequest_new_order('A002', 0, 0, 1, 100))

print('Place one new order used %.9f' % ((time_ns() - time_now) / 1000))
time_now = time_ns()

#//获取用户信息
for i in range(1000):
    info = broker_stub.get_trader(api.TraderRequest_get_trader_full())

print('Get my info used %.9f' % ((time_ns() - time_now) / 1000))