diff --git a/src/engine/engine/plugin.rs b/src/engine/engine/plugin.rs index e99f983..dd8574f 100644 --- a/src/engine/engine/plugin.rs +++ b/src/engine/engine/plugin.rs @@ -209,17 +209,45 @@ impl StrategyEngine { }; let order = BatchOrder { - orders: vec![OrderRequest { - asset: asset_id, - is_buy: matches!(signal.kind, Direction::Buy), - limit_px: signal.price.0, - sz: signal.size, - reduce_only: false, - order_type: OrderTypePlacement::Limit { - tif: TimeInForce::Gtc, + orders: vec![ + OrderRequest { + asset: asset_id, + is_buy: matches!(signal.kind, Direction::Buy), + limit_px: signal.price.0, + sz: signal.size, + reduce_only: false, + order_type: OrderTypePlacement::Limit { + tif: TimeInForce::Gtc, + }, + cloid: Default::default(), }, - cloid: Default::default(), - }], + OrderRequest { + asset: asset_id, + is_buy: matches!(signal.kind, Direction::Buy), + limit_px: signal.price.0, + sz: signal.size, + reduce_only: true, + order_type: OrderTypePlacement::Trigger { + is_market: true, + trigger_px: signal.take_profit.0, + tpsl: hypercore::TpSl::Tp, + }, + cloid: Default::default(), + }, + OrderRequest { + asset: asset_id, + is_buy: matches!(signal.kind, Direction::Buy), + limit_px: signal.price.0, + sz: signal.size, + reduce_only: true, + order_type: OrderTypePlacement::Trigger { + is_market: true, + trigger_px: signal.stop_loss.0, + tpsl: hypercore::TpSl::Sl, + }, + cloid: Default::default(), + }, + ], grouping: hypercore::OrderGrouping::Na, builder: None, };