@@ -68,22 +68,24 @@ def adjust_stoploss_price(self, current_price=None):
68
68
completed_targets = [o for o in self .trade .exit .get_completed_targets ()]
69
69
has_completed_targets = len (completed_targets ) > 0
70
70
71
+ #if target has its own stop-loss set
71
72
if has_completed_targets and completed_targets [- 1 ].has_custom_stop ():
72
73
# sort by order value
73
74
self .current_stop_loss = completed_targets [- 1 ].sl
74
75
self .logInfo ('Assigning Stop Loss from the Target: {}' .format (completed_targets [- 1 ]))
75
76
return
76
77
77
- if current_price is None :
78
- self .current_stop_loss = self .trade .sl_settings .last_stoploss if self .trade .sl_settings .last_stoploss != 0 \
79
- else self .initial_sl ().price
80
- return
81
-
82
- if not has_completed_targets :
83
- return
78
+ if not self .trade .sl_settings .is_trailing ():
79
+ # if that's not a trailing target
80
+ if current_price is None :
81
+ self .current_stop_loss = self .trade .sl_settings .last_stoploss if self .trade .sl_settings .last_stoploss != 0 \
82
+ else self .initial_sl ().price
83
+ return
84
+ else :
85
+ # if that's a trailing target, should be triggered only after at least one exit target completed
86
+ if not has_completed_targets :
87
+ return
84
88
85
- # expected_stop_loss = 0
86
- if self .trade .sl_settings .is_trailing ():
87
89
trialing_val = self .trade .sl_settings .val .get_val (current_price )
88
90
expected_stop_loss = current_price + (- 1 if self .trade .is_sell () else 1 ) * trialing_val
89
91
@@ -136,37 +138,40 @@ def set_stoploss_order(self):
136
138
# pass
137
139
138
140
try :
139
- if self .simulate :
140
- order = self .fx .create_test_stop_order (self .symbol (), self .trade_side ().name , self .current_stop_loss , 50 )
141
- order ['orderId' ] = 2333123
142
- else :
143
- self .cancel_all_orders ()
144
- AccountBalances ().update_balances (self .fx .get_all_balances_dict ())
141
+ # if self.simulate:
142
+ # order = self.fx.create_test_stop_order(self.symbol(), self.trade_side().name, self.current_stop_loss, 50)
143
+ # order['orderId'] = 2333123
144
+ # else:
145
+ self .cancel_all_orders ()
146
+ AccountBalances ().update_balances (self .fx .get_all_balances_dict ())
147
+
148
+ price = self .exchange_info .adjust_price (self .get_sl_limit_price ())
149
+ bal = self .trade .get_cap (self .get_balance_for_side ().avail )
145
150
146
- price = self .exchange_info .adjust_price (self .get_sl_limit_price ())
147
- bal = self .trade .get_cap (self .get_balance_for_side ().avail )
148
-
149
- bal = round (bal / price , 8 ) if self .trade_side ().is_buy () else bal
150
-
151
- volume = self .initial_sl ().vol .get_val (bal )
152
- # stop_trigger
153
- try :
154
- order = self .fx .create_stop_order (
155
- sym = self .symbol (),
156
- side = self .trade_side ().name ,
157
- stop_price = self .exchange_info .adjust_price (self .current_stop_loss ),
158
- price = price ,
159
- volume = self .exchange_info .adjust_quanity (volume )
160
- )
161
- except BinanceAPIException as sl_exception :
162
- if sl_exception .message .lower ().find ('order would trigger immediately' ) > - 1 :
163
- order = self .fx .create_makret_order (self .symbol (),
164
- self .trade_side ().name ,
165
- self .exchange_info .adjust_quanity (volume ))
166
- else :
167
- raise
151
+ bal = round (bal / price , 8 ) if self .trade_side ().is_buy () else bal
168
152
153
+ volume = self .exchange_info .adjust_quanity (self .initial_sl ().vol .get_val (bal ))
154
+ # stop_trigger
155
+ try :
156
+ order = self .fx .create_stop_order (
157
+ sym = self .symbol (),
158
+ side = self .trade_side ().name ,
159
+ stop_price = self .exchange_info .adjust_price (self .current_stop_loss ),
160
+ price = price ,
161
+ volume = volume
162
+ )
163
+
164
+ except BinanceAPIException as sl_exception :
165
+ if sl_exception .message .lower ().find ('order would trigger immediately' ) > - 1 :
166
+ order = self .fx .create_makret_order (self .symbol (),
167
+ self .trade_side ().name ,
168
+ volume )
169
+ else :
170
+ raise
171
+
172
+ self .trade .sl_settings .initial_target .calculated_volume = volume
169
173
self .trade .sl_settings .initial_target .set_active (order ['orderId' ])
174
+
170
175
self .trigger_target_updated ()
171
176
self .logInfo ('Setting stop loss order: {:.08f}:{:.08f}' .format (
172
177
self .exchange_info .adjust_price (self .current_stop_loss ),
0 commit comments