@@ -554,16 +554,17 @@ async def test_create_and_cancel_limit_orders(self):
554554
555555 async def inner_test_create_and_cancel_limit_orders (self , symbol = None , settlement_currency = None , ** kwargs ):
556556 symbol = symbol or self .SYMBOL
557+ side = trading_enums .TradeOrderSide .BUY
557558 # # DEBUG tools p1, uncomment to create specific orders
558559 # symbol = "ADA/USDT"
559560 # # end debug tools
560561 market_status = self .exchange_manager .exchange .get_market_status (symbol )
561562 exchange_data = self .get_exchange_data (symbol = symbol )
562563 settlement_currency = settlement_currency or self .SETTLEMENT_CURRENCY
563- price = self .get_order_price (await self .get_price (symbol = symbol ), False , symbol = symbol )
564+ price = self .get_order_price (await self .get_price (symbol = symbol ), side == trading_enums . TradeOrderSide . SELL , symbol = symbol )
564565 # 1. try with "normal" order size
565566 default_size = self .get_order_size (
566- await self .get_portfolio (), price , symbol = symbol , settlement_currency = settlement_currency
567+ await self .get_portfolio (), price , symbol = symbol , settlement_currency = ( settlement_currency if side == trading_enums . TradeOrderSide . BUY else self . ORDER_CURRENCY )
567568 )
568569 # self.check_order_size_and_price(default_size, price, symbol=symbol, allow_empty_size=self.CHECK_EMPTY_ACCOUNT)
569570 enable_min_size_check = False
@@ -604,26 +605,27 @@ async def inner_test_create_and_cancel_limit_orders(self, symbol=None, settlemen
604605 assert cancelled_orders == []
605606 return
606607 try :
607- buy_limit = await self .create_limit_order (price , size , trading_enums . TradeOrderSide . BUY , symbol = symbol )
608+ limit_order = await self .create_limit_order (price , size , side , symbol = symbol )
608609 except trading_errors .AuthenticationError as err :
609610 raise trading_errors .AuthenticationError (
610611 f"inner_test_create_and_cancel_limit_orders#create_limit_order { err } "
611612 ) from err
612613 try :
613- self .check_created_limit_order (buy_limit , price , size , trading_enums . TradeOrderSide . BUY )
614- assert await self .order_in_open_orders (open_orders , buy_limit , symbol = symbol )
615- await self .check_can_get_order (buy_limit )
614+ self .check_created_limit_order (limit_order , price , size , side )
615+ assert await self .order_in_open_orders (open_orders , limit_order , symbol = symbol )
616+ await self .check_can_get_order (limit_order )
616617 # assert free portfolio amount is smaller than total amount
617618 balance = await self .get_portfolio ()
618- assert balance [settlement_currency ][trading_constants .CONFIG_PORTFOLIO_FREE ] < \
619- balance [settlement_currency ][trading_constants .CONFIG_PORTFOLIO_TOTAL ], (
620- f"FALSE: { balance [settlement_currency ][trading_constants .CONFIG_PORTFOLIO_FREE ]} < { balance [settlement_currency ][trading_constants .CONFIG_PORTFOLIO_TOTAL ]} "
619+ locked_currency = settlement_currency if side == trading_enums .TradeOrderSide .BUY else self .ORDER_CURRENCY
620+ assert balance [locked_currency ][trading_constants .CONFIG_PORTFOLIO_FREE ] < \
621+ balance [locked_currency ][trading_constants .CONFIG_PORTFOLIO_TOTAL ], (
622+ f"FALSE: { balance [locked_currency ][trading_constants .CONFIG_PORTFOLIO_FREE ]} < { balance [locked_currency ][trading_constants .CONFIG_PORTFOLIO_TOTAL ]} "
621623 )
622624 finally :
623625 # don't leave buy_limit as open order
624- await self .cancel_order (buy_limit )
625- assert await self .order_not_in_open_orders (open_orders , buy_limit , symbol = symbol )
626- assert await self .order_in_cancelled_orders (cancelled_orders , buy_limit , symbol = symbol )
626+ await self .cancel_order (limit_order )
627+ assert await self .order_not_in_open_orders (open_orders , limit_order , symbol = symbol )
628+ assert await self .order_in_cancelled_orders (cancelled_orders , limit_order , symbol = symbol )
627629
628630 async def inner_test_cancel_uncancellable_order (self ):
629631 if self .UNCANCELLABLE_ORDER_ID_SYMBOL_TYPE :
@@ -636,39 +638,44 @@ async def test_create_and_fill_market_orders(self):
636638 await self .inner_test_create_and_fill_market_orders ()
637639
638640 async def inner_test_create_and_fill_market_orders (self ):
641+ side = trading_enums .TradeOrderSide .BUY
639642 portfolio = await self .get_portfolio ()
640643 current_price = await self .get_price ()
641- price = self .get_order_price (current_price , False , price_diff = 0 )
642- size = self .get_order_size (portfolio , price )
644+ order_currency = self .ORDER_CURRENCY if side == trading_enums .TradeOrderSide .SELL else self .SETTLEMENT_CURRENCY
645+ price = self .get_order_price (current_price , side == trading_enums .TradeOrderSide .SELL , price_diff = 0 )
646+ size = self .get_order_size (portfolio , price , settlement_currency = order_currency )
643647 if self .CHECK_EMPTY_ACCOUNT :
644648 assert size == trading_constants .ZERO
645649 return
646- buy_market = await self .create_market_order (current_price , size , trading_enums . TradeOrderSide . BUY )
650+ first_market_order = await self .create_market_order (current_price , size , side )
647651 post_buy_portfolio = {}
648652 try :
649- self .check_created_market_order (buy_market , size , trading_enums . TradeOrderSide . BUY )
650- filled_order = await self .wait_for_fill (buy_market )
653+ self .check_created_market_order (first_market_order , size , side )
654+ filled_order = await self .wait_for_fill (first_market_order )
651655 parsed_filled_order = personal_data .create_order_instance_from_raw (
652656 self .exchange_manager .trader ,
653657 filled_order
654658 )
655- self ._check_order (parsed_filled_order , size , trading_enums . TradeOrderSide . BUY )
659+ self ._check_order (parsed_filled_order , size , side )
656660 await self .wait_for_order_exchange_id_in_trades (parsed_filled_order .exchange_order_id )
657661 await self .check_require_order_fees_from_trades (
658662 filled_order [trading_enums .ExchangeConstantsOrderColumns .EXCHANGE_ID .value ]
659663 )
660664 self .check_raw_closed_orders ([filled_order ])
661665 post_buy_portfolio = await self .get_portfolio ()
662- self .check_portfolio_changed (portfolio , post_buy_portfolio , False )
666+ portfolio_increased = side == trading_enums .TradeOrderSide .SELL
667+ self .check_portfolio_changed (portfolio , post_buy_portfolio , portfolio_increased )
663668 finally :
664- sell_size = self .get_sell_size_from_buy_order (buy_market )
669+ mirror_size = self .get_sell_size_from_buy_order (first_market_order )
665670 # sell: reset portfolio
666- sell_market = await self .create_market_order (current_price , sell_size , trading_enums .TradeOrderSide .SELL )
667- self .check_created_market_order (sell_market , sell_size , trading_enums .TradeOrderSide .SELL )
668- await self .wait_for_fill (sell_market )
671+ other_side = trading_enums .TradeOrderSide .SELL if side == trading_enums .TradeOrderSide .BUY else trading_enums .TradeOrderSide .BUY
672+ second_market_order = await self .create_market_order (current_price , mirror_size , other_side )
673+ self .check_created_market_order (second_market_order , mirror_size , other_side )
674+ await self .wait_for_fill (second_market_order )
669675 post_sell_portfolio = await self .get_portfolio ()
670676 if post_buy_portfolio :
671- self .check_portfolio_changed (post_buy_portfolio , post_sell_portfolio , True )
677+ portfolio_increased = other_side == trading_enums .TradeOrderSide .SELL
678+ self .check_portfolio_changed (post_buy_portfolio , post_sell_portfolio , portfolio_increased )
672679
673680 async def check_require_order_fees_from_trades (self , filled_exchange_order_id , symbol = None ):
674681 symbol = symbol or self .SYMBOL
@@ -771,8 +778,8 @@ async def inner_test_edit_limit_order(self):
771778 sell_limit = await self .create_limit_order (price , size , trading_enums .TradeOrderSide .SELL )
772779 self .check_created_limit_order (sell_limit , price , size , trading_enums .TradeOrderSide .SELL )
773780 assert await self .order_in_open_orders (open_orders , sell_limit )
774- edited_price = self .get_order_price (current_price , True , price_diff = 2 * self .ORDER_PRICE_DIFF )
775- edited_size = self .get_order_size (portfolio , price , order_size = 2 * self .ORDER_SIZE , settlement_currency = self ._get_edit_order_settlement_currency ())
781+ edited_price = self .get_order_price (current_price , True , price_diff = 1.3 * self .ORDER_PRICE_DIFF )
782+ edited_size = self .get_order_size (portfolio , price , order_size = 1.3 * self .ORDER_SIZE , settlement_currency = self ._get_edit_order_settlement_currency ())
776783 sell_limit = await self .edit_order (sell_limit , edited_price = edited_price , edited_quantity = edited_size )
777784 await self .wait_for_edit (sell_limit , edited_size )
778785 sell_limit = await self .get_order (sell_limit .exchange_order_id , sell_limit .symbol )
@@ -800,8 +807,8 @@ async def inner_test_edit_stop_order(self):
800807 )
801808 self .check_created_stop_order (stop_loss , price , size , trading_enums .TradeOrderSide .SELL )
802809 assert await self .order_in_open_orders (open_orders , stop_loss )
803- edited_price = self .get_order_price (current_price , False , price_diff = 2 * self .ORDER_PRICE_DIFF )
804- edited_size = self .get_order_size (portfolio , price , order_size = 2 * self .ORDER_SIZE , settlement_currency = self ._get_edit_order_settlement_currency ())
810+ edited_price = self .get_order_price (current_price , False , price_diff = 1.3 * self .ORDER_PRICE_DIFF )
811+ edited_size = self .get_order_size (portfolio , price , order_size = 1.3 * self .ORDER_SIZE , settlement_currency = self ._get_edit_order_settlement_currency ())
805812 stop_loss = await self .edit_order (stop_loss , edited_price = edited_price , edited_quantity = edited_size )
806813 await self .wait_for_edit (stop_loss , edited_size )
807814 stop_loss = await self .get_order (stop_loss .exchange_order_id , stop_loss .symbol )
0 commit comments