CME Optimizer Software User Guide
The current version of Optimizer is version 19, which is available for testing November 15th, 2023. This page will focus on integration for Optimizer 19 and will be updated as and when new builds are made available.
- 1 System Requirements
- 2 Expected Performance
- 3 Downloading Optimizer
- 4 Installation and Running Sample Files
- 5 Troubleshooting
- 6 Running Optimizer 19 Sample Set
- 7 Optimizer Configuration File
- 8 Optimizer Data Files
- 9 Changing the Input/Output folder locations
- 10 Creating Custom Input/Output Folders
- 11 Common Optimizer Log Errors
- 12 Legal
System Requirements
The following system requirements are required to install and run CME Optimizer 19* or version 20 (see release notes):
Windows Server 2016, 2019 or 2022
Quad-core Processor
16 GB of available memory (32 GB is recommended)t
15 GB of available storage (~5GB installation / ~10GB daily data files).
Version 19 only: Microsoft .NET 6.0 Runtime x64 (6.0.6 or higher).
Version 20 only: Microsoft .NET 8.0 Runtime x64
Microsoft Visual C++ 2015-2022 Redistributable (x64) (14.32.31326.0 or higher)
Expected Performance
Based on extensive Optimizer 19 testing:
Downloading Optimizer
CME Optimizer 19 is available to download from CME CORE. To download, perform the following steps:
Log into CME CORE: https://cmecore.cmegroup.com/
Launch CORE Margin Calculator from the menu
Click the Download Center tab, then click on the Software tab
Scroll down to the CME Optimizer section and click on the Optimizer 19 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, please contact Enterprise Application & System Entitlements (EASE).
Installation and Running Sample Files
Installing Optimizer 19
To install CME Optimizer 19 perform the following steps:
1. Download Optimizer 19, refer to the Downloading CME Optimizer 19 section for more information
2. Log onto the system where Optimizer 19 is to be installed. You should log on as an administrative user.
3. Double-click on the Optimizer 19 installer (filename: Optimizer.19.0.61.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 19.
6. Accept the default installation location or optionally change it:
7. Select Install (admin entitlements required) and wait while program installs.
9. Once installation has completed, it is best practice to reboot the PC on which the software is installed. You can choose to automatically run the Optimizer 19 Samples once the installation completes.
Troubleshooting
If you run into issues during the installation, please refer to the guidance below. Alternatively, reach out to our posttradeservices@cmegroup.com for further assistance:
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
Verify that you have the minimum system requirements for hardware and operating system
Verify that you have installed the software prerequisites and that a system reboot has been performed
If the installer starts, but fails to complete, try running the MSI with logging enable from the command-line e.g. PowerShell:
.\Optimizer.19.0.61.0.msi /log installer.logIf the installer log does not point to a localized issue, then forward the log to posttradeservices@cmegroup.com for further investigation (see below).
Sending Diagnostics Information to CME for Troubleshooting
If you are requested to send diagnostics information to posttradeservices@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. Zip, 7-zip, Tar etc.
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 19 Program Folder
During the installation process a convenient desktop shortcut is provided to allow you to easily access the Optimizer 19 Program folder. Double-clicking the “CME Optimizer 19 Folder” shortcut icon will launch the Windows Explorer process and navigate into the Program folder path.
Running Optimizer 19 Sample Set
CME Optimizer 19 includes a sample data set for the new Optimizer 19 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 19 plugins with the sample data set. Double-clicking the “Run CME Optimizer 19 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 19\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 19 has been 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 19\Program"
.\OptimizerHost.exe --list
Note your program installation path may differ. The initial release of CME Optimizer 19 provides the following plugins:
Optimizer (aka Optimizer 19)
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 19 will run the Optimizer plugin (this is Optimizer 19). To run a specific plugin, open a command-prompt using powershell.exe and type the following:
CD "C:\Program Files\CME Group\CME Optimizer 19\Program"
.\OptimizerHost.exe --run "Optimizer"
Note your program installation path may differ. CME Optimizer 19 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 19 Plugin Command-line Arguments
The Optimizer 19 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 19 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 19 configuration file, please refer to the Optimizer 19 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:
.\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 19 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 19 can be to execute as a scheduled task. To create a new task using Windows Task Scheduler perform the following steps:
From the Start menu, launch Task Scheduler
On the actions pane, click “Create Task”
Set the following task properties
(Note some properties will be specific to your environment/requirements)
Name | Run Optimizer 19 |
---|---|
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 Central Time (CT). |
Actions | Program/script: OptimizerHost.exe Add arguments: --configuration “<<FILE PATH TO CONFIGURATION FILE>>” Start in: C:\Program Files\CME Group\CME Optimizer 19\Program |
Optimizer Configuration File
Optimizer 19 Plugin Configuration File
The Optimizer 19 plugin requires a mandatory configuration file. By default, this configuration file is called configuration.json. The Optimizer 19 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 19 plugin folder:
C:\Program Files\CME Group\CME Optimizer 19\Plugins\Optimizer
Note your program installation path may differ. If you run Optimizer 19c 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. Property deprecated with Version 17 | |
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. Property deprecated with Version 17 | |
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). | |
ExclusionMoveDecision | String | LIFO | 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. Property deprecated with Version 17 | |
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 CT, this setting should not be modified without proper evaluation. | |
FloorSpanForFinalMarginCheck | Boolean | true | Controls 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 19 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” Property deprecated with Version 17 | |
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” Property deprecated with Version 17 | |
IrsTimeValueFilename | String | IRSTimeValue_ | Indicates the filename prefix for the IRS Time Value file. Note that the underlying file extension must be “.CSV” Property deprecated with Version 17 | |
IrsVegaLadderFilename | String | IRSVegaLadder_ | Indicates the filename prefix for the IRS Vega Ladder file. Note that the underlying file extension must be “.CSV” Property deprecated with Version 17 | |
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 17 plugin directory path. Note that in JSON format, the backslash character “\” must be escaped e.g. “\\” otherwise the file will be invalid. Property deprecated with Version 17 | |
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. Property deprecated with Version 17 | |
MarketDataArchiveFilename | String | cme_optimizer_marketdata_*.zip | Defines the filename pattern for the CME Optimizer market data archive (ZIP file) | |
UseSpanFileInArchive | String | false | 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 (generally 'Inputs' directory_ 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 19 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 | |
FICC* | Enabled | Boolean | false | Determines if RBOE optimization is enabled or not. Default false implies RBOE optimization is not enabled, must be updated by user to enable. |
Execution Mode | Enum | BeforeIrsOptimization | Determines where the RBOE optimization occurs within the Optimizer pipeline. | |
OptimizeMoveDecision | Enum | LIFO | Determines the order of offsets and transfers when optimizing RBOE positions. Must match MoveDecision in Defaults above if using Optimizer for both RBOE and IRS Optimization. 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). | |
UseBackMonthContracts | Boolean | true | Allows Optimizer to select positions from back month in same contract if target future allocation cannot be met by front month contract. | |
FiccPositionsFilename | String | FICCPositions_ | Filename prefix for the FICC positions file. Default filename is recommended to ensure that it is not misinterpreted with the standard positions filename prefix i.e. "Positions_" | |
FiccEquivalentPositionsFilename | String | *XMFICCPOSN_*.csv | Filename pattern for the Equivalent positions files. Note that the filename in NR may be prefixed with "NR_". | |
Exclusions | IncludeBaselineInOptimalState | Boolean | false | Allows user to define whether the 'baseline' margin case will be used during Optimizer's solution decision. Baseline margin can be impacted by exclusions for FICC processing and may become less meaningful. This config is false by default to capture this edge condition. |
Early Exercise | Section | see below | Defines if early exercise exclusions are enabled. See exclusions for more information. | |
PBAccount | Section | see below | Defines if PBAccount-based exclusions are enabled. See exclusions for more information. | |
FiccPbAccount | Section | see below | Defines if FiccPbAccount-based exclusions are enabled. See exclusions for more information. | |
Exchange | Section | see below | Defines if Exchange-based exclusions are enabled. See exclusions for more information. | |
Product | Section | see below | Defines if Product-based exclusions are enabled. See exclusions for more information. | |
TradeEvents (please see in more detail below) | Section | see below | Defined if Trade Life-cycle Events-based exclusions are enabled. See exclusions below for more information. |
FICC section new for the RBOE workflow, released with version 19. Please see RBOE user guide for more information: https://www.cmegroup.com/confluence/display/EPICSANDBOX/Treasury+Rules-based+Offset+Engine.
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 19, users can utilize enhanced exclusion features. This section describes how to use and configure exclusions. Updated to reflect changes to default configurations with version 19.
configuration.json
{
/*
Optimizer configuration sections omitted for brevity
*/
"Exclusions": {
"IncludeBaselineInOptimalState": false,
"EarlyExercise": {
"Enabled": true
},
"PBAccount": {
"Enabled": false,
"Exclusions": [
{
"Enabled": false,
"Type": "OOF",
"Accounts": []
}
]
},
"FiccPbAccount": {
"Enabled": false,
"Exclusions": [
{
"Enabled": false,
"Type": "FUT",
"Accounts": []
}
]
},
"Exchange": {
"Enabled": false,
"Exclusions": []
},
"Product": {
"Enabled": false,
"Exclusions": []
},
"TradeEvents": {
"Enabled": true,
"Events": [
{
"Enabled": true,
"Name": "First Position Date - Treasury Roll",
"BeginEventType": 17,
"DaysBefore": 0,
"EndEventType": 7,
"DaysAfter": 0,
"Type": "FUT",
"Exchange": "CBT",
"Codes": [ "17", "21", "25", "26", "TN", "UBE" ]
},
{
"Enabled": true,
"Name": "Last Trade Date - CME Option Expiration",
"BeginEventType": 7,
"DaysBefore": 1,
"EndEventType": 999,
"DaysAfter": 0,
"Type": "OOF",
"Exchange": "CME",
"Codes": [ "SR3", "S0", "S2", "S3", "S4", "S5" ]
},
{
"Enabled": true,
"Name": "Last Trade Date - CBT Option Expiration",
"BeginEventType": 7,
"DaysBefore": 1,
"EndEventType": 999,
"DaysAfter": 0,
"Type": "OOF",
"Exchange": "CBT",
"Codes": [ "17", "21", "25", "26", "TN", "UBE" ]
}
]
}
}
}
Section / Type Definition | Property | Data Type | Required? | Default | Comments |
---|---|---|---|---|---|
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. |
Enabled | Boolean | No | false | Controls if PBA exclusions are enabled. Useful if firm wants to temporarily prevent such exclusions, without removing configuration. Supersedes "PBAccountExclusion," see type definition below. | |
Exclusions | Array of PBAccountExclusion | No | Empty | Refer 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. |
How was your Client Systems Wiki Experience? Submit Feedback
Copyright © 2024 CME Group Inc. All rights reserved.