def test_place_contingent_oco_order(fake_request_sender):
    order0 = Order(account_info=AccountInfo(account_id=100),
                   client_order_id=str(8675309),
                   client_order_link_id='a123',
                   symbol='BTC/USD',
                   side=Side.buy.name,
                   order_type=OrderType.limit.name,
                   quantity=1.1,
                   price=6000.01,
                   stop_price=0.0,
                   time_in_force=TimeInForce.gtc.name,
                   expire_at=0.0,
                   leverage_type=LeverageType.none.name)
    order1 = Order(account_info=AccountInfo(account_id=100),
                   client_order_id=str(8675310),
                   client_order_link_id='a124',
                   symbol='BTC/USD',
                   side=Side.sell.name,
                   order_type=OrderType.limit.name,
                   quantity=1.1,
                   price=6200.11,
                   stop_price=0.0,
                   time_in_force=TimeInForce.gtc.name,
                   expire_at=0.0,
                   leverage_type=LeverageType.none.name)

    contingent_order = OCO(orders=[order0, order1])
    contingent_order_capnp = fake_request_sender.place_contingent_order(
        request_header=__FAKE_REQUEST_HEADER,
        contingent_order=contingent_order)

    assert type(
        contingent_order_capnp) == capnp.lib.capnp._DynamicStructBuilder
    oco_order0 = contingent_order_capnp.type.oco.orders[0]
    assert oco_order0.accountInfo.accountID == 100
    assert oco_order0.symbol == 'BTC/USD'
    assert oco_order0.side == 'buy'
    assert oco_order0.orderType == 'limit'
    assert oco_order0.quantity == 1.1
    assert oco_order0.price == 6000.01
    assert oco_order0.stopPrice == 0.0
    assert oco_order0.timeInForce == 'gtc'
    assert oco_order0.expireAt == 0.0

    oco_order1 = contingent_order_capnp.type.oco.orders[1]
    assert oco_order1.accountInfo.accountID == 100
    assert oco_order1.symbol == 'BTC/USD'
    assert oco_order1.side == 'sell'
    assert oco_order1.orderType == 'limit'
    assert oco_order1.quantity == 1.1
    assert oco_order1.price == 6200.11
    assert oco_order1.stopPrice == 0.0
    assert oco_order1.timeInForce == 'gtc'
    assert oco_order1.expireAt == 0.0
def test_place_order_margin_custom(fake_request_sender):
    custom_margin_order = Order(account_info=AccountInfo(account_id=100),
                                client_order_id=str(9876),
                                client_order_link_id='a123',
                                symbol='BTC/USD',
                                side=Side.buy.name,
                                order_type=OrderType.market.name,
                                quantity=1.1,
                                price=0.0,
                                time_in_force=TimeInForce.gtc.name,
                                leverage_type=LeverageType.custom.name,
                                leverage=2.0)
    # custom margin
    order = fake_request_sender.place_order(
        request_header=__FAKE_REQUEST_HEADER, order=custom_margin_order)
    assert type(order) == capnp.lib.capnp._DynamicStructBuilder
    assert order.accountInfo.accountID == 100
    assert order.symbol == 'BTC/USD'
    assert order.side == 'buy'
    assert order.orderType == 'market'
    assert order.quantity == 1.1
    assert order.price == 0.0
    assert order.timeInForce == 'gtc'
    assert order.leverageType == msgs_capnp.LeverageType.custom
    assert order.leverage == 2.0
def test_place_order(fake_request_sender):
    order = Order(account_info=AccountInfo(account_id=100),
                  client_order_id=str(8675309),
                  client_order_link_id='a123',
                  symbol='BTC/USD',
                  side=Side.buy.name,
                  order_type=OrderType.limit.name,
                  quantity=1.1,
                  price=6000.01,
                  stop_price=0.0,
                  time_in_force=TimeInForce.gtc.name,
                  expire_at=0.0,
                  leverage_type=LeverageType.none.name)
    order = fake_request_sender.place_order(
        request_header=__FAKE_REQUEST_HEADER, order=order)
    assert type(order) == capnp.lib.capnp._DynamicStructBuilder
    assert order.accountInfo.accountID == 100
    assert order.symbol == 'BTC/USD'
    assert order.side == 'buy'
    assert order.orderType == 'limit'
    assert order.quantity == 1.1
    assert order.price == 6000.01
    assert order.stopPrice == 0.0
    assert order.timeInForce == 'gtc'
    assert order.expireAt == 0.0
예제 #4
0
def test_place_order_margin_default(fake_request_sender):
    default_margin_order = Order(
        account_info=AccountInfo(account_id=100),
        client_order_id=str(9876),
        client_order_link_id='a123',
        symbol='BTC/USD',
        side=Side.buy.name,
        order_type=OrderType.market.name,
        quantity=1.1,
        price=0.0,
        stop_price=0.0,
        time_in_force=TimeInForce.gtc.name,
        expire_at=0.0,
        leverage_type=LeverageType.exchangeDefault.name)
    # exchange default margin
    order = fake_request_sender.place_order(order=default_margin_order)
    assert type(order) == capnp.lib.capnp._DynamicStructBuilder
    assert order.accountInfo.accountID == 100
    assert order.symbol == 'BTC/USD'
    assert order.side == 'buy'
    assert order.orderType == 'market'
    assert order.quantity == 1.1
    assert order.price == 0.0
    assert order.timeInForce == 'gtc'
    assert order.leverageType == msgs_capnp.LeverageType.exchangeDefault
    assert order.leverage == 0.0
    assert order.stopPrice == 0.0
    assert order.expireAt == 0.0
def convert_fpg_orders_to_omg_orders(fpg_order: dict,
                                     accounts: Dict[str, AccountInfo]):
    symbol = fpg_order.get('base') + '/' + fpg_order.get('quote')
    exchange = fpg_order.get('exchangeName').lower()
    quantity = float(fpg_order.get('expectedSize'))
    price = float(fpg_order.get('expectedPrice'))
    side = fpg_order.get('orderType').lower()
    client_order_id = str(fpg_order.get('name').split('/')[-1])
    return Order(
        account_info=accounts.get(exchange),
        client_order_id=client_order_id,
        symbol=symbol,
        side=side,
        order_type=OrderType.limit.name,
        quantity=quantity,
        price=price
    )
예제 #6
0
def main():
    client_id = 1
    sender_comp_id = str(uuid.uuid4())
    omega_connection = configure_single_client_omega_connection(
        OMEGA_ENDPOINT,
        OMEGA_SERVER_KEY,
        client_id,
        sender_comp_id,
        PrintingResponseHandler())

    omega_connection.start()
    omega_connection.wait_until_running()

    account_id = 2
    api_key = "api_key"
    secret_key = "secret_key"
    passphrase = "passphrase"
    credentials = AccountCredentials(AccountInfo(account_id), api_key,
                                     secret_key, passphrase)

    omega_connection.logon([credentials])
    omega_connection.send_heartbeat()
    order = Order(
        account_info=AccountInfo(account_id=account_id),
        # ID generated by client to keep track of the order
        client_order_id=str(123),
        client_order_link_id='test',  # A str to identify and group orders
        symbol='ETH/USD',
        side=Side.sell.name,
        order_type=OrderType.market.name,  # Optional param
        quantity=1.1,
        price=0.0,
        time_in_force=TimeInForce.gtc.name,
        leverage_type=LeverageType.none.name
    )
    omega_connection.place_order(order)
    time.sleep(2)
    omega_connection.logoff()
    time.sleep(2)
    omega_connection.cleanup()
def test_place_contingent_opo_batch_order(fake_request_sender):
    order0 = Order(account_info=AccountInfo(account_id=100),
                   client_order_id=str(8675309),
                   client_order_link_id='a123',
                   symbol='BTC/USD',
                   side=Side.buy.name,
                   order_type=OrderType.limit.name,
                   quantity=1.1,
                   price=6000.01,
                   stop_price=0.0,
                   time_in_force=TimeInForce.gtc.name,
                   expire_at=0.0,
                   leverage_type=LeverageType.none.name)
    order10 = Order(account_info=AccountInfo(account_id=100),
                    client_order_id=str(8675310),
                    client_order_link_id='a124',
                    symbol='BTC/USD',
                    side=Side.buy.name,
                    order_type=OrderType.limit.name,
                    quantity=1.1,
                    price=5910.11,
                    stop_price=0.0,
                    time_in_force=TimeInForce.gtc.name,
                    expire_at=0.0,
                    leverage_type=LeverageType.none.name)
    order11 = Order(account_info=AccountInfo(account_id=100),
                    client_order_id=str(8675310),
                    client_order_link_id='a125',
                    symbol='BTC/USD',
                    side=Side.buy.name,
                    order_type=OrderType.limit.name,
                    quantity=1.1,
                    price=5900.11,
                    stop_price=0.0,
                    time_in_force=TimeInForce.gtc.name,
                    expire_at=0.0,
                    leverage_type=LeverageType.none.name)

    contingent_order = OPO(primary=order0,
                           secondary=Batch(orders=[order10, order11]))
    contingent_order_capnp = fake_request_sender.place_contingent_order(
        request_header=__FAKE_REQUEST_HEADER,
        contingent_order=contingent_order)

    assert type(
        contingent_order_capnp) == capnp.lib.capnp._DynamicStructBuilder

    primary_opo = contingent_order_capnp.type.opo.primary
    assert primary_opo.accountInfo.accountID == 100
    assert primary_opo.symbol == 'BTC/USD'
    assert primary_opo.side == 'buy'
    assert primary_opo.orderType == 'limit'
    assert primary_opo.quantity == 1.1
    assert primary_opo.price == 6000.01
    assert primary_opo.stopPrice == 0.0
    assert primary_opo.timeInForce == 'gtc'
    assert primary_opo.expireAt == 0.0

    batch_order0 = contingent_order_capnp.type.opo.secondary.batch[0]
    assert batch_order0.accountInfo.accountID == 100
    assert batch_order0.symbol == 'BTC/USD'
    assert batch_order0.side == 'buy'
    assert batch_order0.orderType == 'limit'
    assert batch_order0.quantity == 1.1
    assert batch_order0.price == 5910.11
    assert batch_order0.stopPrice == 0.0
    assert batch_order0.timeInForce == 'gtc'
    assert batch_order0.expireAt == 0.0

    batch_order1 = contingent_order_capnp.type.opo.secondary.batch[1]
    assert batch_order1.accountInfo.accountID == 100
    assert batch_order1.symbol == 'BTC/USD'
    assert batch_order1.side == 'buy'
    assert batch_order1.orderType == 'limit'
    assert batch_order1.quantity == 1.1
    assert batch_order1.price == 5900.11
    assert batch_order1.stopPrice == 0.0
    assert batch_order1.timeInForce == 'gtc'
    assert batch_order1.expireAt == 0.0
예제 #8
0

auth = FPGAuth(API_KEY, API_SECRET)

# Hit an error trying to fetch a nonexistent order
api_url = 'https://fund3-staging.floating.group/v1/orders/foo'
r = requests.get(api_url, auth=auth)
print(r.status_code)
print(r.json())

# successful usage of create_SOR_order function
orders, status_code, error_message = create_SOR_order(
    order=Order(
        account_info=AccountInfo(account_id=100),   # ignored, junk
        client_order_id='vnuiebwe',     # ignored, junk
        symbol='BTC/USD',
        side=Side.buy.name,
        order_type=OrderType.limit.name,
        quantity=6.,
        price=5000.),
    accounts={Exchange.gemini.name: AccountInfo(account_id=200),
              Exchange.kraken.name: AccountInfo(account_id=201)},
    auth=auth
)
for order in orders:
    print('order:', order)
print('status_code', status_code)
print('error_message', error_message)


# unsuccessful usage of create_SOR_order function (itBit is unsupported)
# error code 400