David:
Do you have a simulation set up that will allow me to simulate trades by pushing a buy or sell button and will move the two way so i can try simulating actual market cicumstances?


From:	David Forster/ENRON@enronXgate on 05/08/2001 09:55 AM
To:	John Arnold/HOU/ECT@ECT
cc:	Savita Puthigai/ENRON@enronXgate 
Subject:	


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