5454import velox .api .layer1 .data .SystemTextMessageType ;
5555import velox .api .layer1 .data .TradeInfo ;
5656import velox .api .layer1 .data .UserPasswordDemoLoginData ;
57+ import velox .api .layer1 .layers .utils .OrderBook ;
5758
5859@ Layer0LiveModule
5960public class Provider extends ExternalLiveBaseProvider {
@@ -268,13 +269,15 @@ private SimpleOrderSendParameters createStopLossFromParameters(SimpleOrderSendPa
268269 double ticksize = bmInstrument .getTickSize ();
269270 int offsetMultiplier = simpleParams .isBuy ? 1 : -1 ;
270271
272+ double limitPriceChecked = checkLImitPriceForBracket (simpleParams , bmInstrument );
273+
271274 SimpleOrderSendParameters stopLoss = new SimpleOrderSendParameters (
272275 simpleParams .alias ,
273276 !simpleParams .isBuy , // !
274277 simpleParams .size ,
275278 simpleParams .duration ,
276279 Double .NaN , // limitPrice
277- simpleParams . limitPrice - offsetMultiplier * simpleParams .stopLossOffset * ticksize , // stopPrice
280+ limitPriceChecked - offsetMultiplier * simpleParams .stopLossOffset * ticksize , // stopPrice
278281 simpleParams .sizeMultiplier );
279282 return stopLoss ;
280283 }
@@ -284,17 +287,29 @@ private SimpleOrderSendParameters createTakeProfitFromParameters(SimpleOrderSend
284287 BmInstrument bmInstrument = connector .getActiveInstrumentsMap ().get (symbol );
285288 double ticksize = bmInstrument .getTickSize ();
286289 int offsetMultiplier = simpleParams .isBuy ? 1 : -1 ;
290+ double limitPriceChecked = checkLImitPriceForBracket (simpleParams , bmInstrument );
287291
288292 SimpleOrderSendParameters takeProfit = new SimpleOrderSendParameters (
289293 simpleParams .alias ,
290294 !simpleParams .isBuy , // !
291295 simpleParams .size ,
292296 simpleParams .duration ,
293- simpleParams . limitPrice + offsetMultiplier * simpleParams .takeProfitOffset * ticksize ,
297+ limitPriceChecked + offsetMultiplier * simpleParams .takeProfitOffset * ticksize , // limitPrice
294298 Double .NaN , // stopPrice
295299 simpleParams .sizeMultiplier );
296300 return takeProfit ;
297301 }
302+
303+ private double checkLImitPriceForBracket (SimpleOrderSendParameters simpleParams , BmInstrument bmInstrument ){
304+ double limitPriceChecked = simpleParams .limitPrice ;
305+ if (Double .isNaN (simpleParams .limitPrice )) {
306+ OrderBook orderBook = bmInstrument .getOrderBook ();
307+ limitPriceChecked = simpleParams .isBuy ?
308+ orderBook .getBestAskPriceOrNone () * bmInstrument .getTickSize ()
309+ : orderBook .getBestBidPriceOrNone () * bmInstrument .getTickSize ();
310+ }
311+ return limitPriceChecked ;
312+ }
298313
299314 private String createOcoOrdersStringData (List <SimpleOrderSendParameters > ordersList ) {
300315 String contingencyType = "OneCancelsTheOther" ;
0 commit comments