söndag 8 maj 2011

Candlestick-projekt

Det här kan bli kul.

Som jag la ut i ett föregående inlägg så kan man undersöka dugligheten hos candlestick -formationer genom att först definiera de objektivt och sedan låta en algoritm optimera fram den bästa formationen. Den algoritm jag främst hade i åtanke var en genetisk algoritm, där man låter principen bakom det naturliga urvalet arbeta fram den bästa candlestick-formationen. Projektet ska läggas upp ungefär så här:

Genetisk Algoritm: en simulerad evolution av olika lösningar på ett problem, i det här fallet en värdematris som representerar hur en viss candlestick-formation ter sig. Man börjar helt enkelt med en population och låter sedan den populationen ge upphov till en ny generation med en förutbestämd selektionsprocess. För att ranka individerna använder man någon sorts fitness-funktion. Här finns det många varianter för att bestämma vilka som ska få föröka sig. Ett sätt är att ha turneringar där man låter två slumpmässigt valda individer tävla om vilken som ska bli en av förälder. Ett annat sätt är att man bara rensar bort sämsta x-procent av populationen. Jag har bestämt mig för att gå en annan väg och låta sannolikheten att bli utvald till förälder till individerna i den nya generationen stå i direkt relation till individens fitness-värde. Man kan föreställa sig det som ett rouletthjul där de bättre individerna enligt fitness-funktionen tar upp större utrymma vilket gör att kulan hamnar på de oftare. Det ger de sämre individerna en chans att föröka sig vilket bidrar till att hålla variationen uppe och minskar risken för att algoritmen ska fastna i ett lokalt maximum. Men det skulle ge en ganska seg algoritm om det inte fanns någon större selektion som sållade ut de mindre bra individerna så att de kan ersättas av bättre. Därför har jag satt en restriktion på att en individ måste vara bättre än median för att få föröka sig. Alla under "dör".

Fitness-funktionen: sätter jag till att vara slutvärdet för en portfölj där man handlat enligt candlestick-mönstret. När det nuvarande mönstret för en aktie stämmer överens med det mönster som testas till över 90% mätt i ett enkel korrelationstest så köps aktien till stängningskursen. Portföljen börjar på ett värde på 100 och investerar alltid 100% av tillgängligt kapital. Inga kostnader för handeln simuleras.

Testdata: de aktier som ska testas är alla nuvarande komponenter i OMXS30. All tillgänglig data från Yahoo Finance har används fram till den sista mars 2009. Resresterande historik ska användas för att validera slutresultatet.

Population: jag har valt att sätta antalet till 500 individer. Det ger evolutionen lite att jobba med, men samtidigt inte för mycket för att sakta ner utvecklingen till det bättre. Jag gör ingen skillnad på honor och hanar, mina candlestick-mönster ska vara hermafroditer.

DNA: varje mönster eller individ representeras av 13 värden. Jag har valt att fokusera på mönster som sker över tre dagar. För många dagar skulle ge för många mönster, vilket gör det svårt att generalisera. För få och jag får inte tillräckligt många olika kombinationer av kurser.
Öppningskursen, högsta kursen, lägsta kursen och stängningskursen ger 4 värde för varje dag och totalt 4*3=12 för tre dagar. Det trettonde värdet är det antal dagar som ska gå efter positionen initieras tills den stängs. Strategin bygger alltså på en tidsstopp.

Mutationer: varje värde, eller gen, har en chans på 1,5% att muteras. I en population på 500 individer ger det ungefär 98 mutationer. Det är tillräckligt för att ge variation, ett för högt värde på mutationstakten ger för många dåliga individer då mutationer för det mesta är misslyckade. Prisvärdena kan muteras med en förändring på 0,25% positivt eller negativt. Det trettonde gener kan muteras till ett värde mellan 1 och 5. Jag har satt restriktionen 5 så att algoritmen inte får för sig att utveckla fram mönster som håller positioner flera år och då bara överoptimerar konjunktursvängningarna.

Iteration: för att beskriva det mer klart och tydligt fungerar en iteration så här.

  1. Två individer slumpas fram ur populationen med en sannolikhet som motsvarar det relativa fitness-värdet för individerna.
  2. En ny individ genereras genom att 13 gener tas av föräldrarna slumpmässigt. Eventuella mutationer uppstår.
  3. Individen testas och får ett fitness-värde.
  4. Individen ersätter den sämsta individen i populationen.
  5. Steg 1 till 4 upprepas tills populationen består av ett och samma mönster.
I nästa inlägg ska jag presentera resultatet.


KvA

lördag 7 maj 2011

Autobevakning av uppsatser

Ifall du inte upptäckt det, så erbjuder uppsatser.se en funktion där man kan begära att ett e-mail skicka till sin adress så fort en uppsats skrivs med de nyckelord du valt ut.

Så skriv in ord med koppling till det ämne du är intresserad av och ta del av vad våra fina svenska studenter producerar!