Remove Orders from Existing Contingency Group

You can remove one or more orders from an existing contingency (OCO, OTO or ELS) group.

To remove orders from a contingency group:

1) Create an O2GValueMap and fill only one field:

Valuemap field

Datatype

Description

Command

string

The command. Must be RemoveFromContingencyGroup.

The field is obligatory.

2) Create an O2GValueMap for each order you want to remove from the contingency group. Fill these value maps as:

Valuemap field

Datatype

Description

Command

string

The command. Must be RemoveFromContingencyGroup.

The field is obligatory.

AcctID

string

The identifier of the account which the order belongs to.

The field is obligatory.

OrderID

string

The identifier of the order to be removed from the group.

The order must exist, must be an entry order (LE or SE) and must be in the Waiting status.

The field is obligatory.

3) Append each entry order valuemap to the main valuemap using the O2GValueMap.appendChild method.

Please note that only dependent orders may be removed from OTO or ELS groups.

4) Pass the main valuemap table to the createOrderRequest method.

Limitations:

1) All entry orders must be created for the same account.

Returns:

The createOrderRequest method will return an O2GRequest (the main request) containing child requests. If 2 entry orders are removed, 2 child requests will be returned. Note that you will receive responses to the child requests and will not receive a response to the main request.

Example: Remove orders from an existing contingency group [hide]

    static bool PrepareParamsFromLoginRules(out string sAccountID, out string sOfferID, out int iBaseAmount, out double dPointSize, out double dAskRate, out double dBidRate)
    {
        bool bOK = false;
        O2GResponseReaderFactory factory = session.getResponseReaderFactory();
        if (factory == null)
            return bOK;
        O2GLoginRules loginRules = session.getLoginRules();
        // get first account from login
        O2GResponse accountResponse = loginRules.getTableRefreshResponse(O2GTable.Accounts);
        O2GAccountsTableResponseReader accountsReader = factory.createAccountsTableReader(accountResponse);
        O2GAccountRow account = accountsReader.getRow(0);
        // get account id
        sAccountID = account.AccountID;
        // get base amount
        iBaseAmount = account.BaseUnitSize;
        sOfferID = "";
        dAskRate = 0;
        dBidRate = 0;
        dPointSize = 0;
        // Get offers for EUR/USD
        O2GResponse offersResponse = loginRules.getTableRefreshResponse(O2GTable.Offers);
        O2GOffersTableResponseReader offersReader = factory.createOffersTableReader(offersResponse);
        for (int i = 0; i < offersReader.Count; i++)
        {
            O2GOfferRow offer = offersReader.getRow(i);
            if (String.Equals(offer.Instrument, "EUR/USD"))
            {
                sOfferID = offer.OfferID;
                dAskRate = offer.Ask;
                dBidRate = offer.Bid;
                dPointSize = offer.PointSize;
                bOK = true;
                break;
            }
        }
        return bOK;
    }
 
    // Helper method for creating valueMap for existing order
    static O2GValueMap CreateValueMapForExistingOrder(string sOrderID, string sAccountID)
    {
      O2GRequestFactory factory = session.getRequestFactory();
      O2GValueMap valuemap = factory.createValueMap();
 
      valuemap.setString(O2GRequestParamsEnum.OrderID, sOrderID);
      valuemap.setString(O2GRequestParamsEnum.AccountID, sAccountID);
      return valuemap;
    }
 
    static void RemoveFromGroup(string sAccountID, string sSecondaryID1, string sSecondaryID2)
    {
        O2GRequestFactory factory = session.getRequestFactory();
        if (factory == null)
            return;
        O2GValueMap valuemap = factory.createValueMap();
        valuemap.setString(O2GRequestParamsEnum.Command, Constants.Commands.RemoveFromContingencyGroup);
 
        // secondary order
        O2GValueMap valueRemove = CreateValueMapForExistingOrder(sSecondaryID1, sAccountID);
        valueRemove.setString(O2GRequestParamsEnum.Command, Constants.Commands.RemoveFromContingencyGroup);
        valuemap.appendChild(valueRemove);
 
        // secondary order
        valueRemove = CreateValueMapForExistingOrder(sSecondaryID2, sAccountID);
        valueRemove.setString(O2GRequestParamsEnum.Command, Constants.Commands.RemoveFromContingencyGroup);
        valuemap.appendChild(valueRemove);
 
        // create request from valueMap
        responseListener.SendRequest(valuemap);
    }

back