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
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
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("##########################################") """ 获取增量账户信息和完整的账户信息 """
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))