Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

F sharp - an overview

481 views

Published on

Type providers: Why is F# appealing in finance. Simplicity for functional data.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

F sharp - an overview

  1. 1. F# 3.0: Strongly Typed Programming in the Information Rich World
  2. 2. Proposition 1 The world is incredibly information-rich Christoph Santschi – dipl. Natw. ETHZ
  3. 3. Proposition 2 Modern financial enterprises are incredibly information-rich
  4. 4. Proposition 3 Our languages are information- sparse
  5. 5. Proposition 4 This is a Problem (especially for strongly typed Programming)
  6. 6. With F# we want to help fix this... The mechanism we're adding to F# is called Type Providers
  7. 7. LINQ + Type Providers = Language Integrated Data and Services
  8. 8. F#is... ...a practical, supported, interoperable, functional language that allows you to write simple code to solve complex problems.
  9. 9. Crossing boundaries “Fresh Code” Performance Professional Development Expressivity for Programming Mathematical tasks C++ C# Java Programming F# Python ... Financial engineering Algorithmic Trading DSL programming Math‐ ... ematica QF modelling
  10. 10. Why is F# appealing in finance?  Functional programming fits with financial work – Programmatic modelling – Compositional parallel & GPU programming – Domain specific languages – internal and external – Efficient execution  Plays differently for different roles: – Quants contribute to component development – Architects explore hard problems fluently – Developers tackle parallel and async programming
  11. 11. Simplicity: Functions as Values abstract class Command { public virtual void Execute(); } abstract class RoverCommand : Command { protected Rover Rover { get; private set; public RoverCommand(MarsRover rover) { this.Rover = rover; } } class BreakCommand : RoverCommand { public BreakCommand(Rover rover) : base(rover { } public override void Execute() { Rover.Rotate(-5.ø); } } class TurnLeftCommand : RoverCommand { } type Command = Command of (Rover -> unit) let BreakCommand = Command(fun rover -> rover.Accelerate(-1.ø)) let TurnLeftCommand = Command(fun rover -> rover.Rotate(-5.ø<degs>)) public TurnLeftCommand(Rover rover) : base(ro { } public override void Execute() { Rover.Rotate(-5.ø); }
  12. 12. Simplicity: Functional Data Tuple<U,T> Swap<T,U>(Tuple<T,U> t) { return new Tuple<U,T>(t.Item2, t.Item1) } } let reduce f (x, y, z) = f x + f y + f z return f(t.Item1) + f(t.Item2) + f (t.Item3); C# ReadOnlyCollection<Tuple<T,T,T>> Rotations<T>(Tuple<T,T,T> t) { new ReadOnlyCollection<int> (new Tuple<T,T,T>[] { new Tuple<T,T,T>(t.Item1,t.Item2,t.Item3); new Tuple<T,T,T>(t.Item3,t.Item1,t.Item2); new Tuple<T,T,T>(t.Item2,t.Item3,t.Item1); }); let rotations (x, y, z) = [ (x, y, z); (z, x, y); (y, z, x) ] } int Reduce<T>(Func<T,int> f,Tuple<T,T,T> t) { let swap (x, y) = (y, x)
  13. 13. Examples #2/#3: Finance companies Insurance Company Improves Time-to- Market with Enhanced Rating Engine Grange OV er ;eW Country or Region: UnitedStates Industry: Financial services—Insurance Customer Profile Headquartered in Co I umb us, Ohio, GrargeInsurance offers automobile, home,and business insurance protection to po I icyho Iders in 13 US. states.It em ploys 1,500 people. Business Situation To maintain its compefitivestancling and ifsreputationarnorg agents for beim] easyto do business with, Orange Insurance needed to keep its rating erkgineworking attop performarKe. Solulieff Llsi ng M icrosoftle Visua I Stud 'Off Tea m SystemandVisualF:rf,thecompany Insurance "With this streamlined development cycl rapidly deliver more powerful solutionsl they can deliver more choices and bette policyholdersthat much faster." GlennWaton, Associate Vice President, Personal Li nes, IT, Orange For nearly 75 years, Grange Insurance has offer products and services to policyholders in more states. To maintain its well-earned reputation company decided to enhance its rating engine- for rating policies and performing what-if modi analyses, and other vital activities. Working wit Group and using the Microsoft! Visual Studio! development environment and Microsoft ViSLIE ming language, Grange Insurance parallelized i husto men. Financial services firm Country or Region: Europe Industry: Financial services—Banking Customer Profile A la rge Europeanfinancial services firm offers banking and asset-management services to clients in 50 countries. In 2004, the bank earned morethan 11.5.$6 billion in income. SoftwareandServices  MicrosoftVisual Studio  MicrosoftVisual  MicrosoftVisualStudio2010  Technologies  Microsoft .NET Framework  WindowsPresentationFoundation Banking Firm Uses Functional Language to Speed Development by 50 Percent "VVe could not have developed 200 models in two yearswithout F# and Visual Studio. lt would have taken us at least twice as lang with our previaustools." Directerata la rge Europeant na ncia I servicefirm A large financial services firm in Europe sought new development tools that could cut costs, boost productivity, and improvethe quality of its mathematical models. To address its needs, the bank deployed Microsoft F#, the Microsoft .NET Framework, and Microsoft Visual Studio. It will sonn upgrade to Visual Studio 2010 and the integrated Microsoft Visual F#. With its new tools, the bank can speed development by 50 percent or more, improve quality, and reduce costs. Business Needs desktop and ona remotecluster of senyers
  14. 14. A Typeprovide is: “A compile-time component that provides a computed space of types and methods on-demand ...” “A compiler plug-in...” “An adaptor between data/services and the .NET type system...”
  15. 15. // Freebase.fsx // Example of reading from freebase.com in F# // by Jomo Fisher #r "System.Runtime.Serial #r "System.ServiceModel.Wbl #r "System.Web" #r "System.Xml" " et Query<'T>(query:string) : 'T = let query = query.Replace("'",""") let queryUrl = sprintf "http://api.freebase.com/api/service/mqlread?query=%s" "{"query":"+query+"}" open System open System.IO open System.Netopen System.Text open System.Web open System.Security.Authation let response = request.GetResponse() open System.Runtime.Seria let request : HttpWebRequest = downcast WebRequest.Create(queryUrl) request.Method <- "GET"request.ContentType <- "application/x-www-form-urncoded" How would we do this previously? [<DataContract>] type Result<'TResult> = { [<field: DataMember(N Code:string [<field: DataMember(N re> Result:'TResult [<field: DataMember(Nmessage"let data = Message:string } let result = try use reader = new StreamReader(response.GetResponseStream()) ] reader.ReadToEnd(); finally ] sponse.Close() ] Encoding.Unicode.GetBytes(result); let stream = new MemoryStream() stream.Write(data, 0, data.Length); stream.Position <- 0L [<DataContract>] type ChemicalElement = { [<field: DataMember(Nname")let resu> Name:string [<field: DataMember(Ningpoint")raise (Invali > let ser = Json.DataContractJsonSerializer(typeof<Result<'T>>) ] lt = ser.ReadObject(stream) :?> Result<'T> if result.Code<>"/api/status/ok" then ] dOperationException(result.Message)) BoilingPoint:string else [<field: DataMember(Nicmass")result.Result>] AtomicMass:string } let elements = Query<ChemicalElement array>("[{'type':'/chemistry/chemical_element','name':null,'boiling_point':null,'atomic_mass ':null}]") elements |> Array.iter(fun element->printfn "%A" element)
  16. 16. Note: F# itself still contains no data Open architecture You can write your own type provider
  17. 17. Language Integrated Data Market Directory
  18. 18. SQL
  19. 19. Web Services type Data = WsdlService<uhttp://teny. xignite • c ornixF ut ures .asmx?WSDL" let financials = DataiGetServiceContext() financials.GetQuotes "IBM" Fluent Typed Access To WSDL
  20. 20. F# 3.0: Queries let avatarTitles = query { for t in netflix.Titles do where (t.Name.Contains "Avatar") select t } let avatarTitles = query { for t in netflix.Titles do where (t.Name.Contains "Avatar") sortBy t.Name select t } let avatarTitles = query { for t in netflix.Titles do where (t.Name.Contains "Avatar") sortBy t.Name select t take 100 }
  21. 21. Conclusion 1 Huge Information Spaces can be Software Components
  22. 22. Conclusion 2 Multiple data standards with one simple mechanism
  23. 23. Conclusion 3 Integrated Data Access Empowers Both Programmers and Analysts
  24. 24. Summary The financial world is massively information rich Our enterprise financial programming needs to be information‐rich too Information‐richness changes how we think about programming and analysis

×