fsharp for trading - codemesh 2013
DESCRIPTION
F# for Trading talk at CodeMesh in London, 2013TRANSCRIPT
![Page 1: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/1.jpg)
F# FOR TRADING Phillip Trelford, TrayportCodeMesh London, 2013
![Page 2: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/2.jpg)
F#UNCTIONAL LONDONERS
Founded Feb 2010
600+ Members
50+ Meetups
3 Conferences
Topics Finance Machine Learning Reactive Programming Functional Programming
http://meetup.com/fsharplondon
![Page 3: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/3.jpg)
F# GROUPS WORLDWIDE
![Page 4: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/4.jpg)
F# IN FINANCE
Investment Banks
Hedge funds
Prop shops
Utilities
Insurance
![Page 5: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/5.jpg)
F# FOR PROFIT F# for Trading
![Page 6: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/6.jpg)
F# FOR PROFIT
Time to Market
Efficiency
Correctness
Complexity
![Page 7: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/7.jpg)
TIME TO MARKET
order of magnitude increase in productivity
GameSys
Source http://fsharp.org/testimonials
![Page 8: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/8.jpg)
EFFICIENCY
performance is phenomenal. We can now re-calculate the entire bank portfolio from scratch in less than a second
Handelsbanken
Source http://fsharp.org/testimonials
![Page 9: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/9.jpg)
CORRECTNESS
leads to virtually bug-free code
Fixed Income
Source http://fsharp.org/testimonials
![Page 10: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/10.jpg)
COMPLEXITY
F# is the night vision goggles I need when I go into the dark and attempt to solve previously unsolved problems
Byron Cook
Source http://fsharp.org/testimonials
![Page 11: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/11.jpg)
SHOW ME THE MONEY F# for Trading
![Page 12: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/12.jpg)
JOULE ENERGY TRADING SCREEN
http://www.trayport.com/en/products/joule
![Page 14: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/14.jpg)
ORDER – RECORD TYPE
F#
type Order = { LimitPrice : decimal Quantity : int Side : Side }
C#
a
![Page 15: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/15.jpg)
TIME IN FORCE – UNION TYPEtype TimeInForce = | GoodTillCancel | GoodForDay | GoodTillDate of DateTime
![Page 16: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/16.jpg)
THOUGHTWORKS TECH RADAR MARCH 2012
F# is excellent at concisely expressing
business and domain logic.”
Developers trying to achieve explicit business logic within an application may opt to
express their domain in F#
with the majority of plumbing code in C#
![Page 17: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/17.jpg)
CALCULATIONS F# for Trading
![Page 18: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/18.jpg)
CURRENCY CONVERSIONS
[<Measure>] type EUR[<Measure>] type GBPlet rateEurGbp = 0.783M<GBP/EUR>
// Converts amount in EUR to GBPlet euroToPounds (eur:decimal<EUR>) = eur * rateEurGbp
![Page 19: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/19.jpg)
UNITS OF MEASURE
![Page 20: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/20.jpg)
FCELL = F# IN EXCEL
![Page 21: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/21.jpg)
UNITS IN CELLStype formula =
| Neg of formula
| Exp of formula * formula
| ArithmeticOp of
formula * arithmetic * formula
| LogicalOp of
formula * logical * formula
| Num of UnitValue
| Ref of int * int
| Range of int * int * int * int
| Fun of string * formula list
![Page 22: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/22.jpg)
SPREADSHEET HORROR STORIES
anomaly, audit finding, bug, bungled, chaos, cock-up, corrupt, damage, debug, defect, deficiency, disaster, dubious,
embarrassment, error, erroneous, Excel, exposed, failed, failure, false, falsify, fault, faulty, fiasco, flaw, foul-up, fraud, fraudulent,
fubar, garbage, GIGO, glitch, hell, horror story, inaccurate, inadequate, inadvertent, incorrect, insecure, misunderstood, nightmare, non-compliance, not correct, oops, overestimate,
overstatement, problem, risk, rogue, serious, slip, snafu, suspect, suspicious, trap, typo, unchecked, uncontrolled, uncorrected,
uncovered, underestimate, understatement, undetected, untested, violation, weak, weakness, wrong
![Page 23: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/23.jpg)
TYPE PROVIDERS F# for Trading
![Page 24: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/24.jpg)
XML TYPE PROVIDER
<Order ClOrdID="123456" Side="2" TransactTm="2001-09-11T09:30:47-05:00" OrdTyp="2" Px="93.25" Acct="26522154"> <Hdr Snt="2001-09-11T09:30:47-05:00" PosDup="N" PosRsnd="N" SeqNum="521"> <Sndr ID="AFUNDMGR"/> <Tgt ID="ABROKER"/> </Hdr> <Instrmt Sym="IBM" ID="459200101" IDSrc="1"/> <OrdQty Qty="1000"/> </Order>
![Page 25: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/25.jpg)
R – TYPE PROVIDER
![Page 26: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/26.jpg)
WORLD BANK DATA
![Page 27: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/27.jpg)
GARBAGE F# in Finance
![Page 28: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/28.jpg)
.NET 4.5 GARBAGE COLLECTOR
Latency Mode Application Scenarios
Batch Command lineServer Side
Interactive LOB applications
LowLatency Trading Screens
SustainedLowLatency Financial Applications
![Page 29: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/29.jpg)
MONO SGEN GC
Run on
• Android
• iOS
• Linux
• Mac
(Example from GraphDB)
![Page 30: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/30.jpg)
SOLD F# in Finance
![Page 31: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/31.jpg)
F# KOANS
[<Koan>]let SquareEvenNumbersWithPipelineOperator() =(* In F#, you can use the pipeline operator to get the benefit of the parens style with the readability of the statement style. *)
let result = [0..5] |> List.filter isEven |> List.map square AssertEquality result __
![Page 32: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/32.jpg)
TRY IT BEFORE YOU BUY IT
![Page 33: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/33.jpg)
BUY THE BOOK
![Page 34: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/34.jpg)
GET THE T-SHIRT
![Page 35: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/35.jpg)
GET A JOB
![Page 36: FSharp for Trading - CodeMesh 2013](https://reader036.vdocument.in/reader036/viewer/2022081400/5549111db4c9056b458be540/html5/thumbnails/36.jpg)
QUESTIONS?
Community
F# Foundation http://fsharp.org
F#unctional Londoners http://meetup.com/fsharplondon
Twitter #fsharp
Me
Blog http://trelford.com/blog
Twitter @ptrelford