Skip to content

Commit

Permalink
feat: add stop market example (#283)
Browse files Browse the repository at this point in the history
  • Loading branch information
samtin0x authored Nov 5, 2024
1 parent 46a2c27 commit 921c7cf
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 4 deletions.
4 changes: 2 additions & 2 deletions v4-client-py-v2/dydx_v4_client/node/chain_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ def calculate_client_metadata(order_type: OrderType) -> int:

@staticmethod
def calculate_condition_type(order_type: OrderType) -> Order.ConditionType:
if order_type in [OrderType.LIMIT, OrderType.MARKET]:
if order_type in [OrderType.LIMIT, OrderType.MARKET, OrderType.STOP_MARKET]:
return Order.ConditionType.CONDITION_TYPE_UNSPECIFIED
elif order_type in [OrderType.STOP_LIMIT, OrderType.STOP_MARKET]:
elif order_type in [OrderType.STOP_LIMIT]:
return Order.ConditionType.CONDITION_TYPE_STOP_LOSS
elif order_type in [OrderType.TAKE_PROFIT_LIMIT, OrderType.TAKE_PROFIT_MARKET]:
return Order.ConditionType.CONDITION_TYPE_TAKE_PROFIT
Expand Down
5 changes: 4 additions & 1 deletion v4-client-py-v2/dydx_v4_client/node/market.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ def calculate_quantums(self, size: float) -> int:
result = max(quantums, self.market["stepBaseQuantums"])
return result

def calculate_subticks(self, price: float) -> int:
def calculate_subticks(
self,
price: float,
) -> int:
QUOTE_QUANTUMS_ATOMIC_RESOLUTION = -6
exponent = (
self.market["atomicResolution"]
Expand Down
51 changes: 51 additions & 0 deletions v4-client-py-v2/examples/stop_market_order_example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import random

from dydx_v4_client import MAX_CLIENT_ID, OrderFlags
from v4_proto.dydxprotocol.clob.order_pb2 import Order

from dydx_v4_client.indexer.rest.constants import OrderType, OrderExecution
from dydx_v4_client.indexer.rest.indexer_client import IndexerClient
from dydx_v4_client.network import TESTNET
from dydx_v4_client.node.client import NodeClient
from dydx_v4_client.node.market import Market
from dydx_v4_client.wallet import Wallet
from tests.conftest import DYDX_TEST_MNEMONIC, TEST_ADDRESS

MARKET_ID = "ETH-USD"


async def test_place_stop_market_order():
size, trigger_price = 0.001, 1800
node = await NodeClient.connect(TESTNET.node)
indexer = IndexerClient(TESTNET.rest_indexer)

market = Market(
(await indexer.markets.get_perpetual_markets(MARKET_ID))["markets"][MARKET_ID]
)
wallet = await Wallet.from_mnemonic(node, DYDX_TEST_MNEMONIC, TEST_ADDRESS)

order_id = market.order_id(
TEST_ADDRESS, 0, random.randint(0, MAX_CLIENT_ID), OrderFlags.SHORT_TERM
)

current_block = await node.latest_block_height()
print(current_block)
new_order = market.order(
order_id=order_id,
order_type=OrderType.STOP_MARKET,
side=Order.Side.SIDE_SELL,
size=size,
price=trigger_price,
time_in_force=Order.TimeInForce.TIME_IN_FORCE_IOC,
reduce_only=False,
execution=OrderExecution.IOC,
good_til_block=current_block + 10,
)
print(new_order)
transaction = await node.place_order(
wallet=wallet,
order=new_order,
)

print(transaction)
wallet.sequence += 1
2 changes: 1 addition & 1 deletion v4-client-py-v2/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "dydx-v4-client"
version = "1.1.1"
version = "1.1.2"
description = ""
authors = [
"Saul Martin <[email protected]>",
Expand Down

0 comments on commit 921c7cf

Please sign in to comment.