@@ -591,7 +591,7 @@ def exit_time(self) -> Optional[Union[pd.Timestamp, int]]:
591
591
@property
592
592
def is_long (self ):
593
593
"""True if the trade is long (trade size is positive)."""
594
- return self .size > 0
594
+ return self .__size > 0
595
595
596
596
@property
597
597
def is_short (self ):
@@ -608,7 +608,7 @@ def pl(self):
608
608
def pl_pct (self ):
609
609
"""Trade profit (positive) or loss (negative) in percent."""
610
610
price = self .__exit_price or self .__broker .last_price
611
- return np . sign ( self .__size ) * (price / self .__entry_price - 1 )
611
+ return copysign ( 1 , self .__size ) * (price / self .__entry_price - 1 )
612
612
613
613
@property
614
614
def value (self ):
@@ -840,14 +840,14 @@ def _process_orders(self):
840
840
841
841
# Adjust price to include commission (or bid-ask spread).
842
842
# In long positions, the adjusted price is a fraction higher, and vice versa.
843
- adjusted_price = price * (1 + ( np . sign ( order .size ) * self . _commission ))
843
+ adjusted_price = price * (1 + copysign ( self . _commission , order .size ))
844
844
845
845
# If order size was specified proportionally,
846
846
# precompute true size in units, accounting for margin and spread/commissions
847
847
size = order .size
848
848
if - 1 < size < 1 :
849
- size = np . sign ( size ) * int ((self .margin_available * self ._leverage * abs (size ))
850
- // adjusted_price )
849
+ size = copysign ( int ((self .margin_available * self ._leverage * abs (size ))
850
+ // adjusted_price ), size )
851
851
# Not enough cash/margin even for a single unit
852
852
if not size :
853
853
self .orders .remove (order )
@@ -862,7 +862,7 @@ def _process_orders(self):
862
862
for trade in list (self .trades ):
863
863
if trade .is_long == order .is_long :
864
864
continue
865
- assert np . sign ( trade .size ) + np . sign ( order .size ) == 0
865
+ assert trade .size * order .size < 0
866
866
867
867
# Order size greater than this opposite-directed existing trade,
868
868
# so it will be closed completely
@@ -909,7 +909,7 @@ def _process_orders(self):
909
909
self ._process_orders ()
910
910
911
911
def _reduce_trade (self , trade : Trade , price : float , size : float , time_index : int ):
912
- assert np . sign ( trade .size ) != np . sign ( size )
912
+ assert trade .size * size < 0
913
913
assert abs (trade .size ) >= abs (size )
914
914
915
915
size_left = trade .size + size
0 commit comments