@@ -161,22 +161,28 @@ def purchase_new_stocks(self):
161161 self ._shipane_client .purchase_new_stocks ()
162162
163163 def execute (self , order = None , ** kwargs ):
164- if order is not None :
165- self . _execute ( order )
164+ if order is None :
165+ common_order = Order . from_e_order ( ** kwargs )
166166 else :
167- self ._shipane_client .execute (** kwargs )
167+ common_order = self ._normalize_order (order )
168+
169+ self ._logger .info ("[实盘易] 跟单:" + str (common_order ))
170+ if not self ._should_execute (common_order ):
171+ return
172+
173+ try :
174+ actual_order = self ._execute (common_order )
175+ return actual_order
176+ except Exception :
177+ self ._logger .exception ("[实盘易] 下单异常" )
168178
169179 def cancel (self , order ):
170180 if order is None :
171181 self ._logger .info ('[实盘易] 委托为空,忽略撤单请求' )
172182 return
173183
174184 try :
175- order_id = order if isinstance (order , int ) else order .order_id
176- if order_id in self ._order_id_map :
177- self ._shipane_client .cancel (order_id = self ._order_id_map [order_id ])
178- else :
179- self ._logger .warning ('[实盘易] 未找到对应的委托编号' )
185+ self ._cancel (order )
180186 except :
181187 self ._logger .exception ("[实盘易] 撤单异常" )
182188
@@ -219,33 +225,46 @@ def _sync_config(self):
219225 return self ._config ['sync' ]
220226
221227 def _execute (self , order ):
222- self ._logger .info ("[实盘易] 跟单:" + str (order ))
223-
224- if not self ._should_execute (order ):
225- return
228+ common_order = self ._normalize_order (order )
229+ e_order = common_order .to_e_order ()
230+ actual_order = self ._shipane_client .execute (** e_order )
231+ self ._order_id_map [common_order .id ] = actual_order ['id' ]
232+ return actual_order
233+
234+ def _cancel (self , order ):
235+ if isinstance (order , int ):
236+ quant_order_id = order
237+ else :
238+ common_order = self ._normalize_order (order )
239+ quant_order_id = common_order .id
226240
227241 try :
228- e_order = self ._strategy_context .convert_order (order )
229- actual_order = self ._shipane_client .execute (** e_order )
230- self ._order_id_map [order .order_id ] = actual_order ['id' ]
231- return actual_order
232- except :
233- self ._logger .exception ("[实盘易] 下单异常" )
242+ order_id = self ._order_id_map .pop (quant_order_id )
243+ self ._shipane_client .cancel (order_id = order_id )
244+ except KeyError :
245+ self ._logger .warning ('[实盘易] 未找到对应的委托编号' )
246+
247+ def _normalize_order (self , order ):
248+ if isinstance (order , Order ):
249+ common_order = order
250+ else :
251+ common_order = self ._strategy_context .convert_order (order )
252+ return common_order
234253
235- def _should_execute (self , order ):
254+ def _should_execute (self , common_order ):
236255 if self ._strategy_context .is_backtest ():
237256 self ._logger .info ("[实盘易] 当前为回测环境,忽略下单请求" )
238257 return False
239- if order is None :
258+ if common_order is None :
240259 self ._logger .info ('[实盘易] 委托为空,忽略下单请求' )
241260 return False
242- if self ._is_expired (order ):
261+ if self ._is_expired (common_order ):
243262 self ._logger .info ('[实盘易] 委托已过期,忽略下单请求' )
244263 return False
245264 return True
246265
247- def _is_expired (self , order ):
248- return order .add_time < self ._expire_before
266+ def _is_expired (self , common_order ):
267+ return common_order .add_time < self ._expire_before
249268
250269 def _pre_check (self ):
251270 if not self ._sync_config ['enabled' ]:
@@ -308,8 +327,6 @@ def _execute_order(self, order):
308327 return
309328
310329 e_order = order .to_e_order ()
311- e_order ['type' ] = 'MARKET'
312- e_order ['priceType' ] = 4
313330 self ._shipane_client .execute (** e_order )
314331 except :
315332 self ._logger .exception ("[%s] 客户端下单失败" , self .id )
0 commit comments