Page tree
Skip to end of metadata
Go to start of metadata

The current version of Optimizer is version 16, which is available for testing 4th March 2021. Optimizer 16 must be integrated on or before 26th April 2021 to prevent Optimizer failures. This page will focus on integration for Optimizer 16 and will be updated when new builds are available.

System Requirements

The following system requirements are required to install and run CME Optimizer 16:

  • Windows Server 2016 or higher††
  • Quad-core Processor
  • 8 GB Memory (16 GB recommended)
  • Storage:
    • 2 GB storage for installation
    • 4 GB storage for data files
  • Microsoft .NET Framework 4.7.2 Redistributable x64
  • Microsoft Visual C++ 2017 Redistributable x64 15.10.27024 or higher

† Daily estimate only. Market/firm data file sizes will vary on a firm-by-firm basis. It is recommended that you allocate up to 1 GB per day for storing data files.

†† Note that CME Optimizer 16 can run on earlier version of Windows Server (including Windows Server 2012 R2 and Windows Server 2016). However, in accordance with CME guidelines and industry best practices, discontinued, insecure or unsupported operating systems are no longer supported as of EOY 2020, this includes both Windows Server 2008 R2 and 2012 R2.

Expected Performance

Based on extensive Optimizer 16 testing:

Downloading Optimizer

CME Optimizer 16 is available to download from CME CORE. To download, perform the following steps:

  1. Log into CME CORE: https://cmecore.cmegroup.com/

  1. Launch CORE Margin Calculator from the menu
  2. Click the Download Center tab, then click on the Software tab
  3. Scroll down to the CME Optimizer section and click on the Optimizer 16 file link, this will start the download process.

If you do not have a CME Login ID, then click on the Register link on the login page. If you have any questions about creating a CME Login ID, then please reach out the EASE Team at EASE.AtYourService@cmegroup.com.

Installation and Running Sample Files

Installing Optimizer 16

To install CME Optimizer 16 perform the following steps:

  1. Download Optimizer 16, refer to the Downloading CME Optimizer 16 section for more information
  2. Log onto the system where Optimizer 16 is to be installed. You should log on as an administrative user.
  3. Double-click on the Optimizer 16 installer (filename: Optimizer.16.0.0.0.msi), this will start the installation process.
  4. Follow the on-screen instructions.
  5. You must accept the End-User License Agreement (EULA) to install Optimizer 16
  6. Accept the default installation location or optionally change it:
  7. You can choose to automatically run the Optimizer 16 Samples once the installation completes.
  8. Once installation has completed, it is best practice to reboot the PC on which the software is installed.

Troubleshooting

If you run into issues during the installation, please refer to the guidance below. Alternatively, reach out to our cme.core@cmegroup.com for further assistance:

  1. Verify that you have the correct privileges to install software on the target system and that security software/policies are not preventing software from being installed
  2. Verify that you have the minimum system requirements for hardware and operating system
  3. Verify that you have installed the software prerequisites and that a system reboot has been performed
  4. If the installer starts, but fails to complete, try running the MSI with logging enable from the command-line e.g. PowerShell:

    .\Optimizer.16.0.0.0.msi /log installer.log

  5. If the installer log does not point to a localized issue, then forward the log to cme.core@cmegroup.com for further investigation (see below).

Sending Diagnostics Information to CME for Troubleshooting

If you are requested to send diagnostics information to cme.core@cmegroup.com to help them provide troubleshooting assistance, then please provide the following information along with any requested files within a compressed archive i.e. WinZip, 7-zip.

  • Operating System + Version
  • MSI version
  • Firm ID
  • Technical and business contact information (where applicable)
  • Description of the issue e.g. Installation Error, Run-time Error
  • Context e.g. installing, running program interactively, running program as an automated task/job
  • Any input, output or configurations files (where applicable) e.g. positions data, market data or configuration files, command-line arguments
  • Any error messages / codes

Opening the Optimizer 16 Program Folder

During the installation process a convenient desktop shortcut is provided to allow you to easily access the Optimizer 16 Program folder. Double-clicking the “CME Optimizer 16 Folder” shortcut icon will launch the Windows Explorer process and navigate into the Program folder path.

 



Running Optimizer 16 Sample Set

CME Optimizer 16 includes a sample data set for the new Optimizer 16 plugin. This can be launched via a desktop shortcut or via the command-line.

Running from Desktop Shortcut

During the installation process a convenient desktop shortcut is provided to allow you to easily launch the  Optimizer 16 plugins with the sample data set. Double-clicking the “Run CME Optimizer 16 Sample” shortcut icon will launch a command-prompt and start running the sample data set.


Running from Command-line

The sample data set can also be run via the command-line. Open a command-prompt using powershell.exe and type the following:

 

CD "C:\Program Files\CME Group\CME Optimizer 16\Program"

.\OptimizerHost.exe --Configuration "..\..\Samples\configuration.json"

 

Note your program installation path may differ.

When the sample optimization completes, the Outputs folder will contain several files, including:

  • Log file
  • Reports – total savings estimate, margin summary and funding impact
  • Transfers in CSV/FIXML format

Running Optimizer via Plugin

Optimizer 16 was built using a plugin architecture, which allows greater release flexibility and opens the possibility to introduce additional optimization services in the future.

Listing Available Plugins to Run

To list the available plugins, open a command-prompt using powershell.exe and type the following:

 

CD "C:\Program Files\CME Group\CME Optimizer 16\Program"

.\OptimizerHost.exe --list

 

Note your program installation path may differ.

The initial release of CME Optimizer 16 provides the following plugins:

  • Optimizer (aka Optimizer 16)

Futures releases of Optimizer will introduce new plugins that provide enhanced or new functionality. To run a specific plugin, refer to the Running a specific plugin section.

Running a Specific Plugin

By default, CME Optimizer 16 will run the Optimizer plugin (this is Optimizer 16). To run a specific plugin, open a command-prompt using powershell.exe and type the following:

 

CD "C:\Program Files\CME Group\CME Optimizer 16\Program"

.\OptimizerHost.exe --run "Optimizer"


Note your program installation path may differ. CME Optimizer 16 will automatically initialize and start the specified plugin. To determine what plugins are currently available, refer to the List available plugins section. If you enter a plugin name that is either incorrect or does not exist, then a run-time error will occur, and the program will exit.

Optimizer 16 Plugin Command-line Arguments

The Optimizer 16 plugin provides several command-line arguments, these are listed in the table below. Note that some command-line arguments support both short and long-hand argument names:

Name

Argument

Description & Usage

Plugin Configuration

--configuration

-c

Optional. Sets the file path of the configuration.json that is used to configure the plugin.


File path can be fully qualified or relative. Note that relative paths are relative to the Optimizer 16 plugin folder.


If not specified, the plugin will attempt to locate the configuration.json file in the program folder.


It is recommended that you create a configuration.json outside of the plugin folder. For more information this and the Optimizer 16 configuration file, please refer to the Optimizer 16 Configuration File section.


.\OptimizerHost.exe --configuration “FILE PATH”


.\OptimizerHost.exe -c “FILE PATH”

Log Verbosity

--verbosity

-v

Optional. Sets the logging verbosity. Default: Normal.


Applicable values:

·         Off

·         Minimal   -or-   M

·         Normal   -or-   N

·         Diagnostic   -or-   D


.\OptimizerHost.exe --verbosity Off

.\OptimizerHost.exe -v N

Disable Parallel Execution

--No-Parallel

Optional. Disables parallelization. Default: Not specified


Parallelization is enabled by default and it is recommended that parallelization is not disabled as execution times may be increased significantly.


This option is useful if Optimizer 16 is installed alongside other production applications or troubleshooting purposes.

Pause Before Exit

--No-Exit

Optional. When the program completes, execution is paused before exiting. Default: Program does not pause.


This switch is useful when running interactive sessions or when running the samples. Note that this switch should not be used in automated environments.

Running Optimizer as a Scheduled Task

Optimizer 16 can be to execute as a scheduled task. To create a new task using Windows Task Scheduler perform the following steps:

  1. From the Start menu, launch Task Scheduler
  2. On the actions pane, click “Create Task”
  3. Set the following task properties
    (Note some properties will be specific to your environment/requirements)

Name

Run Optimizer 16

Description

(Optional) Recommended that you set a description that describes the Optimizer task and when it is scheduled to execute.

User account

User Account: NT AUTHORITY\LOCAL SYSTEM

 

Note that user accounts and/or gMSA (Global Managed Services Accounts) can be used to execute a scheduled task – additional security policy and/or directory security settings may be required and is beyond the scope of this document.

 

Ensure that the selected account has read/write permissions to the configured inputs/outputs folder paths.

Run with highest privileges

Yes

Triggers

Date/time triggers can be configured as per your firm’s requirements e.g. Once daily between Mon-Fri at 17:45 PM CST.

Actions

Program/script: OptimizerHost.exe


Add arguments: --configuration “<<FILE PATH TO CONFIGURATION FILE>>”


Start in: C:\Program Files\CME Group\CME Optimizer 16\Program

Optimizer Configuration File

Optimizer 16 Plugin Configuration File

The Optimizer 16 plugin requires a mandatory configuration file. By default, this configuration file is called configuration.json. The Optimizer 16 plugin configuration is based upon the JSON (JavaScript Object Notion) format. Unlike prior versions of Optimizer, all configurable settings are located within a single file. A default configuration file can be found within the Optimizer 16 plugin folder:

C:\Program Files\CME Group\CME Optimizer 16\Plugins\optimizer

 

Note your program installation path may differ. If you run Optimizer 16 plugin, it will (by default) attempt to locate the configuration.json in the plugin folder. If you want to change this, then refer to the Specifying a custom configuration.json file section. If the configuration file is not found a run-time error will occur, and the program will exit.

The following table details each configuration section:

Section Name

Property Name

Type

Default

Value

Description

Defaults

TransfersByPbAccount

Boolean

true

Indicates if transfers files are broken out by PB Account.


True: Breaks out FIXML and CSV transfers into individual PB Account sub folders within the outputs directory.


False: FIXML and CSV transfers are not broken out.


ShowTransferOrigin

Boolean

true

Describes the transfer reason i.e. Optimizer or Netting.


True: Adds an additional column to the CSV transfer called “Transfer Origin” which indicates if the transfer originated from “Optimizer” or “Netting”.


False: The column is not shown.


ShowTotalSavings

Boolean

true

Indicates if Optimizer should calculate the total savings realized by Portfolio Margining for each portfolio.


True: Optimizer will calculate total savings and output a total savings report file.


False: Optimizer will not perform any additional logic.


BreakOnException

Boolean

false

Indicates if the program should stop if any position/portfolio errors are encountered.


True: Program will exit.


False: Program will discard erroneous portfolios and continue.


MoveDecision

String

LIFO

Transfer Allocation Method. This parameter will determine how to build transfer messages to reach optimal Futures allocation.


LIFO: Last in First Out


FIFO: First in First Out


SNT (single net transfer): Optimizer creates one transfer per contract with today’s trade date and trade price. This should be used for portfolios expressed as net position only (not trade-level).


ExclusionMoveDecisionStringLIFO

The transfer allocation method for transfers that are created when a given position has been excluded e.g. global product exclusion or treasury roll flags.


LIFO: Last in First Out


FIFO: First in First Out


SNT (single net transfer): Optimizer creates one transfer per contract with today’s trade date and trade price. This should be used for portfolios expressed as net position only (not trade-level).


NettingMoveDecision

Please note this should be the same as MoveDecision when used for transfers generated due to netting.

String

LIFO

The transfer allocation method for transfers that are created when a given portfolio is enabled for netting.


LIFO: Last in First Out


FIFO: First in First Out


SNT (single net transfer): Optimizer creates one transfer per contract with today’s trade date and trade price. This should be used for portfolios expressed as net position only (not trade-level).


MaxNumberOfIterations

Number

500

This setting should not be modified without proper evaluation.


Culture

String

en-US

Sets the culture for the program. This setting should not be modified without proper evaluation.


TimeZone

String

Central Standard Time

Governs the date/time zone used when creating transfers.


As FEC requires all trade dates to be in CST, this setting should not be modified without proper evaluation.


FloorSpanForFinalMarginCheckBooleantrueControls net option value capping/SPAN flooring in the Optimizer solution decision.

Inputs

InputDirectory

String

..\\..\\Inputs

Sets the directory path containing all inputs including positions, market data and configuration files. The path can be fully qualified or relative.


Note that relative paths must be relative to the Optimizer 16 plugin directory path.


Note that in JSON format, the backslash character “\” must be escaped e.g. “\\” otherwise the file will be invalid.


PositionsFilename

String

Positions

Indicates the filename prefix for the positions file. Note that the underlying file extension must be “.CSV”


IrsGammaLadderFilename

String

IRSGammaLadder_

Indicates the filename prefix for the IRS Gamma Ladder file. Note that the underlying file extension must be “.CSV”


IrsPnlFilename

String

IRSPNL_

Indicates the filename prefix for the IRS PNL file. Note that the underlying file extension must be “.CSV”


IrsSkewSensitivityFilename

String

IRSSkewSensitivity_

Indicates the filename prefix for the IRS Skew Sensitivity file. Note that the underlying file extension must be “.CSV”


IrsTimeValueFilename

String

IRSTimeValue_

Indicates the filename prefix for the IRS Time Value file. Note that the underlying file extension must be “.CSV”


IrsVegaLadderFilename

String

IRSVegaLadder_

Indicates the filename prefix for the IRS Vega Ladder file. Note that the underlying file extension must be “.CSV”


IrsDeltaLadderFilename

String

IRSDL_

Indicates the filename prefix for the IRS DL file. Note that the underlying file extension must be “.CSV”


SpanIniFilesFolder

String

..\\

Sets the directory path containing the span.ini and orgmast.xml files. Note that these files can be placed within the inputs directory. The path can be fully qualified or relative.


Note that relative paths must be relative to the Optimizer 16 plugin directory path.


Note that in JSON format, the backslash character “\” must be escaped e.g. “\\” otherwise the file will be invalid.


SpanFileNameSuffix

String

cust.spn

Indicates the suffix of the span data file e.g. cust.spn


RiskManagerConfigIsEncoded

Boolean

true

Indicates if the ZIP file is encoded or not.


MarketDataArchiveFilenameStringcme_optimizer_marketdata_*.zipDefines the filename pattern for the CME Optimizer market data archive (ZIP file)

UseSpanFileInArchiveStringfalse

Indicates if the SPAN file included within the market data archive should be used.

If true, the SPAN file will be extracted and written to the file system (process will require write privileges)

If false, the program will expect the SPAN file to be on the file system prior to execution.

Outputs

OutputDirectory

String

..\\..\\Outputs

Sets the directory path to write all logs, reports and transfers to. The path can be fully qualified or relative.


Note that relative paths must be relative to the Optimizer 16 plugin directory path.


Note that in JSON format, the backslash character “\” must be escaped e.g. “\\” otherwise the file will be invalid.


CsvTransfersFilename

String

csvTransfers.csv

Sets the filename for CSV transfers.


TotalSavingsFilename

String

Total Savings Estimate.csv

Sets the filename for the total savings report.


FundingImpactsFileName

String

FundingImpact.csv

Sets the filename for the funding impact report, which shows the incremental savings pre / post optimization runs.


MarginSummaryFileName

String

MarginSummary.csv

Sets the filename for the margin summary report, which breaks out all margin numbers when optimizer is ran.


FixmlOutputFilename

String

fixmlTransfers.txt


Fixml

FixmlMsgEvtSrc

String

API

Transfer Message Source. Input to the transfer message.


FixmlClOrdIdStatic

String

0

Increment Option for Clearing Order ID.


FixmlClOrdIdStaticId

String

PM001

Static Clearing Order ID tag. If using a static clearing order ID, this tag will be used for each transfer message.


Option to have a static Order ID or an Order ID that gets incremented by 1 for each transfer message created.


0: Use a static value for all transfers Vs. 1: increment by 1 for each transfer created


SingleSidedReport

Boolean

true

Transfer message format. Indicates if the Optimizer will output Single Sided transfer messages (post FEC+ migration) or Dual Sided transfer messages.


True: Single Sided messages

False: Use PNL Dual Sided messages

Exclusions

Early Exercise

Section


Defines if early exercise exclusions are enabled. See exclusions for more information.


PBAccount

Section


Defines if PBAccount-based exclusions are enabled. See exclusions for more information.


ExchangeSection
Defines if Exchange-based exclusions are enabled. See exclusions for more information.

ProductSection
Defines if Product-based exclusions are enabled. See exclusions for more information.

TradeEventsSection
Defined if Trade Life-cycle Events-based exclusions are enabled. See exclusions for more information.

 

Note that the JSON specification has some basic structural rules, some key considerations are listed below, but you can read more information on the JSON specification at https://www.json.org/:

  • For string values that represent file and/or directory paths, the backslash character “\” must be escaped using two backslash characters e.g. “\\”
  • Boolean values must be in lower case i.e. true or false. Specifying any other type of casing cause a run-time error.
  • Strings (text) must be enclosed in double-quotes

Exclusions

With Optimizer 16, users can utilize enhanced exclusion features. This section describes how to use and configure exclusions.

configuration.json
{
	/*
	Optimizer configuration sections omitted for brevity
	*/
	
	"Exclusions": {
    "EarlyExercise": {
      "Enabled": true
    },
    "PBAccount": {
      "Enabled": false,
      "Exclusions": [
        {
          "Type": "OOF",
          "Accounts": []
        }
      ]
    },
    "Exchange": {
      "Enabled": false,
      "Exclusions": []
    },
    "Product": {
      "Enabled": false,
      "Exclusions": []
    },
    "TradeEvents": {
      "Enabled": true,
      "Events": [
        {
          "Name": "First Notice Date - Treasury Roll",
          "BeginEventType": 23,
          "DaysBefore": 0,
          "EndEventType": 7,
          "DaysAfter": 0,
          "Type": "FUT",
          "Exchange": "CBT",
          "Codes": [ "17", "21", "25", "26", "TN", "UBE" ]
        },
        {
          "Name": "First Intent Date - MAC DSF",
          "BeginEventType": 17,
          "DaysBefore": 0,
          "EndEventType": 7,
          "DaysAfter": 0,
          "Type": "FUT",
          "Exchange": "CBT",
          "Codes": [ "F1U", "B1U", "T1U", "N1U" ]
        },
        {
          "Name": "Last Trade Date - ED Option Expiration",
          "BeginEventType": 7,
          "DaysBefore": 0,
          "EndEventType": 999,
          "DaysAfter": 0,
          "Type": "OOF",
          "Exchange": "CME",
          "Codes": [ "ED", "E0", "E2", "E3", "E4", "E5" ]
        }
      ]
    }
  }
}
Section / Type DefinitionPropertyData TypeRequired?DefaultComments






PBAccount--No-

Allows firms to exclude one or more Performance Bond Accounts (aka PB Account or PBA).

If the section is not specified, Optimizer will assume there are no PBA-based exclusions to be applied.


EnabledBooleanNofalseControls if PBA exclusions are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration. Supersedes "PBAccountExclusion," see type definition below.

ExclusionsArray of PBAccountExclusionNoEmptyRefer to "PBAccountExclusion" below for type definition.






Exchange--No-

Allows firms to exclude one, more or all products under a specified exchange.

If section is not specified, Optimizer will assume there are no exchange exclusions to be applied.


EnabledBooleanNofalseControls if exchange exclusions are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration. Supersedes "ExchangeExclusion," see type definition below.

ExclusionsArray of ExchangeExclusionNo
Refer to "ExchangeExclusion" below for type definition.






Product--No-

Allows firms to exclude one, more or all products given a specified product type/exchange pairing.

If section is not specified, Optimizer will assume there are no product exclusions to be applied.


EnabledBooleanNofalseControls if product exclusions are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration. Supersedes "ProductExclusion," see type definition below.

ExclusionsArray of ProductExclusionNoEmpty

Refer to "ProductExclusion" below for type definition







EarlyExercise--No-

Allows firms to exclude based upon contracts that appear within the daily POS699 file (option exception summary report).

If section is not specified, Optimizer will assume there are no early exercise exclusions to be applied.

Note section is provided for future enhancements.


EnabledBooleanNofalseControls if early exercise exclusions are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration.






TradeEvents--No-

Allows firms to exclude one or more products based upon trade events.

If section is not specified, Optimizer will assume there are no trade event-based exclusions to be applied.


EnabledBooleanNofalseControls if trade event-based exclusions are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration. Supersedes "EventExclusion," see type definition below.

EventsArray of EventExclusionNoEmptyRefer to "EventExclusion" below for type definition






PBAccountExclusion

(type definition)

TypeStringYes-Defines product type e.g. FUT, OOF, etc.

EnabledBooleanNotrueControls if PBAccountExclusion exclusion(s) are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration. Implicit from the "PBAccount" enabled property if not included at this level.

AccountsArray of StringYesEmptyDefines a PB Account identifier. Must match account ID as defined in the positions.csv input file (PBAccount ID field).






ExchangeExclusion

(type definition)

TypeStringYes-Defines product type e.g. FUT, OOF, etc.

EnabledBooleanNotrueControls if ExchangeExclusion exclusion(s) are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration. Implicit from "Exchange" enabled property if not included at this level.

ExchangeStringYes-Defines exchange e.g. CME, CBT, etc.






ProductExclusion

(type definition)

TypeStringYes-Defines product type e.g. FUT, OOF, etc.

EnabledBooleanNotrueControls if ProductExclusion exclusion(s) are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration. Implicit from "Product" enabled property if not included at this level.

ExchangeStringYes-Defines exchange e.g. CME, CBT, etc.

CodesArray of StringYesEmpty

Defines product codes related to the type/exchange.

If an empty array is provided, then all products for the type/exchange pairing will be excluded.







EventExclusion

(type definition)

NameStringYes-

Friendly name for the event e.g. Treasury Rolls, My Events etc.

Must be unique


EnabledBooleanNotrueControls if EventExclusion exclusion(s) are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration. Implicit from "TradeEvents" enabled property if not included at this level.

TypeStringYes-Defines product type

ExchangeStringYes-Defines exchange

CodesArray of StringNoEmpty

Defines product codes related to the type/exchange.

If an empty array is provided, then all products for the type/exchange pairing will be excluded.


BeginEventTypeEventTypYes-

Defines the start date for the event. This is based upon CME's product reference data files, specifically the FIXML EventTyp enumeration type.

Enumeration values:

5 = Activation or First Day of Trading
7 = Last Eligible Trade Date
19 = Position Removal Date
15 = Initial Inventory Due Date
18 = Last Intent Date
13 = First Delivery Date
14 = Last Delivery Date
17 = First Intent Date
16 = Final Inventory Due Date
19 = Position Removal Date

23 = First Notice Date

24 = Last Notice Date

999 = Option Expiration Date


EndEventTypeEventTypNoSee comments

Defines the end date for the event. This is based upon CME's product reference data files, specifically the FIXML EventTyp enumeration type.

Enumeration values:

5 = Activation or First Day of Trading
7 = Last Eligible Trade Date
19 = Position Removal Date
15 = Initial Inventory Due Date
18 = Last Intent Date
13 = First Delivery Date
14 = Last Delivery Date
17 = First Intent Date
16 = Final Inventory Due Date
19 = Position Removal Date

23 = First Notice Date

24 = Last Notice Date

999 = Option Expiration Date


DaysBeforeIntegerNo0

Defines how many days to offset the event start date into the past i.e. Start Date - Offset.

Note that the USNY calendar and weekends will be taken into account when offsetting.

Non-negative integer


DaysAfterIntegerNo0

Defines how many days to offset the event end date into the future i.e. End Date + Offset.

Note that the USNY calendar and weekends will be taken into account when offsetting.

Non-negative integer

Example configuration.json File

{
  "Defaults": {
    "TransfersByPbAccount": true,
    "ShowTransferOrigin": true,
    "ShowTotalSavings": true,
    "BreakOnException": false,
    "MoveDecision": "LIFO",
    "NettingMoveDecision": "LIFO",
    "ExclusionMoveDecision": "LIFO",
    "MaxNumberOfIterations": 500,
    "Culture": "en-US",
    "TimeZone": "Central Standard Time",
	"FloorSpanForFinalMarginCheck": true
  },
  "Inputs": {
    "InputDirectory": "..\\..\\Inputs",
    "PositionsFilename": "Positions",
    "IrsGammaLadderFilename": "IRSGammaLadder_",
    "IrsPnlFilename": "IRSPNL_",
    "IrsSkewSensitivityFilename": "IRSSkewSensitivity_",
    "IrsTimeValueFilename": "IRSTimeValue_",
    "IrsVegaLadderFilename": "IRSVegaLadder_",
    "IrsDeltaLadderFilename": "IRSDL_",
    "SpanIniFilesFolder": "..\\..\\Inputs",
    "SpanFileNameSuffix": "cust.spn",
    "MarketDataArchiveFilename": "cme_optimizer_marketdata_*.zip",
	"UseSpanFileInArchive": false,
    "RiskManagerConfigIsEncoded": true
  },
  "Outputs": {
    "OutputDirectory": "..\\..\\Outputs",
    "CsvTransfersFilename": "csvTransfers.csv",
    "TotalSavingsFilename": "Total Savings Estimate.csv",
    "FundingImpactsFileName": "FundingImpact.csv",
    "MarginSummaryFileName": "MarginSummary.csv",
    "FixmlOutputFilename": "fixmlTransfers.txt"
  },
  "Fixml": {
    "FixmlMsgEvtSrc": "API",
    "FixmlClOrdIdStatic": "0",
    "FixmlClOrdIdStaticId": "PM001",
    "SingleSidedReport": true
  },
  "Exclusions": {
    "EarlyExercise": {
      "Enabled": true
    },
    "PBAccount": {
      "Enabled": false,
      "Exclusions": [
        {
          "Type": "OOF",
          "Accounts": []
        }
      ]
    },
    "Exchange": {
      "Enabled": false,
      "Exclusions": []
    },
    "Product": {
      "Enabled": false,
      "Exclusions": []
    },
    "TradeEvents": {
      "Enabled": true,
      "Events": [
        {
          "Name": "First Notice Date - Treasury Roll",
          "BeginEventType": 23,
          "DaysBefore": 0,
          "EndEventType": 7,
          "DaysAfter": 0,
          "Type": "FUT",
          "Exchange": "CBT",
          "Codes": [ "17", "21", "25", "26", "TN", "UBE" ]
        },
        {
          "Name": "First Intent Date - MAC DSF",
          "BeginEventType": 17,
          "DaysBefore": 0,
          "EndEventType": 7,
          "DaysAfter": 0,
          "Type": "FUT",
          "Exchange": "CBT",
          "Codes": [ "F1U", "B1U", "T1U", "N1U" ]
        },
        {
          "Name": "Last Trade Date - ED Option Expiration",
          "BeginEventType": 7,
          "DaysBefore": 0,
          "EndEventType": 999,
          "DaysAfter": 0,
          "Type": "OOF",
          "Exchange": "CME",
          "Codes": [ "ED", "E0", "E2", "E3", "E4", "E5" ]
        }
      ]
    }
  }

}

Listed Options in Portfolio Margin Configuration Go-live Checklist

Users going live with options in portfolio margining will need to review their existing configuration file to ensure the appropriate configs are in place to include options. Here is a handy check-list of options-specific configuration:

Options-specific Configuration (full details above)Expected Listed Options Portfolio in Margin Day 1 SettingBusiness Description
FloorSpanForFinalMarginCheckFloorSpanForFinalMarginCheck: "true"

Added with 15.1 patch release.

Controls flooring for net option value in Optimizer's solution decision. Expected to be set to "true" for best results when options are being Optimized. See release notes for v15.1 for more info.

Exclusions → EarlyExercise

"Exclusions":

{ "EarlyExercise":

{ "Enabled": true

Informs Optimizer to exclude options if they are being early exercised/assigned on that date.

Intended as a short-term stop-gap solution.

Exclusions → PBAccount

"Exclusions": {

. . . . omitted for brevity . . .

 "PBAccount": {

"Enabled": false,

"Exclusions": [ {

"Type": "OOF",

"Accounts": []

To be used only if roll-out of options limited to a subset of accounts.

Informs Optimizer to exclude options for a list of accounts as specified in the "Accounts" list.

Default is false.

Exclusions → Product

"Exclusions":

. . . . omitted for brevity . . .

"Product": {

"Enabled": false,

"Exclusions": [

{ "Type": "OOF", "Exchange": "CME", "Codes": []

Informs the Optimizer to exclude all options contracts. The default config was set to "Enabled": true meaning options were excluded by default.

Users going live with options need to change this flag from "Enabled": true to "Enabled": false to begin including options.

Exclusions → TradeEvents

"Exclusions": 

. . . . omitted for brevity . . .

"TradeEvents":

{ "Enabled": true, "

Events": [

 . . . omitted for brevity . . .

"Enabled": true,

"Name": "Last Trade Date - ED Option Expiration",

"BeginEventType": 7,

"DaysBefore": 0,

"EndEventType": 999,

"DaysAfter": 0,

"Type": "OOF",

"Exchange": "CME",

"Codes": [ "ED", "E0", "E2", "E3", "E4", "E5" ]

Informs Optimizer to begin excluding ED options (see "Codes") on the Last Trade Date (BeginEventType = 7, DaysBefore = 0) 

 Informs Optimizer to stop excluding ED options up to and including the Maturity date (EndEventType = 999, DaysAfter = 0) 

Users can interact with these by updating the values in EventType or DaysBefore/After as described in the config section above.


Creating a Custom configuration.json File

It is recommended users create a specific configuration.json file. Most firms prefer this approach as it allows them to place the configuration file in a non-application specific directory e.g. D:\<firm>\apps\data\... To create a new configuration.json file, open a text editor (an editor that supports JSON syntax and validation is recommended). Copy the example configuration.json in this user guide or copy the contents of the configuration.json file in the Optimizer directory. Once you have the configuration outline in an appropriate editor, you can change any settings as required. Save the file as configuration.json to your desired location. Note that it is possible to change the configuration.json filename, refer to the Changing the configuration.json filename section.

Specifying a Custom Configuration File

The Optimizer plugin folder includes a default configuration.json which can be overridden. This is done by specifying the --configuration <filename> argument and providing a file path, for example: -

 

CD "C:\Program Files\CME Group\CME Optimizer 16\Program"

.\OptimizerHost.exe –Configuration "C:\Temp\AcmeClearing\Optimizer\configuration.json"


Note your program installation path may differ.

 

Changing the Default Configuration Filename

If you are creating a custom configuration.json file, you are not restricted to using the “configuration.json” filename. You can change the existing the filename to valid filename, but it is recommended that you maintain the .JSON file extension. If you change the configuration filename, then you must use the Optimizer 16 --configuration argument, for example: -

 

CD "C:\Program Files\CME Group\CME Optimizer 16\Program"

.\OptimizerHost.exe –Configuration "C:\Temp\AcmeClearing\Optimizer\acme-custom-config.json"

 

Optimizer Data Files 

Optimizer 16 Data Files

Optimizer 16 requires several data files to perform portfolio optimization. Note the Optimizer Market Data Archive file is a zipped file containing many other files. This file was created to limit the number of inputs required to run Optimizer. Optimizer unzips this file during initialization.

  • Positions CSV file
  • Configuration file i.e. configuration.json
  • IRS DL
  • IRS Gamma Ladder
  • IRS PNL
  • IRS Skew Sensitivity
  • IRS Time Value
  • IRS Vega Ladder
  • Span risk parameter file (i.e. cust.spn)
    • Note must be unzipped prior to run
  • Optimizer Market Data Archive (ZIP file)
  • orgmast.xml††
  • span.ini††

† A positions file is generated by a firm
†† The span configuration files – orgmast.xml and span.ini – are typically located in the Optimizer plugin folder however, this can be overridden in the configuration.

††† Files in the New Release test environment as published to the same location with a .nr file name extension.

The default configuration expects all data files to reside within an Inputs folder which is located within the installation directory. However, it is recommended that you create your own configuration and data folder outside of the installation directory, refer to the Creating Custom Input/Output Folders section below for more information.

Changing the Input/Output folder locations

By default, the configuration file will point to default input/output folder locations that typically reside within the installation folder. If you run the tree command within the program installation folder you can see these folders: -

 

CD "C:\Program Files\CME Group\CME Optimizer 16\Program"

tree

In addition to create a custom configuration, you can change the directory paths by opening the configuration file and updating the following configuration properties:

{

  // Note that configuration sections/properties have been omitted for brevity


  "Inputs": {

    "InputDirectory": "..\\..\\Inputs",

   

    // other properties omitted

    

    "SpanIniFilesFolder": "..\\..\\Inputs",

  },

  "Outputs": {

    "OutputDirectory": "..\\..\\Outputs",

   

    // other properties omitted

  }

}

  

Creating Custom Input/Output Folders

With CME Optimizer 16, you are not limited to a single input/output folder. You can create multiple folders for a variety of situations such as (but not limited to): per-firm folders, splitting daily runs into date-folders, running different positions file inputs, splitting-up large portfolios, analyzing configuration variations or troubleshooting.

 As a best practice, it recommended that you create a folder outside of the installation directory that will contain all data and configuration. There are a number of benefits to this approach, including (but not limited to): - separation of concerns (program installation folder vs. input/outputs data folder), security (security permissions can be easily applied to a non-installation directory) and maintainability (i.e. application upgrades) .

Example Scenario #1: Per-firm Folders

If you run optimization on-behalf of two or more firms, then you can create folders and configurations on a per-firm basis.  Depending on your available system resources, you can run more than a single instance of CME Optimizer 16, provided each instance is targeting a different configuration file and different input/output folders.

 

For example, assuming we have a “ManagedFirm” folder, this folder can contain sub-folders for Firm A, Firm B and Firm C. Each folder has its own isolated data and configuration:

The configuration file for Firm A is called firma-configuration.json and this configuration file specifically points to the Firm A folder path for inputs and outputs. Note that the input folder for Firm A contains all data (positions, IRS, span etc.) required to run Optimizer. When running Optimizer for Firm A, the following command would be used:

 

CD "C:\Program Files\CME Group\CME Optimizer 16\Program"

.\OptimizerHost.exe –Configuration "C:\ManagedFirm\FirmA\firma-configuration.json"

 

Example Configuration File for Firm A

{

  // firma-configuration.json

  // Note that configuration sections/properties have been omitted for brevity


  "Inputs": {

    "InputDirectory": "C:\\ManagedFirm\\FirmA",

   

    // other properties omitted

    

    "SpanIniFilesFolder": "C:\\ManagedFirm\\FirmA",

  },

  "Outputs": {

    "OutputDirectory": "C:\\ManagedFirm\\FirmA\\Outputs",

   

    // other properties omitted

  }

}


Example Configuration File for Firm B

{

  // firmb-configuration.json

  // Note that configuration sections/properties have been omitted for brevity


  "Inputs": {

    "InputDirectory": "C:\\ManagedFirm\\FirmB",

   

    // other properties omitted

    

    "SpanIniFilesFolder": "C:\\ManagedFirm\\FirmB",

  },

  "Outputs": {

    "OutputDirectory": "C:\\ManagedFirm\\FirmB\\Outputs",

   

    // other properties omitted

  }

}


Equivalent Command-line for Firm B:

CD "C:\Program Files\CME Group\CME Optimizer 16\Program"

.\OptimizerHost.exe –Configuration "C:\ManagedFirm\FirmB\firmb-configuration.json"



Example Configuration File for Firm C

{

  // firmc-configuration.json

  // Note that configuration sections/properties have been omitted for brevity


  "Inputs": {

    "InputDirectory": "C:\\ManagedFirm\\FirmC",

   

    // other properties omitted

    

    "SpanIniFilesFolder": "C:\\ManagedFirm\\FirmC",

  },

  "Outputs": {

    "OutputDirectory": "C:\\ManagedFirm\\FirmC\\Outputs",

   

    // other properties omitted

  }

}


Equivalent Command-line for Firm C:

CD "C:\Program Files\CME Group\CME Optimizer 16\Program"

.\OptimizerHost.exe –Configuration "C:\ManagedFirm\FirmC\firmc-configuration.json"

Common Optimizer Log Errors

This section describes many, but not all, Optimizer log errors. See Recommended Remediation below for additional guidance.

Error TypeError TextDescriptionError Status/ResultRecommended Remediation
Failed to runFailure to initializeIf configuration.json is not present in speciied location, optimizer will not initiate, no error log is producedFailReview configuration file location, rerun
Missing Input filesCould not find one or more required input files: File not found: (local install location)\ABCFILEInput file missing from the input directoryFailReview Input files to ensure completeness, rerun
Issues inside supplied input data[Files listed here] detected a header row only in [files listed as specified in confg *.csv].Input file passed as emptySuccess: Swaptions input files (IRSVega, IRSGamma, IRSkew, IRSTimeValue)
Fail: all other files
Review Input files to ensure completeness, rerun
The following portfolios are not found in the IRS DL file and have been removed: XXX, XXXX Positions file contains PBA that is not present in IRS input files fileFail for impacted account(s)
Success unless all accounts impacted
N/A
[Files listed here] detected a header row only in [files listed as specified in confg *.csv].Input file passed as emptySuccess: Swaptions input files (IRSVega, IRSGamma, IRSkew, IRSTimeValue)
Fail: all other files
Review Input files to ensure completeness, rerun
Unexpected error calculator initialization (global): Could not initialize global calc: RL minor version(XX) does not match RL config minor version(XX).
Optimizer.Optimization.Abstractions.CalculationException: Could not initialize global calc: RL minor version(XX) does not match RL config minor version(XX).
Optimizer market data incompatible with Optimizer software versionFailPlease see CME about compatible CME market data
Exception occurred whilst parsing line * Line does not contain any data
Removing invalid positions from portfolio: [account listed here]
Position row contains too few columnsFail for impacted account(s)
Success unless all accounts impacted
Review positions file for required info, rerun
Exception occurred whilst parsing line * Line contains too many columns
Removing invalid positions from portfolio: [account listed here]
Position row contains too many columnsFail for impacted account(s)
Success unless all accounts impacted
Review positions file for required info, rerun
Found Portfolio with invalid mix of Origin
Removing invalid positions from portfolio: [account listed here]
Position file contains an origin mismatch within the same accountFail for impacted account(s)
Success unless all accounts impacted
Review positions file for required info, rerun
Found Portfolio with invalid mix of AccountTypes (SEG/NSEG).
Removing invalid positions from portfolio: [account listed here]
Position file contains an account  type mismatch within the same accountFail for impacted account(s)
Success unless all accounts impacted
Review positions file for required info, rerun
Handling parsing exception for portfolio 'ABC' on line #X: System.Exception: By-passing line #X: ineligible future expiration "" detected
Removing invalid positions from portfolio: [account listed here]
Positions file contains invalid future period code Fail for impacted account(s)
Success unless all accounts impacted
Review positions file for required info, rerun
Handling parsing exception for portfolio 'ABC' on line #X: System.Exception: By-passing line #X: ineligible option expiration "" detected
Removing invalid positions from portfolio: [account listed here]
Positions file contains invalid options period code Fail for impacted account(s)
Success unless all accounts impacted
Review positions file for required info, rerun
Handling parsing exception for portfolio 'ABC' on line #X: System.Exception: By-passing line #X: ineligible call/put "" detected
Removing invalid positions from portfolio: [account listed here]
Positions file contains invalid options put/call indicatorFail for impacted account(s)
Success unless all accounts impacted
Review positions file for required info, rerun
Handling parsing exception for portfolio 'ABC' on line #X: System.Exception: By-passing line #X: ineligible contract detected: XX|XXX|XXX|XXXXX||
Removing invalid positions from portfolio: [account listed here]
Positions file contains invalid product code, product type or ineligible contract in PM accountFail for impacted account(s)
Fail (if invalid contracts in PM account)
Success (if invalid contract in SEG/NSEG account)
Success unless all accounts impacted
Review positions file for required info, rerun
Issues with configuration.json fileUnexpected error executing exclusion operationErrors found in exclusion section of configuration.json fileSuccess
Optimizer bypasses exclusion logic
Review exclusions section of config file and rerun
Post-processing ErrorsOptimizer has encountered an error has occurred and will exit. There are no portfolios to optimize.Optimizer experienced issues in processing (see above errors) and there were no valid porfolios to optimizeFailReview above errors, turn log verbosity to -v (verbose) if necessary to produce additional errors

Legal

Click-through Agreement

Attached below is the Optimizer EULA click-through Agreement language for review. Please note to install the software, a user must also click 'Agree' to this language. This is standard language.

 PDF

Open Source Software

The table below sets out a list of relevant licenses for open source software contained in the CME Deployable Margin Software and the CME Optimizer Software. The links are provided for Client’s convenience only and CME makes no representation or warranty regarding the permanence or accuracy of these or of any kind thereto and CME reserves the right to make changes to this list from time to time.

  • No labels