Create A Close Market Order

Brief

The article describes how to create a close market order.

Details

Step 1: Create a CloseOrderFactory function

CloseOrderFactory Hide

typescriptjavascript
class 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

typescriptjavascript
class 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

typescriptjavascript
let openPositionChangeListener = new OpenPositionChangeListener(openPositionManager, new PlaceCloseOrderAction(session));

Below is an example of code for Listener:

Code for Listener Hide

typescriptjavascript
class 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

typescriptjavascript
class 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.

back