Easy:
getting real-time data from a financial exchange
Harder:
ensuring that data is correct
Harder Still:
interacting with the exchange and sending markets/orders cancels etc.
Harder Than That:
maintaining a book with offsetting positions
Really Really Really Hard:
dealing with partial fills for new positions and/or exits
Approaching Impossible:
crossing those positions internally to save a trip and the spread, including partial filling, waiting for confirmation that outstanding markets
Worthy of Arthur:
doing all that, without loops, and a subsytem to minimize paying the spread via fancy bid-> agress conversion logic.
E.g. imagine you are long 5@100, looking for the market to goto 110$ in the next hour. Then you get short 10 @101, expecting the market to goto 99 in the next 30 minutes, in 30 minutes the market is 100- what do you do?
Lets say you cross internally. You take the 5 longs off the book, so you cancel the offers for those 5 longs- but wait- while thats happening the market goes to 107/109.
Now instead of 2 positions imagine 100, and instead of 1 price per position- imagine N distinct prices- and a market that jumps all over the place.
Wednesday, June 13, 2007
Monday, June 11, 2007
Some useful financial functions
thought these might be handy to a few people. I can't take credit for most:
Drawdown
EMA
Smooth Moving Average
Max Consecutive Losses
Convert Tics to Float and visa versa
Drawdown
drawdown:{[x]v:u?max u:(maxs x)-x;(u v;x?x[v]+u v;v)};
This returns a vector, the drawdown value, the index of the start and end of that period.
EMA
ema:{[n;x]b:1-a:2%n+1;c:(sum n#x)%n;((n-1)#0n),c,c{[a;b;x;y](a*y)+b*x}[a;b]\n _x};
Smooth Moving Average
smavg:{[n;x]((n-1)#0n),i,{(z+(x-1)*y)%x}[n]\[i:avg n#x;n _ x:0^x]};
Max Consecutive Losses
MaxConsectiveLosers:(max count each "0"vs raze string pl<0)
Convert Tics to Float and visa versa
f2tic:{[x]a:x - floor x;b:a%(1%32);c:floor(a -(floor b)%32)%(1%256);if[c=4;c:"+"];raze raze string(floor x),"-",string floor b, string floor c};
tic2f:{("I"$n#x)+((8*"I"$x n+1 2)+"0123+567"?x 3+n:x?"-")%256.}
Subscribe to:
Posts (Atom)