Skip to content

Commit de31466

Browse files
authored
Update builder example (#66)
* Update builder example * Update builder example
1 parent 17f4959 commit de31466

7 files changed

Lines changed: 78 additions & 82 deletions

examples/01_create_limit_order.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from x10.perpetual.trading_client import PerpetualTradingClient
1212

1313
LOGGER = logging.getLogger()
14+
MARKET_NAME = ETH_USD_MARKET
1415
ENDPOINT_CONFIG = MAINNET_CONFIG
1516

1617

@@ -25,7 +26,7 @@ async def run_example():
2526
trading_client = PerpetualTradingClient(ENDPOINT_CONFIG, stark_account)
2627
markets_dict = await trading_client.markets_info.get_markets_dict()
2728

28-
market = markets_dict[ETH_USD_MARKET]
29+
market = markets_dict[MARKET_NAME]
2930
adjust_price_by_pct = get_adjust_price_by_pct(market.trading_config)
3031

3132
order_size = market.trading_config.min_order_size

examples/02_create_limit_order_with_partial_tpsl.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from x10.perpetual.trading_client import PerpetualTradingClient
1818

1919
LOGGER = logging.getLogger()
20+
MARKET_NAME = ETH_USD_MARKET
2021
ENDPOINT_CONFIG = MAINNET_CONFIG
2122

2223

@@ -31,7 +32,7 @@ async def run_example():
3132
trading_client = PerpetualTradingClient(ENDPOINT_CONFIG, stark_account)
3233
markets_dict = await trading_client.markets_info.get_markets_dict()
3334

34-
market = markets_dict[ETH_USD_MARKET]
35+
market = markets_dict[MARKET_NAME]
3536
adjust_price_by_pct = get_adjust_price_by_pct(market.trading_config)
3637

3738
order_size = market.trading_config.min_order_size

examples/03_subscribe_to_stream.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
from signal import SIGINT, SIGTERM
55

66
from examples.init_env import init_env
7+
from x10.config import ETH_USD_MARKET
78
from x10.perpetual.configuration import MAINNET_CONFIG
89
from x10.perpetual.stream_client import PerpetualStreamClient
910

1011
LOGGER = logging.getLogger()
12+
MARKET_NAME = ETH_USD_MARKET
1113
ENDPOINT_CONFIG = MAINNET_CONFIG
1214

1315

@@ -16,7 +18,7 @@ async def subscribe_to_streams(stop_event: asyncio.Event):
1618
stream_client = PerpetualStreamClient(api_url=ENDPOINT_CONFIG.stream_url)
1719

1820
async def subscribe_to_orderbook():
19-
async with stream_client.subscribe_to_orderbooks("BTC-USD") as orderbook_stream:
21+
async with stream_client.subscribe_to_orderbooks(MARKET_NAME) as orderbook_stream:
2022
while not stop_event.is_set():
2123
try:
2224
msg = await asyncio.wait_for(orderbook_stream.recv(), timeout=1)
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import logging.handlers
2+
from asyncio import run
3+
4+
from examples.init_env import init_env
5+
from examples.utils import find_order_and_cancel, get_adjust_price_by_pct
6+
from x10.config import ETH_USD_MARKET
7+
from x10.perpetual.accounts import StarkPerpetualAccount
8+
from x10.perpetual.configuration import MAINNET_CONFIG
9+
from x10.perpetual.order_object import create_order_object
10+
from x10.perpetual.orders import OrderSide, TimeInForce
11+
from x10.perpetual.trading_client import PerpetualTradingClient
12+
13+
LOGGER = logging.getLogger()
14+
MARKET_NAME = ETH_USD_MARKET
15+
ENDPOINT_CONFIG = MAINNET_CONFIG
16+
17+
18+
async def run_example():
19+
env_config = init_env()
20+
21+
assert env_config.builder_id, "X10_BUILDER_ID is not set"
22+
23+
stark_account = StarkPerpetualAccount(
24+
api_key=env_config.api_key,
25+
public_key=env_config.public_key,
26+
private_key=env_config.private_key,
27+
vault=env_config.vault_id,
28+
)
29+
trading_client = PerpetualTradingClient(ENDPOINT_CONFIG, stark_account)
30+
markets_dict = await trading_client.markets_info.get_markets_dict()
31+
fees = await trading_client.account.get_fees(market_names=[MARKET_NAME], builder_id=env_config.builder_id)
32+
builder_fee = fees.data[0].builder_fee_rate
33+
34+
market = markets_dict[ETH_USD_MARKET]
35+
adjust_price_by_pct = get_adjust_price_by_pct(market.trading_config)
36+
37+
order_size = market.trading_config.min_order_size
38+
order_price = adjust_price_by_pct(market.market_stats.bid_price, -10.0)
39+
40+
LOGGER.info("Builder: id=%s, fee=%s", env_config.builder_id, builder_fee)
41+
LOGGER.info("Creating LIMIT order object for market: %s", market.name)
42+
43+
new_order = create_order_object(
44+
account=stark_account,
45+
starknet_domain=ENDPOINT_CONFIG.starknet_domain,
46+
market=market,
47+
side=OrderSide.BUY,
48+
amount_of_synthetic=order_size,
49+
price=market.trading_config.round_price(order_price),
50+
time_in_force=TimeInForce.GTT,
51+
reduce_only=False,
52+
post_only=True,
53+
builder_id=env_config.builder_id,
54+
builder_fee=builder_fee,
55+
)
56+
57+
LOGGER.info("Placing order...")
58+
59+
placed_order = await trading_client.orders.place_order(order=new_order)
60+
61+
LOGGER.info("Order is placed: %s", placed_order.to_pretty_json())
62+
63+
await find_order_and_cancel(trading_client=trading_client, logger=LOGGER, order_id=placed_order.data.id)
64+
65+
66+
if __name__ == "__main__":
67+
run(main=run_example())

examples/builder_order_example_simple.py

Lines changed: 0 additions & 78 deletions
This file was deleted.

examples/init_env.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class EnvConfig:
1515
public_key: str | None = None
1616
private_key: str | None = None
1717
vault_id: int | None = None
18+
builder_id: int | None = None
1819

1920

2021
def init_env(require_private_api: bool = True):
@@ -28,6 +29,7 @@ def init_env(require_private_api: bool = True):
2829
public_key = os.getenv("X10_PUBLIC_KEY")
2930
private_key = os.getenv("X10_PRIVATE_KEY")
3031
vault_id = os.getenv("X10_VAULT_ID")
32+
builder_id = os.getenv("X10_BUILDER_ID")
3133

3234
if require_private_api:
3335
assert api_key, "X10_API_KEY is not set"
@@ -43,4 +45,5 @@ def init_env(require_private_api: bool = True):
4345
public_key=public_key,
4446
private_key=private_key,
4547
vault_id=int(vault_id) if vault_id else None,
48+
builder_id=int(builder_id) if builder_id else None,
4649
)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
55

66
[tool.poetry]
77
name = "x10-python-trading-starknet"
8-
version = "0.0.16"
8+
version = "0.0.17"
99
description = "Python client for X10 API"
1010
authors = ["X10 <tech@ex10.org>"]
1111
repository = "https://github.com/x10xchange/python_sdk"

0 commit comments

Comments
 (0)