Quantax ist eine Applikation für das Markt-Risiko-Management im professionellen Banking.
Der Vortrag wird Quantax kurz vorstellen und dann vor allem auf die Lektionen, die wir in den 10 Jahren der fortschreitenden Entwicklung gelernt haben, eingehen. Die von uns entwickelte Hybrid-Datenbank (Python-Objekte, partiell in SQL Server abgebildet) bildet dabei einen Schwerpunkt.
Softwerkskammer Chemnitz Special Pecha Kucha Night
Seit 10 Jahren mit Python: Quantax, ein Risk-Management-System für Banken
1. Seit 10 Jahren mit Python:
Quantax, ein Risk-Management-System
für Banken
Martin Gfeller
6. Oktober 2011
2. Finanz und Marktrisiko, Systeme
2
• Antwort auf die Fragen:
– Wie stehe ich im Markt?
Martin Gfeller, Quantax, PyCon DE 2011
– Was passiert, wenn sich der Markt bewegt?
– Wie kann ich mich schützen (sog. Hedging)?
• Professioneller Markt
• Marktführende Systeme grosser Hersteller aus den 90-Jahren
• Client/Server, RDBMS
• Mehrschichtige, komplexe Infrastrukturen
• C, C++
3. Quantax
3
• 1999 aus Test-Suite für grosses System entstanden
• Heute vollständiges System für professionelles post-trade
Martin Gfeller, Quantax, PyCon DE 2011
Risikomanagement im Handel und Asset Management
– 62 Asset-Typen (wie Aktie, Rente, Zinsswap, Credit Default Swap, u.v.a.)
– N-dimensionale "Pivot" Reports, Echtzeit-Verarbeitung
• Codezeilen: 2001 – 23.000, 2011 – 100.000
• Neu im Markt
• Entwicklung nahe am Business
– Fachentwickler (programmierende Domänen-Experten)
• Flexible Infrastruktur
– Programmierumgebung
– "Single Layer"
4. Technologien
für Flexibilität und Marktnähe 4
Client
• 100% HTML + CSS + JavaScript
Martin Gfeller, Quantax, PyCon DE 2011
• JQuery
• IE>7, Firefox, Chrome
Server
• Python
• Komplexes fachliches Objekt-Modell
• ZODB
• ZOPE
• NumPy, etwas SciPy
• Windows
5. Quantax GUI
5
• Menus, Links, Forms,
Tabellen-Output
Martin Gfeller, Quantax, PyCon DE 2011
• Einfach zu verstehen,
entwickeln, integrieren
• ZOPE DTML, External
Methods
• Forms sind nicht sexy….
• … Benutzer möchten lieber
mit Drag und Drop etwas
„zusammenklicken“…
6. Quantax GUI: Drag & Drop mit JQuery
6
Martin Gfeller, Quantax, PyCon DE 2011
7. Datenbank: ZODB
7
• Quantax Objektmodell ist komplex (Referenzen, Subobjekte,
Inheritance)
Martin Gfeller, Quantax, PyCon DE 2011
• Entwickler sagen über ZODB:
– API "grosser Dictionary" ist toll!
– Pickles (serialisierte Objektbäume) sind toll!
– Fremdschlüssel und schnelle Selektion nur über Add-Ins (Indices)
– Objekt-Cache (i.W. Connection) per Thread
– Quantax hat lang laufende Berechnungen (Monte-Carlo)
– Extrem viele gemeinsame Objekte aller Threads
– Wir liessen alle Threads mit einer Connection laufen
– Missbrauch wird bestraft, aber Shared Cache ist ein Muss
• Kunden-IT sagt:
– „Was ist denn das für ‚ne Datenbank“?
– „Wir wollen nur eine relationale DB (die wir kennen)“
8. SwanDB, eine "hybride" Datenbank
8
• SwanDB
– Pickles wie ZODB
Martin Gfeller, Quantax, PyCon DE 2011
– Keys und ausgewählte Attribute in Tabellen
– MS SQL Backend
– Dictionary API kompatibel zu ZODB
– Alle Ideen von ZODB, aber neu implementiert
– SwanDB ist ein Python-Package
– 4300 Zeilen Python, 500 Zeilen T-SQL
– Ziel: Kein C-Code und trotzdem schneller als ZODB (für uns)
– Aggressives Caching, Memory Management
• Ich schlafe ruhig mit SwanDB („Sleep well at night“)
– “Oracle lets me sleep at night”, Philip Greenspun, Web Tools Review, 1998
9. Persistentes Objekt = Pickle und Kolonnen
Deklaration:
SqlTable.SqlTable(
SqlTable.Column('name',str,primary=True),
SqlTable.Column('ccy',str),
)
Persistentes
Objekt Pickle (BLOB) Kolonnen
name 'GR' name ccy
rating 'CCC'
ccy 'EUR' GR EUR
COMIT | 9
10. SwanDB Beispiel
10
• Bei allen griechischen Bonds die Währung wechseln:
Martin Gfeller, Quantax, PyCon DE 2011
• Schaut wie ZODB aus (mit Absicht!)
• Interaktiv ausführbar, Zeile für Zeile testbar
• Komplexere Logik möglich, im Gegensatz zu SQL
• Ich kann in einer uniformer Schicht denken …
… und werde dafür nicht bestraft.
12. SwanDB Lessons Learned
12
• Locks in Python, SQL Server
– Deadlocks zwischen Python Prozessen, Threads, SQL Server
Martin Gfeller, Quantax, PyCon DE 2011
– Pessimistisches Locking von SQL Server ist extern schwierig zu
kontrollieren
• Cache is King!
– Anzahl "Roundtrips" zu DB minimieren
• ZODB ist clever und smart! Jim Fulton wusste, was er tat!
– z.B. optimistisches Locking
• Hybride Datenbank war schwieriger als gedacht…
• … aber schlussendlich performant und in Produktion bewährt
• … Lösung ist auf Quantax zugeschnitten
• Kunden sind glücklich mit SQL Server Tools (Backup, Restore,
Replication, Monitoring)
13. Reengineering:
Copy / Paste / Improve Code beseitigen 13
• Fachentwickler denken nicht wie Informatiker
• Code wird für neuen Zweck modifiziert und dort verbessert
Martin Gfeller, Quantax, PyCon DE 2011
• Scheu vor Änderungen: "If it ain't broke, don't fix it"
• “If it ain't broke, don't fix it" is the slogan of the complacent, the arrogant or the
scared. It's an excuse for inaction, a call to non-arms [Colin Powell]
• Re-Engineering
– Finden von gemeinsamer Code-Basis
– Häufig nicht neu schreiben, nur neu anordnen
– Erkennen, wenn Konzepte nicht mehr erweiterbar sind
– Grenzen des rein technischen Re-Engineerings
• Fachentwickler sind während Re-Engineering Tester!
14. Wachstum, verbesserte Modularität
14
4'500 200 5.60
4'000 180 5.50
3'500 160
5.40
Martin Gfeller, Quantax, PyCon DE 2011
140
3'000 5.30
120
2'500
per Class
5.20
LOC
100
2'000
5.10
80
1'500
5.00
60
1'000
4.90
40
500
20 4.80
0
Jan Jan Jan Jan Jan Jan Jan Jan Jan 0 4.70
2003 2004 2005 2006 2007 2008 2009 2010 2011 Jan Jan Jan Jan Jan Jan Jan Jan Jan
Okt 2003 Jan 2005 Okt 2006 Aug 2007 Mrz 2011 200320042005200620072008200920102011
Modules 185 239 300 332 462 Okt 2003 Jan 2005 Okt 2006 Aug 2007 Mrz 2011
Classes 281 366 508 593 832 LOC / Method 37 35 27 26 24
Methods 1'400 1'976 2'791 3'215 4'255 LOC / Class 186 190 150 139 121
Functions 481 1'047 1'416 1'421 1'662 Methods / Class 4.98 5.40 5.49 5.42 5.11
15. Plugins
15
• Plugin-Punkte in einer Fachapplikation
– Opportunität für Fachentwickler
Martin Gfeller, Quantax, PyCon DE 2011
• Interface für Python, Web Service (REST), SQL Server
• Richtige Punkte zu finden heisst, die Zukunft vorauszusagen…
– oder Änderungsanforderungen zu analysieren
• Der Fachbenutzer soll zum richtigen Gebrauch "verführt" werden
– "natürliches" API steht zur Verfügung
• Richtige Abstraktionsebene zu finden ist schwierig
– Fehler sollten von vornherein vermieden werden können
– Typisierung kann geprüft werden, ist aber nur ein kleiner Aspekt
16. Lessons learned
16
• Fachentwickler sind toll!
• Sie sind produktiv, da alle Entwicklung in einem Layer (Python) erfolgt
Martin Gfeller, Quantax, PyCon DE 2011
• Bei langlebigen Applikationen müssen sie gezähmt werden
• Plugins sind dazu ein möglicher Ansatzpunkt
17. Ich wünsche mir von Python...
17
• Bessere Overall Performance (Benchmark ist Java, nicht C++)
– PyPy
Martin Gfeller, Quantax, PyCon DE 2011
– Windows 64-bit
– NumPy, ODBC
– GIL ist nicht schlimm, interpretativer Overhead jedoch schon
• als Windows-Benutzer
– wir kompilieren nicht
– Setup ist uns daher fremd – copy package
– Möglichst wenige C-Extensions
– dafür aber pre-compiled für 32/64 bit
• Als Zope Benutzer
– Welches Framework erfüllt meine zukünftigen Anforderungen?
– Modular, wir brauchen nur gewisse Komponenten
– Performant
– einfach aufzusetzen
18. Contact
information 18
Swisscom IT Services Finance AG
Martin Gfeller
Pflanzschulstrasse 7
Martin Gfeller, Quantax, PyCon DE 2011
CH-8004 Zürich
Schweiz
Phone +41 58 223 04 23
Mail martin.gfeller@swisscom.com
www.swisscom.ch/finance
19. Backup Slides
19
Martin Gfeller, Quantax, PyCon DE 2011