Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions examples/create_partial_tpsl_order.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import logging
from asyncio import run
from decimal import Decimal

from examples.init_env import init_env
from examples.utils import find_order_and_cancel, get_adjust_price_by_pct
from x10.config import BTC_USD_MARKET
from x10.perpetual.accounts import StarkPerpetualAccount
from x10.perpetual.configuration import TESTNET_CONFIG
from x10.perpetual.order_object import OrderTpslTriggerParam, create_order_object
from x10.perpetual.orders import (
OrderPriceType,
OrderSide,
OrderTpslType,
OrderTriggerPriceType,
OrderType,
TimeInForce,
)
from x10.perpetual.trading_client import PerpetualTradingClient

LOGGER = logging.getLogger()
MARKET_NAME = BTC_USD_MARKET
ENDPOINT_CONFIG = TESTNET_CONFIG


async def run_example():
env_config = init_env()
stark_account = StarkPerpetualAccount(
api_key=env_config.api_key,
public_key=env_config.public_key,
private_key=env_config.private_key,
vault=env_config.vault_id,
)
trading_client = PerpetualTradingClient(ENDPOINT_CONFIG, stark_account)
markets_dict = await trading_client.markets_info.get_markets_dict()

market = markets_dict[MARKET_NAME]
adjust_price_by_pct = get_adjust_price_by_pct(market.trading_config)

order_size = market.trading_config.min_order_size

last_price = market.market_stats.last_price
tp_trigger_price = adjust_price_by_pct(last_price, -5)
tp_price = adjust_price_by_pct(last_price, -10)
sl_trigger_price = adjust_price_by_pct(last_price, 5)
sl_price = adjust_price_by_pct(last_price, 10)

LOGGER.info("Creating partial TPSL order object for market: %s", market.name)

new_order = create_order_object(
account=stark_account,
starknet_domain=ENDPOINT_CONFIG.starknet_domain,
market=market,
order_type=OrderType.TPSL,
side=OrderSide.SELL,
amount_of_synthetic=order_size,
price=Decimal(0),
time_in_force=TimeInForce.GTT,
reduce_only=True,
post_only=False,
tp_sl_type=OrderTpslType.ORDER,
take_profit=OrderTpslTriggerParam(
trigger_price=tp_trigger_price,
trigger_price_type=OrderTriggerPriceType.LAST,
price=tp_price,
price_type=OrderPriceType.LIMIT,
),
stop_loss=OrderTpslTriggerParam(
trigger_price=sl_trigger_price,
trigger_price_type=OrderTriggerPriceType.LAST,
price=sl_price,
price_type=OrderPriceType.LIMIT,
),
)

LOGGER.info("Placing order...")

placed_order = await trading_client.orders.place_order(order=new_order)

LOGGER.info(f"Order is placed: {placed_order.to_pretty_json()}")

await find_order_and_cancel(trading_client=trading_client, logger=LOGGER, order_id=placed_order.data.id)


if __name__ == "__main__":
run(main=run_example())
84 changes: 84 additions & 0 deletions examples/create_position_tpsl_order.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import logging
from asyncio import run
from decimal import Decimal

from examples.init_env import init_env
from examples.utils import find_order_and_cancel, get_adjust_price_by_pct
from x10.config import BTC_USD_MARKET
from x10.perpetual.accounts import StarkPerpetualAccount
from x10.perpetual.configuration import TESTNET_CONFIG
from x10.perpetual.order_object import OrderTpslTriggerParam, create_order_object
from x10.perpetual.orders import (
OrderPriceType,
OrderSide,
OrderTpslType,
OrderTriggerPriceType,
OrderType,
TimeInForce,
)
from x10.perpetual.trading_client import PerpetualTradingClient

LOGGER = logging.getLogger()
MARKET_NAME = BTC_USD_MARKET
ENDPOINT_CONFIG = TESTNET_CONFIG


async def run_example():
env_config = init_env()
stark_account = StarkPerpetualAccount(
api_key=env_config.api_key,
public_key=env_config.public_key,
private_key=env_config.private_key,
vault=env_config.vault_id,
)
trading_client = PerpetualTradingClient(ENDPOINT_CONFIG, stark_account)
markets_dict = await trading_client.markets_info.get_markets_dict()

market = markets_dict[MARKET_NAME]
adjust_price_by_pct = get_adjust_price_by_pct(market.trading_config)

last_price = market.market_stats.last_price
tp_trigger_price = adjust_price_by_pct(last_price, -5)
tp_price = adjust_price_by_pct(last_price, -10)
sl_trigger_price = adjust_price_by_pct(last_price, 5)
sl_price = adjust_price_by_pct(last_price, 10)

LOGGER.info("Creating entire position TPSL order object for market: %s", market.name)

new_order = create_order_object(
account=stark_account,
starknet_domain=ENDPOINT_CONFIG.starknet_domain,
market=market,
order_type=OrderType.TPSL,
side=OrderSide.SELL,
amount_of_synthetic=Decimal(0),
price=Decimal(0),
time_in_force=TimeInForce.GTT,
reduce_only=True,
post_only=False,
tp_sl_type=OrderTpslType.POSITION,
take_profit=OrderTpslTriggerParam(
trigger_price=tp_trigger_price,
trigger_price_type=OrderTriggerPriceType.LAST,
price=tp_price,
price_type=OrderPriceType.LIMIT,
),
stop_loss=OrderTpslTriggerParam(
trigger_price=sl_trigger_price,
trigger_price_type=OrderTriggerPriceType.LAST,
price=sl_price,
price_type=OrderPriceType.LIMIT,
),
)

LOGGER.info("Placing order...")

placed_order = await trading_client.orders.place_order(order=new_order)

LOGGER.info(f"Order is placed: {placed_order.to_pretty_json()}")

await find_order_and_cancel(trading_client=trading_client, logger=LOGGER, order_id=placed_order.data.id)


if __name__ == "__main__":
run(main=run_example())
7 changes: 6 additions & 1 deletion examples/placed_order_example_advanced.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,12 @@ async def place_order(
order_side = OrderSide.BUY if should_buy else OrderSide.SELL
market = markets_cache[ADA_USD_MARKET]
new_order = create_order_object(
stark_account, market, Decimal("100"), price, order_side, starknet_domain=TESTNET_CONFIG.starknet_domain
account=stark_account,
market=market,
amount_of_synthetic=Decimal("100"),
price=price,
side=order_side,
starknet_domain=TESTNET_CONFIG.starknet_domain,
)
order_condtions[new_order.id] = asyncio.Condition()
return new_order.id, await trading_client.orders.place_order(order=new_order)
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"

[tool.poetry]
name = "x10-python-trading-starknet"
version = "0.0.17"
version = "1.0.0"
description = "Python client for X10 API"
authors = ["X10 <tech@ex10.org>"]
repository = "https://github.com/x10xchange/python_sdk"
Expand Down
Loading
Loading