Edit Strategy Messages
The following trade model and set of message describe the fields and values required to successfully edit an existing strategy using the FX Professional Motif. A strategy comprises of all the legs of the original order. For the purpose of this spec, the order in it’s entirety is referred to as the strategy, and each of its legs are referred to as an order in the strategy.
For each of the messages below, [c] denotes that the message is sent by the client, [s] denotes that the message is sent by the server.
- Architecture
- Trade Model State Diagram
- EditOpen Message [c]
- EditOpenAck Message [s]
- EditAccept Message [s]
- EditClose Message [c]
- Refresh Message [s]
- Save Message [c]
- SaveAccept Message [s]
- SaveAndComplete Message [s]
- Complete Message [c]
- CompleteAck Message [s]
- ValidationError Message [s]
- StrategyFields [s]
- Error Message [s]
Architecture
For the frontend client, the trade model library handles the processing of these messages. Streamlinkis used to send messages to the backend. For Edit Strategy there are three messages that the client can send:
-
the first is a message containing the order ID of the first order in the strategy to be modified, this allows the server to identify the entire strategy that the order belongs to and send back the details of the strategy.
-
the second message is the save message, which contains all the modifications made to the strategy that the client wants to save. Note that in response to the save message the server has two options:
1. if you want to support multiple save operations, the server can send the "SaveAccept" event to move the client back to the Editable state. This could be useful if your workflow involved editing each order in a strategy individually, for example.
2. If you only want the client to have one opportunity to save, the server can send the "SaveAndComplete" event to move the client to the Complete state, which is a terminal state.
-
the third is the complete message, which tells the server that the client is done making any more changes to the strategy. Note that this message is not required if the server responded to the initial Save event by sending the SaveAndComplete event, as described above.
For the backend adapters, the FXIntegrationAPI consumes the client messages. The request for Edit Strategy are handled by an adapter that instantiates the FXOrdersAdapter object and registers an EditStrategyListener (See the FX Integration API documentation for more information). The Edit Strategy is handled by the FX Integration API using the EditStrategyRequest object. The object contains the Responders and Events required to send messages from the server side, in order to transition the trade model to the final state.
Trade Model State Diagram
Blue arrows denote client messages and timeout messages, green arrows denote messages sent by the server.
In addition to the states shown above, all thats that are not the initial and complete state, can transition to the error state (see common messages for the error message)
EditOpen Message [c]
This is the message the client sends in order to submit a request to cancel an order
Field Name | Description | Example |
---|---|---|
RequestID |
A unique client generated ID for this edit operation |
112314243333 |
MsgType |
The transition that the client wants to make in the state model |
EditOpen |
L1_OrderID |
The ID of the first leg in the strategy that is to be edited |
1374143013248_1 |
EditOpenAck Message [s]
This is the message that the server sends to acknowledge that the EditOpen message has been received by the server
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the server wants to make in the state model |
EditOpenAck |
EditAccept Message [s]
This is the message that the server sends to tell the client that they may start editing the strategy. Typically the server may have to obtain locks or mark a strategy as being edited or something similar to this effect before a client can start editing a strategy. This message is also used by the server to tell the clients which fields on the strategy can be edited, for example it is normal to be able to edit the target rate and amount but perhaps not the currency pair or order IDs.
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the server wants to make in the state model |
EditAccept |
Please also provide the StrategyFields - see below
EditClose Message [c]
This is the message that client sends to tell the client that it no longer wants to edit the order, before the order has reached the Editable state. Typically a lock may take a while to obtain, by this time the client may no longer be interested in editing the order and may close the ticket.
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the client wants to make in the state model |
EditClose |
Refresh Message [s]
This is the message that the server can send to the client if the strategy has changed whilst the client is editing an order. Note: if this scenario occurs you may want to simply terminate the edit operation by sending an Error transition instead of Refresh, because in many cases the edit operation is no longer valid. For example, if a user is attempting to change the target rate on a working order and it is filled, it is no longer possible to edit that order. A Refresh is therefore unhelpful to the client.
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the server wants to make in the state model |
Refresh |
Please also provide the StrategyFields - see below
Save Message [c]
This is the message that the client sends that contains all the edits made to the strategy that they would like to save.
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the client wants to make in the state model |
Save |
Please also provide the StrategyFields - see below
SaveAccept Message [s]
This is the message that the server sends which tells the client that the edits received on the Save message have been succesfully executed. It returns the trademodel to the Editable state to allow the client to make further edits.
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the server wants to make in the state model |
SaveAccept |
Please also provide the StrategyFields - see below
SaveAndComplete Message [s]
This is the message that the server sends which tells the client that the edits received on the Save message have been succesfully executed. It transitions the trade to the Completed state. The client will need to open a new edit order ticket to make further changes. This is an alternative to the SaveAccept message.
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the server wants to make in the state model |
SaveAndComplete |
Please also provide the StrategyFields - see below
Complete Message [c]
This is the message that the client sends which tells the server that they no longer wish to make any more edits to the strategy. Typically the server will release any locks it has on strategies when it recieves this message.
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the client wants to make in the state model |
Complete |
CompleteAck Message [s]
This is the message that the server sends to tell the client that it has received the Complete message, and transitions the trade model to the final state Completed.
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the server wants to make in the state model |
CompleteAck |
ValidationError Message [s]
This is the message that the server sends which tells the client that the save request could not be processed. This message moves the client back to the Editable state, so they can try sending a new Save message once they have corrected the problems.
Field Name | Value | Example |
---|---|---|
RequestID |
The request ID from the original EditOpen message |
112314243333 |
MsgType |
The transition that the server wants to make in the state model |
ValidationError |
Please also provide the StrategyFields - see below
StrategyFields [s]
This is not actually a message, you may have noticed that in some of the messages above you will be asked to add the strategy fields to the contents of the message. The table below contains all the fields that relate to the strategy and its constituent legs.
Fields that are not prefixed with L1_, belong to the strategy.
For each leg on the strategy you will need to provide an additional set of LX_ prefixed fields, where 'X' is number of the leg, L1_ is used in the example below.
Field Name | Value | Example |
---|---|---|
CurrencyPair |
The currency pair for all orders in this strategy |
GBPUSD |
StrategyType |
The type of strategy that the user is editing |
SINGLE, OCO, IF-DONE, IF-DONE-OCO |
OrderCount |
The number of orders in the strategy |
3 |
Account |
The account the strategy was submitted on, in the form "<description>|<ID>" |
My Account|Acc1 |
ActivationDate |
What date the strategy should be activated |
GFA or a date in the form 20130606 (GFA=Good From Activation) |
ActivationTime |
What time the strategy should be activated if the ActivationDate was in the format of yyyymmdd |
12:12:12 |
ActivationLocation |
When location should be used to evaluate the time to activate if the ActivationDate was in the format of yyyymmdd |
Usually an entry in the tz database e.g "Europe/London" - see the "TZ" column on this page https://en.wikipedia.org/wiki/List_of_tz_database_time_zones |
ExpirationDate |
What date the strategy should expire |
GTC, GFD, 20130606 GTC=Good Till Cancelled GFD=Good For Day (valid for the current trading day only). |
ExpirationTime |
What time the strategy should be activated if the ExpirationDate was in the format of yyyymmdd |
12:12:12 |
ExpirationLocation |
When location should be used to evaluate the time to expire if the ExpirationDate was in the format of yyyymmdd |
Usually an entry in the tz database e.g "Europe/London" - see the "TZ" column on this page https://en.wikipedia.org/wiki/List_of_tz_database_time_zones |
AlertType |
The types of alerts that should be sent for this strategy |
SMS, EMAIL (comma separated list, zero or more values) |
SubmittedBy |
Who the strategy was submitted by |
|
SubmittedFor |
Who the strategy was submitted for. |
user1@mybnakcom |
Leg Fields: |
||
L1_OrderID |
The id of the order |
|
L1_ParentID |
The id of the parent order, if there is one |
empty unless this is one of the OCO legs of an If-Done OCO, or the Done leg of an If-Done |
L1_RelatedID |
The id of the related order on the same level as this order |
e.g. the other half of an OCO. Empty for single orders and the parent order in an If-Done OCO |
L1_RelationshipType |
The relationship type of L1_RelatedID |
OCO, or empty if this is a single order |
L1_Amount |
The amount to trade |
100000 |
L1_Filled |
The amount filled so far |
75000 |
L1_Remaining |
The amount remaining |
25000 |
L1_BenchmarkType |
The type of benchmark to fix to, if this is a benchmark order |
ECB, WMR |
L1_BuySell |
BUY or SELL |
BUY, SELL |
L1_DealtCurrency |
The currency that the amount is specified in |
GBP |
L1_ExecutionType |
How this order should be executed |
CALL-ORDER, TAKE-PROFIT, STOP-LOSS, MARKET, BENCHMARK |
L1_FillRate |
The rate at which this order should be filled |
1.1232, or empty if this is a market order |
L1_Status |
The current status of the order |
deactivated |
L1_Remarks |
Comment/remarks by the client |
Call Mike when filled |