The article describes how to create a close market order.
Step 1: Create a CloseOrderFactory function
CloseOrderFactory Hide
typescriptjavascriptclass CloseOrderFactory { static create(manager, tradeId, amount) { return manager.getRequestFactory().createCloseMarketOrderRequestBuilder() .setTradeId(tradeId) .setAmount(amount) .setRateRange(10) .setTimeInForce('IOC') .setCustomId('custom-id-close') .build(); } }
See also getRequestFactory, createCloseMarketOrderRequestBuilder, CloseMarketOrderRequestBuilder
Step 2: Then add action to the Close Market Order.
Add action Hide
typescriptjavascriptclass PlaceCloseOrderAction { private session: FXConnectLite.IFXConnectLiteSession; constructor(session: FXConnectLite.IFXConnectLiteSession) { this.session = session; } execute(tradeId) { Printer.print(`Place close market order...`) let ordersManager = this.session.getOrdersManager(); let openPositionManager = this.session.getOpenPositionsManager(); let openPosition = openPositionManager.getOpenPosition(tradeId); let request = CloseOrderFactory.create(ordersManager, tradeId, openPosition.getAmount()); ordersManager.createCloseMarketOrder(request); } }
See also IOrdersManager,IOpenPositionsManager, createCloseMarketOrder
This action can be used in the OpenPositionsChangeListener to see when changes occur:
Use this action Hide
typescriptjavascriptlet openPositionChangeListener = new OpenPositionChangeListener(openPositionManager, new PlaceCloseOrderAction(session));
Below is an example of code for Listener:
Code for Listener Hide
typescriptjavascriptclass OpenPositionChangeListener implements FXConnectLite.IOpenPositionChangeListener { private openPositionsManager: FXConnectLite.IOpenPositionsManager; private placeCloseOrderAction: PlaceCloseOrderAction; constructor(openPositionsManager: FXConnectLite.IOpenPositionsManager, placeCloseOrderAction: PlaceCloseOrderAction) { this.openPositionsManager = openPositionsManager; this.placeCloseOrderAction = placeCloseOrderAction; } onChange(openPositionInfo: FXConnectLite.OpenPositionInfo): void { //do nothing } onAdd(openPositionInfo: FXConnectLite.OpenPositionInfo): void { let me = this; let openPosition = this.openPositionsManager.getOpenPosition(openPositionInfo.getId()); Printer.print(`OpenPosition ${openPositionInfo.getId()} added.`) Printer.print(OpenPositionFormatter.TITLE); Printer.print(OpenPositionFormatter.format(openPosition)); setTimeout(function () { me.placeCloseOrderAction.execute(openPositionInfo.getId()) }, 1000); } onDelete(openPositionInfo: FXConnectLite.OpenPositionInfo): void { let openPosition = this.openPositionsManager.getOpenPosition(openPositionInfo.getId()); Printer.print(`OpenPosition ${openPositionInfo.getId()} deleted.`) Printer.print(OpenPositionFormatter.TITLE); Printer.print(OpenPositionFormatter.format(openPosition)); } onRefresh(): void { //do nothing } }
See also IOrdersManager,IOpenPositionsManager, OpenPositionInfo, OpenPosition
The class formatter helps to show openPosition properties in readable text:
Show openPosition properties Hide
typescriptjavascriptclass OpenPositionFormatter { static readonly TITLE = `# | TradeID | AccountId | UsedMargin | Amount | BuySell | OpenRate | CloseRate | StopRate | LimitRate`; public static formatByIndex(index: number, openPosition: FXConnectLite.OpenPosition): string { let formatString; formatString = `${index} | ${openPosition.getTradeID()} | ${openPosition.getAccountId()} | ${openPosition.getUsedMargin()} | ${openPosition.getAmount()} | ${openPosition.getBuySell()} | ${openPosition.getOpenRate()} | ${openPosition.getCloseRate()} | ${openPosition.getStopRate()} | ${openPosition.getLimitRate()} |`; return formatString; } public static format(openPosition: FXConnectLite.OpenPosition): string { let formatString; formatString = `${openPosition.getTradeID()} | ${openPosition.getAccountId()} | ${openPosition.getUsedMargin()} | ${openPosition.getAmount()} | ${openPosition.getBuySell()} | ${openPosition.getOpenRate()} | ${openPosition.getCloseRate()} | ${openPosition.getStopRate()} | ${openPosition.getLimitRate()} |`; return formatString; } }
See also OpenPosition
Download the sample TypeScript, JavaScript.