Skip to content

Commit 220531c

Browse files
fix: Bracket MKT orders work as expected
1 parent ce2e050 commit 220531c

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

  • bitmex-adapter/src/com/bookmap/plugins/layer0/bitmex

bitmex-adapter/src/com/bookmap/plugins/layer0/bitmex/Provider.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import velox.api.layer1.data.SystemTextMessageType;
5555
import velox.api.layer1.data.TradeInfo;
5656
import velox.api.layer1.data.UserPasswordDemoLoginData;
57+
import velox.api.layer1.layers.utils.OrderBook;
5758

5859
@Layer0LiveModule
5960
public 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

Comments
 (0)