lördag 26 november 2011

En intressant selektionsteknik för genetiska algoritmer

Jag har funnit mig själv mer och mer ockuperad med att skapa genetiska algoritmer för att hitta och optimera tradingstrategier. Simulerad evolution är häftigt, man ger algoritmen en funktion att optimera och kan sedan luta sig tillbaka och se på när lösningarna muteras och fortplantar sig med varandra. Dock finns det många alternativ för hur detta ska skötas bäst för att få det mest optimala resultatet.

En vanlig teknik som jag använt är att låta fitnessvärdena för individerna i populationen utgöra ett roulettehjul där de med högre tar upp mer plats och därför får stå som original för nästa generation fler gånger. I min serie om candlestick-mönster valde jag just den här selektionstekniken. Dock är det inte så passande för alla fitnessfunktioner, ibland kan en individ få utgöra alltför stor del av hjulet och då omedelbart koncentrera all fortsatt evolution till ett litet område runtom den individen. Ett mer praktiskt sätt att välja ut individer och sätta press på populationen är att ha en turneringsselektion. Man låter två slumpmässigt utvalda individer "tävla" om att få vara förälder till den nya individen. Man kan t.ex. också låta förlorarens plats i populationen ersättas av den nya individen för att skapa ytterligare press. Det var den här tekniken jag hade när jag tränade de neurala nätverken på Xact-fonderna och Ericsson B-aktien.

En idé på en ännu bättre selektionsteknik fick jag från det här pappret. Genom att dela upp hela populationen i två delar, de m% sämsta och den 1-m% bästa och sedan ta en förälder från båda kan man hålla variationen intakt under lång tid samtidigt som det finns ett press till det bättre. Om man t.ex. vill ha ett så hög fitnessvärde som möjligt kan man låta m vara 51. De bästa 49% kommer då stå för hälften av föräldrarna och de sämsta 51% kommer stå för den andra hälften. Då de bättre individerna kommer ha högre chans att väljas kommer populationen att röra sig mot ett högre medelvärde för fitnessvärdena.

För att visa med ett exempel på hur det kan fungera har jag tagit exemplet på ett neuralt nätverk i MS Excel och låtit m vara 51. Här är resultatet från 500 iterationer med en populationsstorlek på 60 individer. Mutationstakten sattes till 0% och fitnessfunktionen sattes till total vinst.





KvA

2 kommentarer:

  1. Tack för en väldigt läsvärd blogg. Jag undrar om du skulle kunna undersöka ma20&ma100, hur dessa fungerar ihop. Bättre än ma20&ma200? Vilka aktier fungerar ma20&100/200 bäst på?
    Hur väl fungerar MACD i kombination med dessa olika MA-värden i veckodiagrammet och dagsdiagrammet? Några aktier som historiskt sätt varit extra lönsamma? Mvh

    SvaraRadera
  2. Här testade jag en massa olika kombinationer av medelvärden, http://kvantitativ-analys.blogspot.com/2010/10/glidande-medelvarden-och-borsklimat-del.html.

    Har inte testat på veckodata med det finns ingen anledning till varför det skulle skilja sig signifikant. MACD testade jag här bland annat, http://kvantitativ-analys.blogspot.com/2011/08/ma5ma14-med-macd.html.
    MVH.

    SvaraRadera