|
|
@@ -506,7 +506,7 @@ impl Core {
|
|
|
// 记录指令触发信息
|
|
|
if order.is_not_empty() {
|
|
|
// info!("触发onOrder");
|
|
|
- self._update_local_orders(&order);
|
|
|
+ self._update_local_orders(&mut order);
|
|
|
//交易所处理订单信号
|
|
|
let mut platform_rest_fb = self.platform_rest.clone_box();
|
|
|
let mut ts = trace_stack.clone();
|
|
|
@@ -662,9 +662,11 @@ impl Core {
|
|
|
if orders.is_not_empty() {
|
|
|
let mut platform_rest_fb = self.platform_rest.clone_box();
|
|
|
// 先更新本地记录再发单。
|
|
|
- self._update_local_orders(&orders);
|
|
|
+ self._update_local_orders(&mut orders);
|
|
|
// info!("订单指令:{:?}", orders);
|
|
|
- platform_rest_fb.command_order(&mut orders, trace_stack).await;
|
|
|
+ spawn(async move {
|
|
|
+ platform_rest_fb.command_order(&mut orders, trace_stack).await;
|
|
|
+ });
|
|
|
|
|
|
// 更新中控账户相关信息
|
|
|
{
|
|
|
@@ -777,19 +779,17 @@ impl Core {
|
|
|
|
|
|
// 本地记录所有报单信息
|
|
|
// #[instrument(skip(self, orders), level="TRACE")]
|
|
|
- pub fn _update_local_orders(&mut self, orders: &OrderCommand) {
|
|
|
- let mut limits = HashMap::new();
|
|
|
- limits.extend(orders.clone().limits_open);
|
|
|
- limits.extend(orders.clone().limits_close);
|
|
|
+ pub fn _update_local_orders(&mut self, orders: &mut OrderCommand) {
|
|
|
+ orders.limits_open.extend(orders.limits_close.clone());
|
|
|
|
|
|
- if !limits.is_empty() {
|
|
|
- for j in limits.keys() {
|
|
|
+ if !orders.limits_open.is_empty() {
|
|
|
+ for j in orders.limits_open.keys() {
|
|
|
let order_info = OrderInfo {
|
|
|
symbol: self.symbol.clone(),
|
|
|
- amount: Decimal::from_str(limits.get(j).unwrap()[0].as_str()).unwrap(),
|
|
|
- side: limits.get(j).unwrap()[1].clone(),
|
|
|
- price: Decimal::from_str(limits.get(j).unwrap()[2].as_str()).unwrap(),
|
|
|
- client_id: limits.get(j).unwrap()[3].clone(),
|
|
|
+ amount: Decimal::from_str(orders.limits_open.get(j).unwrap()[0].as_str()).unwrap(),
|
|
|
+ side: orders.limits_open.get(j).unwrap()[1].clone(),
|
|
|
+ price: Decimal::from_str(orders.limits_open.get(j).unwrap()[2].as_str()).unwrap(),
|
|
|
+ client_id: orders.limits_open.get(j).unwrap()[3].clone(),
|
|
|
filled_price: Default::default(),
|
|
|
filled: Decimal::ZERO,
|
|
|
order_id: "".to_string(),
|
|
|
@@ -800,11 +800,11 @@ impl Core {
|
|
|
trace_stack: TraceStack::new(0, Instant::now()),
|
|
|
};
|
|
|
// 本地挂单表
|
|
|
- self.local_orders.insert(limits.get(j).unwrap()[3].clone(), order_info.clone());
|
|
|
+ self.local_orders.insert(orders.limits_open.get(j).unwrap()[3].clone(), order_info.clone());
|
|
|
// 本地缓存表
|
|
|
- self.local_orders_backup.insert(limits.get(j).unwrap()[3].clone(), order_info);
|
|
|
+ self.local_orders_backup.insert(orders.limits_open.get(j).unwrap()[3].clone(), order_info);
|
|
|
// 本地缓存cid表
|
|
|
- self.local_orders_backup_cid.push(limits.get(j).unwrap()[3].clone());
|
|
|
+ self.local_orders_backup_cid.push(orders.limits_open.get(j).unwrap()[3].clone());
|
|
|
}
|
|
|
}
|
|
|
if !orders.cancel.is_empty() {
|
|
|
@@ -1620,7 +1620,7 @@ pub fn run_strategy(core_arc: Arc<Mutex<Core>>) -> JoinHandle<()> {
|
|
|
if orders.is_not_empty() {
|
|
|
info!("触发onExit");
|
|
|
info!(?orders);
|
|
|
- core._update_local_orders(&orders);
|
|
|
+ core._update_local_orders(&mut orders);
|
|
|
spawn(async move {
|
|
|
let mut ts = TraceStack::new(0, Instant::now());
|
|
|
platform_rest_fb.command_order(&mut orders, &mut ts).await;
|
|
|
@@ -1647,7 +1647,7 @@ pub fn run_strategy(core_arc: Arc<Mutex<Core>>) -> JoinHandle<()> {
|
|
|
if orders.is_not_empty() {
|
|
|
info!("触发onSleep");
|
|
|
info!(?orders);
|
|
|
- core._update_local_orders(&orders);
|
|
|
+ core._update_local_orders(&mut orders);
|
|
|
spawn(async move {
|
|
|
let mut ts = TraceStack::new(0, Instant::now());
|
|
|
platform_rest_fb.command_order(&mut orders, &mut ts).await;
|