John,

You might recall we spoke a few weeks ago about a system with more 
intelligence for out-of-hours trading than just leaving the products on Last 
Trade is Mid.

Attached is a suggestion for how such a system might work. It builds on 
Offset to Last Trade functionality.

The simplified description is: It tracks two variables: Intensity(Speed) and 
Bias (Buy or Sell emphasis).  As Intensity increases, the Spread increases. 
As Bias increases, the Offset increases.

I'll call later to see what you think of the idea.

Dave

 

Program Criteria

The formula which defines the trading decision-making program will need to 
work with several criteria/inputs/definitions. These might be:

Intensity (Speed) - The average time between transaction attempts, regardless 
of whether they are buys or sells. Measured as a moving average over the last 
[Intensity Factor] transactions by comparing the timestamp of the transaction 
Tibco messages for the Product.
Obviously, the lower the Intensity calculation, the higher the transaction 
flow. Therefore a high Intensity number indicates low transaction flow.
Intensity Factor - The number of transactions to be included in the moving 
average Intensity calculation. A possible value for this might be [4].
#Buys - The number of Buys which have occurred.
#Sells - The number of Sells which have occured.
Transaction Count - Could be either #Buys or #Sells (whichever last occured).}
Buy Offset - The Offset value which will be applied if a Buy occurs.
Sell Offset - The Offset value which will be applied if a Sell occurs.
Offset Reversion Ratio (ORR)- The amount by which the Buy Offset should be 
reduced if a Sell occurs (or amount Sell Offset should be reduced if a Buy 
occurs). A possible value for this might be [0.3]. If the application of the 
ORR results in a reduction of less than 1, then the reduction shall be 1.
Transaction Reversion Ratio (TRR)- The amount by which #Buys should be 
reduced if a Sell occurs (or amount #Sells should be reduced if a Buy 
occurs). A possible value for this might be [0.3]. If the application of the 
TRR results in a reduction of less than 1, then the reduction shall be equal 
to 1.
Spread Minimum - The minimum Spread value allowed. A possible value for this 
might be [0.04]
Spread Maximum - The maximum Spread value allowed. A possible value for this 
might be [0.50]
Offset Minimum - The minimum Offset allowed for both Buys and Sells. A 
possible value for this might be [0].
Offset Maximum -The maximum offset allowed for both Buys and Sells. A 
possible value for this might be [0.50]
Initial Offset - The Buy and Sell Offset used when the program is started
Initial Spread - The Spread used when the program is started
Spread-Offset Minimum - The minimum amount by which Spread must exceed 
Offset. Prevents a possible arbitrage opportunity for the customer. A 
possible value for this might be [0.01]
Dead Interval - The period of time which must pass before the program will 
recalculate the above Criteria, if no transactions have taken place during 
the Dead Interval. A possible value for this might be [240] seconds.

Program Outputs

The program should output the following variables as a result of combining 
the above Criteria in a user-defined Formula:

Spread (integer) - as per current Stack Manager
Offset (integer) - as per current Stack Manager
Suspension (boolean) - Whether or not the Product should be suspended. 
Normally "False"


Program Interface and Operation Principles

The user should be provided with a GUI which will allow them to define a 
relationship among the above Criteria, which will produce and apply the 
Outputs to a particular Product. This relationship would be defined with 
Intensity Formulas and Transaction Formulas. 

Every time a Transaction occurs, or a Dead Interval passes, the Criteria will 
be recalculated and the user-defined formulas will be reviewed by the 
program. If a Dead Interval passes without any transactions taking place, 
then Intensity = Intensity +240 and #Buys=#Buys-TRR and #Sells=#Sells-TRR and 
Buy Offset = Buy Offset- ORR and Sell Offset = Sell Offset - ORR. 

If the user-defined Formulas (see following) indicate that a change in spread 
should occur, then if the Offset is zero (in the case of a trade occurring) 
or if no trade has occured (during the passing of a Dead Interval), the 
system shall perform a Last Trade is Mid calculation around the last 
transaction, adjusting the buy and sell prices according to the new Spread 
value.

Any adjustment to the Spread shall respect the Spread-Offset Minimum. If a 
reduction in the Spread should violate the Spread-Offset Minimum, then the 
Buy Offset (or Sell Offset, or both as appropriate) shall be reduced 
accordingly. Similarly, if the Offset is increased by a Transaction Formula 
to a level greater than the Spread, the Spread shall be increased to maintain 
the Spread-Offset Minimum.

GUI/Formulas Example:

Constants
Intensity Factor: [4]
Dead Interval: [240]
Offset Reversion Ratio (ORR): [0.3]
Transaction Reversion Ratio (TRR): [0.3]
Spread Minimum [0.04]
Spread Maximum [0.50]
Offset Minimum [0]
Offset Maximum [0.49]
Spread-Offset Minimum [0.01]

         INPUTS           OUTPUTS
Intensity Formula
Formula # Intensity   Spread Offset  Suspension
S1  >220   -0.01 n/a F
S2  <30   +0.01 n/a F
S3  <10   +0.02 n/a F

Transaction Formula
Formula # # Transactions  Spread Offset  Suspension
V1  <4   n/a -0.01 F
V2  >3   n/a +0.01 F
V3  >5   +0.01 +0.02 F
V4  >10   +0.02 +0.04 F
V5  >15   +0.04 +0.15 F
V6  >20   n/a n/a T
    
Note that #Transactions would be #Buys or #Sells, as appropriate. Note also 
that #Buys and #Sells are not intended to be an absolute count, but rather 
are a moving measure of the number of buys or sells which have recently 
occured.

In this example, all Constants and Formulae are editable by the user through 
the GUI.


Simulation

Obviously, if we want to proceed, we will want to conduct several simulations 
to prove concepts and evaluate responsiveness. However, to give some idea of 
how the above might work when a market starts to run in a particular 
direction, please see the attached:




Additional Features

System Notifications

There should be two kinds of notifications for the Robotrader, which will be 
similar to Stack Manager Garbage Checks: Warning and Failure levels for both 
Offset and Price. The warning levels will trigger a pager message. The 
Failure levels will trigger a pager message and the product will be 
automatically suspended. The Price checks will be against prices input by the 
trader (not relative price movements, but actual price). There should be both 
maximum and minimum price checks (e.g. gas is trading at $5.50. The 
notification levels could be $8 at the top end and $2 at the bottom end). 
Offset checks will only be against a maximum value.




Dave