Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

    route=ARCA,ARCAPOP;penny=true;liq=A => 0.003

 


The left-hand side (everything before =>) specifies the conditions to match. The rule above match any execution where route is ARCA or ARCAPOP and the liquidity flag is A and the price was less than $1.    (The semi-colon character is used as an AND qualifier.)
 

The right-hand side specifies the fee to assess if the conditions match.   Positive fees are charges, negative fees are rebates.  The rule above charges $3 / 1000 shares.

Leaving the condition blank will match every trade (useful as the last rule to provide a catch-all). For example, changing the example above as follows will charge all remaining executions $5 / 1000: 

    route=ARCA,ARCA=,ARCAPOP;penny=true;liq=A => 0.003
    => 0.005 

Conditions 

Unless otherwise specified, conditions are not case sensitive and support a variety of operators: =, != (not equals), >=, >, <=, <

Name

Description

Example

afterHours

Execution occurred on or after 4pm EST

afterHours=true

capacityTrading capacity of the order (when available). A = Agency, C = Agency Cross, P = Principal, R = Riskless Principal.capacity=P

contra

MPID / identifier of the counterparty.

contra=PFSI

ccy

An ISO 4217 (3-character) currency of the trade. (v1.5.97.13 or greater)

ccy=EUR

exch

Listing exchange for the security being traded (see list of exchange codes).

exch=NYQ

execBrokerMPID / identifier of the executing broker.execBroker=PFSI
internalContraIndicates the actual MPID / identifier of the counterparty when an order is routed via an order desk or another intermediary (when available). (v1.5.98.19.16 or greater)internalContra=PFSI
internalLiqIndicates the actual liquidity flag when an order is routed via an order desk or another intermediary (when available). Note: This value is case-sensitive.internalLiq=A
internalRouteIndicates the actual destination when an order is routed via an order desk or another intermediary (when available).internalRoute=EDGA

liq

Liquidity flag (see flags for various destinations). Note: This value is case-sensitive.

liq=A

lot

Considers quantity of trade:   (ODD = if quantity < 100 on an execution) 
(EVEN = if quantity divisible by 100) 
(MIXED = if > 100 and not divisible by 100 evenly)

lot=odd 
lot=even 
lot=mixed

multThe multiplier (sometimes called "contract size" for options and "value multiplier" for futures) associated with the traded instrument and used when computing profit and loss (v1.5.97.14.13 or greater)mult=100

penny

Set to true if trade is sub-dollar

penny=true

price

Execution price.

price>2

qty

Quantity of the execution. (v1.5.92.18 or greater)

qty=100

route

Exchange, Route or ECN. Different platforms

send

can send different values for the same venue (e.g. Sterling: NSDQ vs Laser: ISLD). Furthermore, some platforms can indicate multiple values for the same destination (e.g. Sterling: ARCA, ARCA= to mean ARCA).

route=ARCA

side

Buy or sell

side=buy

source

Where PropReports received the trade from (see list of source ids).

source=1

subType

For equities, this will be either etf or blank

subType=etf

symbol

Ticker symbol of the security being traded

symbol=IBM

tape

Trade reporting facility indicator (e.g. A, B, or C). See Tape Designations.

tape=A

timeExecution time in the format HH:MM:SS (v.1.6.5.85 or greater).time>=10:00:00

type

Type of instrument being traded (equity, option, future, index, fund, fx, bond)

type=option

underlyingSymbol

For options, the ticker symbol of the underlying security or index.

underlyingSymbol=YHOO

underlyingType

For options, the type of the underlying security (equity, future, index)

underlyingType=index

underlyingSubType

For options, the sub type of the underlying equity (etf or blank)

underlyingSubType=etf

Wildcards / Partial Matches

For = and != operators you can specify a partial value to match by using the wildcard symbol: % (PropReports version 1.5.97.14.74 and greater).  

This could be useful for capturing routes or symbols with a common prefix without having to list them all. For example, route=ARCA% will match any execution where route begins with ARCA (e.g. ARCA and ARCAPOP).  Likewise, symbol=/KC% will match all symbols that start with /KC (e.g. /KCH4 and /KCK5) .  

You can also specify the wildcard at the end of the text to match.  For example symbol=%.TO will match any symbol with a suffix of .TO.

Please be aware that entering a % anywhere else in the text or both at the beginning and the end will match the percent sign.  This means route=A%B will only match the exact route A%B  and route=%AB% will only match the exact route %AB%.

In the very rare case you need to match text that actually ends or begins with a percent sign you can escape it by prepending a '\'  For example route=XYZ\% will match the exact route and route=\%XYZ  will match the route %XYZ.

AND-ing conditions

Sometimes you may require ALL of a multiple set of conditions, and you can do so with the use of the semi-colon character ";". For example, let's say you want to select trades where both the destination is set to EDGA and the contra is set to BATS. 

...

    (route=ARCA),(contra=ARCA) => 0.003

Slicing 

Sometimes you may want to match one particular character placed in the nth position of a string in order to assess a fee based on that sliced character.  You can use brackets [ ] to do so and note that you can use this with non-numeric comparison operators (!= and =).   Using [] or [:] alone will have no effect.   Slicing is available beginning in version 1.6.5.68.

Example: In the Liq field there is an eight character string of "ABCDEFGH".  The following examples of slicing could be used:

Condition examplesFee Rule Syntax

liq[1] will match against A

liq[1]=A => 0.001
liq[2] will match against Bliq[2]=B => 0.001
liq[1:2] will match against ABliq[1:2]=AB => 0.001
liq[1:5] will match against ABCDEliq[1:5]=ABCDE => 0.001
liq[4:] will match against DEFGHliq[4:]=DEFGH => 0.001
liq[:4] will match against ABCDliq[:4]=ABCD => 0.001

When multiple sliced conditions need to be true, use the AND-ing semi-colon character ";"

liq[1] will match against A  and  liq[4] will match against D


liq[1]=A;liq[4]=D => 0.001

When one sliced condition needs to be true, use the OR-ing comma character ","

liq[1] will match against A  or  liq[4] will match against D


liq[1]=A,liq[4]=D => 0.001


Fees

Positive fees are charges, negative fees are rebates. There are four ways to assess a fee or rebate:

MethodExample
Per Share0.003     (1,000 shares @ $2 is charged 1,000 * 0.003 = $3.00).
Percentage of Value0.003%   (1,000 shares @ $2 is charged $2,000 * 0.003 = $6.00).

Fixed Amount per Execution (available in v1.5.92.51.3 or greater)

[10]       ($10 is charged)  
Pass Through (do not change)blank (the fee will be left as received from the data source)


You can also specify a minimum/maximum of two or three fees (available in PropReports v1.5.91.17 and greater):

ExampleDescription
max(0.003%, 0.003)Result will be the highest of :   (0.003 * trade value) or (0.003 * quantity)
min(0.003%, 0.003,
 3
 [3])Result will be the lowest of :   (0.003 * trade value) or (0.003 * quantity) or 3


Markup/Markdown

To mark up or mark down a received (original) fee you can specify a fee as follows (PropReports v1.5.97.14.36 and greater): 

(warning) Important: When using in Fee Rules plan, the fee that is being marked up/down is the computed Exchange Fee.  If you need to mark up/down a different trade fee, you will need to use this within a Per Execution plan type.

ExampleDescription
markup(0.003)Add a charge of 0.003 per share to the imported fee.
markdown([1])Reduce imported fee by $1

Blocks

To avoid repeating the same condition you can specify blocks.

Instead of:

route=EDGA;liq=A => -0.002
route=EDGA;liq=B => 0.0002

You can use:

route=EDGA {
    liq=A => -0.002
    liq=B => 0.0002
}

Blocks can also be nested.  For example: 

route=EDGA {
    penny=true {
        liq=A => -0.001%
        liq=B => 0.003%
    }
    liq=A => -0.002
    liq=B => 0.0002
}

Comments

Any lines that start with a '#' are ignored. Any text following a '#' at the end of a line will also be ignored. Comments are available in PropReports v1.5.91.17 and greater.

# this Comment line will be ignored
route=EDGA;liq=A => -0.002
route=EDGA;liq=B => 0.002   # another comment that will be ignored

...