Last Updated on 9 May, 2023 by Håkan Samuelsson
Python är ett programmeringsspråk som relativt enkelt kan hjälpa dig att effektivisera och automatisera din handel för bättre resultat. I den här artikeln har Samuelssons Rapport samlat information om hur Python kan användas för att skapa och backtesta tradingstrategier, vilka fördelar och nackdelar det har samt resultat från backtester och exempel med Python.
Vill du ha chans att lyckas med finansiell trading behöver du använda dig av tekniska handelsstrategier som möjliggör gör en mer automatiserad handel snarare än en manuell sådan. Att ständigt sitta och för egen maskin bevaka skärmar och analysera marknadsrörelser för att identifiera potentiella möjligheter är både ineffektivt och riskfyllt. Som människa har du inte samma uthållighet eller kapacitet som ett tekniskt system, och risken är dessutom stor att du fattar förhastade beslut baserade på känsla och impuls snarare än logik och förnuft.
Så som de finansiella marknaderna ser ut idag, till stor del baserade på och beroende av fintech, behöver du som trader vända dig till algoritmisk trading för att kunna nå framgång – och det är här Python tradingstrategi kommer in i bilden. För att kunna lyckas med Python behöver du dock veta hur den fungerar, när den bäst används och vad som är viktigt att tänka på när du använder dig av strategin. Allt det och lite till får du svar på i guiden nedan.
Vad är Python?
Python är ett öppet objektorienterat programmeringsspråk för funktionell programmering för olika syften. Det är alltså ingen tradingstrategi i sig, utan ett programmeringsspråk som kan användas för att bygga strategier för algoritmisk trading. Python är med sina högkvalitativa inbyggda datastrukturer och välutvecklade dynamik ett utomordentligt programmeringsspråk för snabb utveckling av olika applikationer och system. Det passar också mycket bra för att binda ihop och sammanlänka olika redan färdigutvecklade strukturer.
Sm programmeringsspråk stödjer Python flertalet olika programmeringsparadigm – inklusive objektorienterad, strukturerad och funktionell programmering. Språket används idag i stor utsträckning i många olika applikationer, däribland strategier och algoritmer för automatiserad trading.
En av Pythons stora framgångsfaktorer är att alla dess delar och strukturer är öppna och tillgängliga helt gratis för kommersiellt bruk. Detta har bidragit till att Python under de senaste åren har vuxit till att bli det mest populära programmeringsspråket för att utveckla strategier och algoritmer för finansiell trading.
Läs mer: Algotrading
Python och automatisk trading
En algoritm för trading är ett dataprogram designat för att följa och analysera en marknade, identifiera tradingmöjligheter, öppna och exekvera (avsluta) positioner samt hantera all handel utifrån de förvalda inställningar som gjorts i programmet. De förvalda inställningarna kan antingen baseras på matematiska uträkningar, eller på KPI:er som pris, timing och kvantitet.
Finansiell handel med färdiga, automatiserade algoritmer kallas just för algoritmisk handel, eller algo trading. Algoritmisk handel används bland annat flitigt av alla världens storbanker och finansiella institutioner på såväl Wall Street som andra börser för att handla dels traditionella tillgångar som aktier och index, såväl som mer moderna instrument som kryptovalutor. En välutvecklad tradingalgoritm som implementeras väl kan analysera marknaden och utföra trades på ett sätt som är många gånger mer effektivt och träffsäkert än vad än vanlig människa någonsin kan vara kapabel till.
För att implementera algo trading i din handel behöver du använda kod, det vill säga ett programmeringsspråk, för att designa din strategi så som du vill ha den – med specifika regler för hur, var och när en position ska öppnas och stängas. Om du inte vill eller har möjlighet att bygga algoritmen själv kan du anlita en programmerare att göra det, alternativt köpa em färdig strategi. Idag är Python ett av de absolut vanligaste språken för att koda sådana algoritmer.
Utöver tradingsammanhang används Python också i stor utsträckning inom dataanalys, riskhantering, blockkedjeteknik samt vid utveckling av många digitala banktjänster. Språket används flitigt av såväl institutioner och företag som privata investerare för att utföra en mängd funktionella åtgärder – däribland backtesting, exekvering av handelsordrar samt kvantitativa undersökningar.
För kvantitativa traders är Python särskilt populärt då det språket gör det möjligt att bygga avancerade statistiska mallar med hjälp av vetenskapliga bibliotek som Panda, Zipline, Scikit-learn och NumPy. Dessa bibliotek uppdateras, och förbättras därmed, dessutom varje dag vilket förstås är positivt.
Är Python då det enda programmeringsspråket för att bygga algoritmer för finansiell trading? Nejdå, det finns många andra – men Python är det överlägset mest populära. Tack vare att majoriteten av alla strategier och algoritmer de facto är byggda med Python, är det enkelt att exempelvis byta utbyta koder med andra traders. Python har på så sätt blivit något av ett universellt programmeringsspråk inom trading.
Varför använda Python?
Pythons främsta fördelar är dess enkelhet, det faktum att det är tillgängligt för alla samt att det är det mest dominerande programmeringsspråket för finansiella strategier inom trading. För dig som handlare bjuder Python på många olika möjligheter och användningsområden.
Python kan till exempel användas för att analysera stora mängder data i syfte att öka sin insikt om en marknad, identifiera de bästa exekveringstillfällena och med det förbättra sina vinstmöjligheter. Programmeringsspråket kan även användas för att analysera och studera annan typ av data – till exempel text. Överlag är möjligheterna att analysera enorma mängder data och datainställningar med Python möjliga eftersom språket kan användas för att kort och gott bygga egna dataanslutningar.
Utöver att studera och analysera data med hjälp av Python, är ett givet användningsområde förstås också möjligheten att skapa egna tradingmekanismer. Med Python kan traders bygga egna handelssystem med specifika regler för när positioner ska öppnas och exekveras, samt i det även implementera processer för effektiv risk- och orderhantering. Vidare kan traders också nyttja Python för att utveckla strategier för backtesting, vilket är ett av de mest populära användningsområdena för Python.
Värt att tillägga om enkelheten som vi nämnde i början av stycket, är också att Python – trots de många möjligheter som programmet erbjuder – faktiskt går betydligt snabbare och enklare att lära sig jämfört med andra vanliga programmeringsspråk, till exempel C++. Även mindre erfarna traders, och traders med mindre kunskap inom programmering, kan relativt snabbt lära sig att både bygga strategier i Python, likväl som att använda det i backtesting.
Vad innebär backtesting?
Backtesting är ett återkommande uttryck i den här guiden, men för den som är ny inom trading kanske begreppet ännu inte är helt känt. Låt oss förklara det lite kort.
Backtesting inner att du bedömer potentialen hos en viss tradingstrategi genom att testa den på historiska data innan du går live och använder den i skarpt läge. Det är ett sätt att försäkra dig om att en strategi är funktionell, hållbar och har potential att ge de resultat du önskar. Ett backtest har alltid strikta förprogramerade regler för när en position ska öppnas och stängas, vilket ger dig en bra bild av precis hur väl den strategi du testar har fungerat i tidigare marknadsförhållanden.
För att kunna genomföra backtesting i algoritmisk handel måste strategin du vill testa kodas in i en specifik tradingalgoritm, för vilket du behöver hjälp av ett programmeringsspråk som Python. Strategin testas sedan på historiska data från marknadsförhållande ungefär jämförbara med nuvarande.
Hela syftet med backtesting grundar sig i en tanke om att en strategi som har presterat väl historiskt, sannolikt kommer att göra det även i nuvarande och framtida marknadsförhållande. Oftast är traders mer trygga med att implementera en strategi som de har sett fungerat och gett bra resultat tidigare.
Viktigt att nämna är dock att bra resultat i backtesting aldrig ska misstas som en garanti för att strategin kommer att ge samma utfall även framåt. Backtesting ger en värdefull indiktion – men inga löften. Det är en simulering som hjälper dig att se dels hur väl en strategi har presterat i tidigare marknadsklimat, dels om det finns några buggar i algoritmen som måste åtgärdas.
Vidare är det också bra att ha i åtanke att backtesting sällan inkluderar några avgifter, vilket ju mer eller mindre alltid tillkommer i live trading. Resultaten i ett backtest blir alltså något sminkade. För en mer korrekt bild av ditt backtest måste du ta höjd för avgifter och hur de kommer påverka din vinstmarginal.
Läs mer: Om backtesting
Är Python bra att använda vid backtesting?
På den här frågan ger vi ett solkart, tydligt svar; ja, Python är ett utmärkt programmeringsspråk att använda vid backtesting. Det har fått utstå viss kritik för att inte vara tillräckligt snabbt, men trots det har Python länge varit och fortsätter att vara det föredragna språket för att backtesta tradingstrategier. Sannolikt kommer det att även att vara det mest populära alternativet framgent, såvida inget nytt plötligt dyker upp på marknaden.
Bakom Pythons framgångar kan flera faktorer identifieras. Precis som nämnts tidigare i artikeln är Pythons enkelhet – vilket i sin tur gör det förståeligt och lättillgängligt för många – samt dess förmåga och kapacitet att samtidigt analysera komplexa data dess främsta styrkor. Det kan användas för validering av strategier i såväl testmiljöer som i live trading. I kombination med bibliotek som Panda och Scikit-learn kan Python med lätthet användas för att designa och backtesta vilken typ av handelsstrategi som helst.
Vidare har Python även möjlighet att läsa av och analysera både externa datafiler och streamad data tillsammans med en specialddesignad plattform särskilt utvecklad för att kunna användas till en uppsjö av olika modelltyper för strategibyggande – däribland de mest innovativa och moderna på marknaden just nu.
Sist men inte minst har Python över åren också skapat ett världsomspännande nätverk av användare. Programmeringsspråket erbjuder i dagsläget minst 6 olika ramverk/nätverk med öppen källkod för backtesting.
Ramverk/plattformar för backtesting med Python
Nedan listar vi några vanliga plattformar för backtesting med Python; PyAlgoTrade, Bt backtesting med Python, backtrader, fastquant, LEAN och Zipline.
PyAlgoTrade
PyAlgoTrade är ett väldokumenterat ramverk för backtesting med Python. PyAlgoTrade stödjer data från såväl Google Finance, som Yahoo! Finance, NinjaTrader samt Quandi och alla andra typer av CSV-baserade tidsramar. Systemet stödjer också flera olik ordertyper; market, stop, stop limit och limit. Slutligen är det även tillåtet med Bitcoinhandel på PyAlgoTrade och systemet stöttar även Twitter för möjlighet att trada på events publicerade där i realtid.
PyAlgoTrades främsta fördelar är:
- Mer flexibel än andra jämförbara plattformar.
- Dokumentationen är utmärkt.
- Stöd för eventbaserad backtesting samt stöd för integration med TA-lib.
Och dess nackdelar:
- Sämre utbud av strategiska analyser.
- Saknar stöd för Pandas olika moduler och objekt.
Bt- backtesting med Python
Bt backtesting är ett ramverk eller ett system särskilt utvecklat för att testa kvantitativa tradingmetoder. Syftet med Bt backtesting är att möjliggöra skapandet av enkla, återanvändbara, skalbara och flexibla block av strategier för att i sin tur bana väg för möjligheten att ta fram fullständiga avancerade, komplexa tradingstrategier.
Bt backtesting med Python är särkilt väl lämpat för backtesting av portföljbaserade STS (Secure Trading Systems) med algoritmer designade för att rebalansera portföljinnehav.
Fördelar med Bt backtesting:
- Detaljerad statistik som gör det enkelt att jämföra olika strategier.
- Enkelt att få rapporter och diagram i pdf-format.
- Systemet är uppbyggt i en teknisk trädformation, vilket gör det enkelt att skapa avancerade algoritmer för automatisk trading.
- Bt backtesting är helt och hållet kodat i Python programmeringsspråk, vilket medför brett stöd i olika system.
Nackdelar:
- Bt backtesting stödjer inga strategier som är kodade i andra språk än Python.
- Långsamt system jämfört med andra plattformar.
Backtrader
Backtrader är ett av de mest välutvecklade systemen bland de skapade i Python, med mycket bra dokumentation samt en blogg som uppdateras regelbundet och därtill även ett online community för att användare att mötas i.
Plattformen stödjer många olika typer av format, inkluderat Panda, CSV-filer, blaze iterators samt data i realtid från tre olika onlinemäklare; Interavtive Brokers, Oanda för valutahandel och Visual Charts. Systemet stödjer dessutom åtkomst till alla dessa parallellt, vilket innebär att du inte behöver välja en i taget. Åtkomst kan dessutom ske i olika tidsramar.
Fördelar med Backtrader:
- Mycket enkelt att skapa egna indikatorer.
- Stödjer både backtesting och live trading.
- Tydlig dokumentation.
- Enkelt att använda även för de som är nya för Python som programmeringsspråk.
- Många olika analytiska redskap att välja bland – däribland SQN, SharpeRatio och TimeReturn.
Nackdelar med Backtrader:
- Kan inte riktigt hantera mycket stora datamängder.
- Det kan bli nödvändigt att använda analyzers i koden.
Fastquant
Ett av de absolut enklaste systemen för backtesting med Python, med vilket du faktiskt kan backtesta en hel strategi med endast ett par tre raders kodning i Python. Syftet med Fastquant är att uppmuntra handlare till mer automatiserad trading genom att göra kvantitativa analyser lättillgängliga för alla – även de med liten eller ingen erfarenhet av algotrading.
Fördelar :
- Toppbetyg i användarvänlighet.
- Kräver mycket lite kodning.
- Enkelt att skapa egna strategier med bara ett fåtal rader Python-kod.
- Lätt att integrera statistiska modeller.
Nackdelar:
- Snabbheten lämnar lite att önska – systemet är något långsammare jämfört med andra liknande plattformar.
- Stödjer likt Bt backtesting endast Python, vilket innebär att du inte kan implementera strategier kodade i andra språk.
LEAN (Quantconnect)
LEAN, vilket även går under namnet Quantconnect, är ett system med öppne källkod, utvecklat för såväl backtesting som live trading och möjligheten att enkelt kunna göra research för strategibyggande. Smidigt system med snabb integration av trading algoritmer och stöd för alla kända leverantörer av data.
Fördelar:
- Mycket bra nätverk i vilket användare kan kommunicera med varandra för att inspirera, inspireras samt utbyta erfarenheter och kunskap.
- Snabbare än många andra jämförbara plattformar.
- Stödjer fler språk än Python, vilket medför ökad flexibilitet och bättre användarmöjligheter.
- Fungerar för både live trading och backtesting.
Nackdelar:
- Verktyget för att analysera strategier behöver förbättras.
- Grunden till LEAN är kodad i C#. Kan upplevas komplicerat och svåranvänt av de som inte är kunniga i C#.
Zipline
Sist men inte minst förtjänar även Zipline att lyftas – en algoritmisk tradingsimulator som kan användas för både backtesting och live trading. Zipline utvecklades av företaget Quantopian, varför systemet kan användas dels på egen hand, dels som en del i komplett STS med Quantopian och Zipline för både tester och utveckling. Åtkomst till system får du via webbaserade IPython Notebook. Systemet är lättillgängligt och enkelt att använda.
Bästa bibliotek för backtesting i Python
En vanlig fråga vi får om Python är vilket det bästa biblioteket för backtesting är. Det korta svaret på den frågan är att det är väldigt individuellt. Det som fungerar bäst för en trader, behöver inte nödvändigtvis göra det för en annan. För att hitta det bästa biblioteket för backtesting i Python utifrån dina preferenser, behöver du förmodligen prova dig igenom ett stort antal. Tittar vi på vilka bibliotek, det vill säga system, som generellt verkar mest populära bland användare sticker framförallt dessa två ut: QuantConnect (LEAN) och Backtrader. Bägge systemen har liksom alla andra både fördelar och nackdelar, men utifrån användarantal verkar det som att fördelarna överväger nackdelarna för många. Dessa två är det mest populära systemen för backtesting baserat på Python.
Quantconnect: Snabbt, enkelt att använda och är dessutom kompatibelt med fler programmeringsspråk än Python. Systemet kan användas för både backtesting och live trading, men traders bör vara kunniga i C# för att kunna nyttja det.
Backtrader: Mycket enkelt att använda även för nybörjare i Python, med tydlig kod och flera olika analyzers till hjälp, som TimeReturn, SQN och SharpeRatio. Kan precis som Quantconnect användas för både backtesting och live trading, men har inte riktigt kapaciteten som krävs för att processa mycket stora mängder data.
Fördelar och nackdelar med att använda Python
Nämn det system som inte har både fördelar och nackdelar, styrkor och svagheter. Precis som med allt annat finns både plus och minus med Python – men, lyckligtvis väger plussidan betydligt tyngre.
De största fördelarna med Python är följande:
- Användarvänligt: Systemet gör det enkelt att både skriva och implementera kod för algoritmiska tradingstrukturer.
- Skalbart: Python erbjuder med sin enorma datakapacitet utmärkta möjligheter att skala upp din portfölj. Systemet gör det enkelt för traders att dela funktion och information mellan olika program.
- Lättillgängligt: Språket är betydligt lättare att både läsa och skriva och är därmed mer tillgängligt för fler.
- Tidseffektivt: Enkelheten med Python gör det till ett betydligt mer tidseffektivt alternativt för utveckling och backtesting av tradingstrategier, jämfört med mer komplexa språk som C och C++.
- Dynamiska algoritmer: Pythons alla fördelar och dess popularitet för kodning bland traders gör det till ett utmärkt val för traders som vill utveckla innovativa och dynamiska algoritmer.
- Delbart: Enkelt att dela existerande moduler mellan olika program för ökad funktionalitet. Det går också att bryta ned befintliga strategier i olika moduler för att kunna dela och/eller bygga om.
- Läsvänligt: Python är enkelt att läsa och förstå även för de som är nya inom programmering.
- Enkelt att expandera och fixa: Det är relativt lätt att skapa nya moduler, vilket möjliggör smidigare expandering än i många andra mer komplexa system.
- Stort bibliotek: Python har stort stöd i olika bibliotek av koder, varför du endast behöver använda några få egna rader för att skapa en strategi. Du kan hoppa över flera steg som annars är nödvändiga för att koda trading i system som C eller C++.
- Billigt: Traders kan själva enkelt tweaka och förbättra sin kodning, varför underhållet för Python blir billigare.
- Buggar: Liveändringar i koder och data är tillåtna i Python och avbuggningen noggrann. Eventuella buggar upptäcks och åtgärdas en och en istället för i klump.
- Enkelt att analysera data: Tack vare de många biblioteken i Python kan traders utan problem analysera data i samma utsträckning och minst lika snabbt som i mer komplexa system som C och C++.
Nackdelarna med Python är betydligt färre, men några finns likväl. Framförallt handlar det om:
- Börja från början: För att kunna använda Python måste du skriva dina koder från scratch, alternativt kopiera från en öppen källa.
- Mindre bra för mobil användning: Python är framförallt starkt vid användning på dator, i desktop och för applikationer på servers, men för mobil användning fungerar det sämre. Språket anses svagt för mobilanvänding och väldigt få applikationer är således utvecklade för just mobil trading.
- Lagrar onödig data: Python behandlar varje variabel som ett unikt objekt och således lagras också mycket onödig information om varje variabel – såsom storlek, olika referenspunkter och värde. Denna massiva lagring kan leda till allvarliga brister i prestation och minne.
Alla fördelar och nackdelar inräknade kan vi konstatera att fördelarna tydligt överväger nackdelarna och att Python är ett utmärkt och varmt rekommenderat programmeringsspråk för byggande av strategier och backtesting.
Exempel på backtesting i Python
Är du intresserad av att använda Python för backtesting måste du först se till att ha ett färdig manus av din strategi redo. Första steget är sedan att importera de bibliotek du behöver, till exempel Backtrader, Zipline och LEAN, och därefter ladda hem din OHLCV data. Viktigt att tänka på är att du måste dela upp all din data i två delar – så kallad out of sample-data och in sample-data. In sample-datan använder du för dina backtester. Out of sample-datan använder du sedan för att optimera dina strategier.
För backtesting skriver du bara in dina koder i systemet och testar din strategi. Väl igång kan du optimera din strategi genom att skruva på vissa variabler – däribland vilken tidsram du använder. Efter genomfört test analyserar du dina resultat och utvärderar huruvida strategin presterade som förväntat eller om du behöver göra några förändringar.
Python vs andra mjukvaror för backtesting
Idag finns ett brett utbud av olik mjukvaror för backtesting. Är du ny inom trading och önskar komma igång med automatiserad handel/algoritmisk trading kan det, givet utbudet, vara svår att veta var du ska börja. Är Python rätt väg att gå? Eller bör du snarare satsa på mjukvara enkom utvecklade för trading, såsom TradeStation eller AmiBroker?
Överlag är många lockade att välja Python. Systemet har många fördelar, men likväl är vi inte helt övertygade om att det alltid är rätt beslut. Står du i valet och kvalet mellan Python och mjukvaror som exempelvis TradeStation och Amibroker måste du ha följande i åtanke:
- trading handlar i grund och botten om att hitta de bästa strategierna – inte om att koda.
- att använda en redan befintlig, välbyggd plattform besparar dig en hel del förarbete som du annars får lägga på kodning. Du kommer igång snabbare och sparar både tid och energi.
- kodning är ett verktyg och ska enbart ses på det sättet. Det är ingen magisk genväg till bra resultat.
- befintliga tradingplattformar har redan utmärkta färdiga funktioner – det enda du behöver göra är att trycka på knappen.
- en viktig framgångsfaktor inom trading är effektivitet. Du måste vara effektiv – och att använda en existerande plattform med färdiga funktioner är många gånger betydligt mer effektivt än att koda själv.
Trading handlar i grund och botten om “alpha-färdigheter” – inte så mycket om trading-färdigheter. Programmerare och sådana som är mycket duktiga på kodning tenderar att se på trading och finansiella marknader med ett vetenskapligt, enbart matematiskt synsätt, vilket vi vill påstå ofta kan vara till deras nackdel snarare än tvärtom. Finansiella marknader är ständigt föränderliga och icke-binära.
Under alla våra år som professionella traders har vi stött på och kommit i kontakt med många entusiaster som lagt ned stora mängder tid på att koda, skapa egna plattformar och bygga diagram och andra verktyg från grunden. Givetvis kan det kännas extra tillfredsställande att göra något som ändå får betraktas som hyfsat komplicerat på egen hand – men till syvende och sist kommer det inte att generera något om strategierna inte håller måttet.
Vår rekommendation är att du lägger din tid på att lära dig förstå och analysera marknaderna, göra utförliga backtester samt analysera ditt eget tradingbeteende – snarare än att fokusera på att koda allt själv. Sannolikt kommer det att bli betydligt mer gynnsamt för dig.
Mjukvara för trading, som TradeStation om vi tar det som exempel igen, kommer dessutom med alla funktioner och finesser du kan tänkas behöva för att lyckas med algoritmisk trading. Det enda du behöver göra är att sätta upp några enkla tradingregler och inställningar – sedan är du redo att backtesta och handla. Det finns ingen anledning att uppfinna hjulet igen, helt enkelt – åtminstone inte om ditt mål är att tjäna pengar på trading.
Hur ser det ut med kostnaden då, för Python jämfört med att köpa – investera i – en färdig mjukvara för trading? Visst är Python ett billigare alternativ då tradingprogram ofta kostar runt 300 USD. Avgiften betalas dock bara en gång och ger dig en livstidslicens.
Tycker du att det låter som en stor investering är det viktigt att tänka på att även tid är pengar. Tiden du sparar med att använda en färdig mjukvara jämfört med att koda själv i Python gör att du tjänar in investeringen flera gånger om. Enligt vår mening är det väl spenderade pengar.
Sammanfattning: Python tradingstrategi
Python är ett programmeringsspråk med öppen källkod som kan användas för en rad olika syften, men som kommit att bli mycket populärt inom finansiell trading. Med Python kan traders relativt enkelt koda egna strategier för algoritmisk trading och sedan använda dem för såväl backtesting som live trading i något av de många system som har stöd för Python.
Jämfört med C, C++ och andra mer invecklade programmeringsspråk är Python enkelt, användarvänligt och lättillgängligt för fler, vilket sannolikt också är varför det blivit det dominerande språket för kodning inom finansiell handel.
Python har många starka fördelar och ett par nackdelar, precis som med allt annat – men för den som vill testa Python är det viktigaste att överväga huruvida det är värt tiden som krävs för att koda själv, jämfört med att använda en färdig mjukvara för finansiell trading.
Python är ett utmärkt alternativ för de som vill koda sina strategier själva och backtesta dem i en miljö stöttad av Python – men generellt tror vi att ett befintligt tradingprogram, där alla de funktioner och finesser som du måste koda själv i Python redan finns färdiga, är mer fördelaktigt för de flesta.